《Self-Supervised Difference Detection for Weakly-Supervised Semantic Segmentation》笔记

Intorduction

该论文讲述如何用弱监督的方法训练语义分割器。弱监督方法没有强监督信息,比如ground truth。在这篇论文里,语义分割的样本标签只有图片的分类类别。已经有许多方法能够从分类信息中生成语义分割的mask。论文在这些工作的基础上,对生成的语义分割的mask调整成更加准确的mask。

输入的是粗糙的mask,输出是精细的mask的函数叫做mapping function。有研究表明,不断地把输出的mask重新输入到mapping function中,可以得到更好的结果。但是迭代的过程不能保证输出的mask一定比输入的mask要好。作者的方法针对这个问题,提出了能够保证mask不断变好的方法。作者的解释也有道理。

Method

定义输入到mapping function的信息定义为knowledge,输出信息为advice。假设advice提供监督信息,这个监督信息包含了noise,论文的方法是从advice中获取有用的信息。定义knowledge和advice不同的区域称为difference(如图1的a所示),论文用一个网络DD-Net(self-supervised difference detection module)来预测这个difference。DD-Net会用到knowledge或advice的其中一个。在训练时可以通过knowledge和advice来计算得到。DD-Net的监督信息(gt)通过数据自己产生,所以DD-Net时自监督学习的。

the concept of the proposed approach

在实际的advice中,有的advice可以预测,有的不可以预测。一些advice可以容易地推断,因为在训练的时候包含许多相似的样本。作者假设advice包含足够多的好的信息,可以预测的信息可以当作是有用的信息。因此,作者提出的一个方法来选择信息。这些信息是advice真实信息,可以在difference检测中推断出来的信息。如图1的bc所示,knowledge是输入的mask,advice是输出的mask,advice和knowledge不同的部分说明knowledge在这些部分的分类结果可能有错。用DD-Net来检测knowledge的有错的地方(difference),能够预测出来的地方称为predictable difference。因为DD-Net是根据数据集的样本训练得到的,DD-Net能够预测出来的difference确实是knowledge中分类出错的地方。advice包含noise,可以分为true advice和false advice,true advice对应的是对的建议,这个true advice有用的信息,这些有用的信息存在于数据的样本中,DD-Net可以学习得到,true advice就等同于predictable difference。简单说就是DD-Net通过训练得到的信息是有用信息,可以用来更正已有mask的错误。

difference detection network

先来说说怎么预测difference。knowledge是通过其他弱监督的方法生成的语义分割的mask或者是mapping function的输出mask。不少论文也提出了多种mapping function,常用的是CRF方法。advice是mapping function的输出。有了knowledge和advice,可以计算他们的difference。定义knowledge为mKm^K,advice为mAm^A,difference为MK,ARH×WM^{K,A} \in \Bbb{R}^{H \times W}
MuK,A={1if(muK=muA)0if(muKmuA)(1) M^{K,A}_u = \begin{cases} 1 & \text{if} (m^K_u = m^A_u) \\ 0 & \text{if} (m^K_u \neq m^A_u) \end{cases} \tag{1}

接着看看DD-Net的网络结构
DD-Net
DD-Net输入的有backbone network的high-level features eh(x;θe)e^h(x;\theta_e)和low-level featuresel(x;θe)e^l(x;\theta_e),还有一个mask m^\hat{m},输出的是difference mask的置信度map d。训练的损失函数是
Ldiff=1SuS(J(MK,A,dK,u;θd)J(MK,A,dA,u;θd))(2) \begin{aligned} \mathcal{L}_{\text{diff}} = \frac{1}{|S|} \sum_{u \in S}( & J(M^{K,A}, d^K, u; \theta_d) \\ & J(M^{K,A}, d^A, u; \theta_d)) \end{aligned} \tag{2}
其中
J(M,d,u)=Mulogdu+(1Mu)log(1du) J(M,d,u) = M_u \log d_u + (1 - M_u) \log (1 - d_u)

在我的理解中,DD-Net的作用可以认为是判断输入的mask各个pixel的label是否分类错误。置信度map d的值越大,说明对应的pxiel分类错的概率越大。

Self-supervised difference detection module (SSDD)

论文同时对knowledge和advice的mask进行错误预测。然后根据这两者的预测结果更新mask。

overview of SSDD
knowledge和advice通过DD-Net后分别得到置信度map dKd^KdAd^A。然后考虑把knowldege、advice、dKd^KdAd^A结合起来,生成更加准确的mask。

如果knowledge的错误率比advice更高(高出某个阈值),则更新mask对应位置的值为advice的值,否则,保留knowledge的值。
wu=duKduA+biasu(3) w_u = d^K_u - d^A_u + \text{bias}_u \tag{3}
更新mask
MuD={muAif(wu0)muKif(wu<0)(4) M^{D}_u = \begin{cases} m^A_u & \text{if} (w_u \ge 0) \\ m^K_u & \text{if} (w_u \lt 0) \end{cases} \tag{4}
SSDD的公式如下
mD=SSDD(e(x),mK,mA;θd)(5) m^D = SSDD(e(x), m^K, m^A; \theta_d) \tag{5}
其中e(x)=(el(x),eh(x))e(x)=(e^l(x), e^h(x))

weakly-supervised semantic segmentation

接下来看如何把SSDD应用到语义分割的弱监督训练的过程。

训练过程分成两部分。

Seed mask generation stage with static region refinement

该过程使用PSA方法生成语义分割的初始mask mK0m^{K0},用mK0m^{K0}训练一个分割网络,用CRF方法微调mK0m^{K0}得到mA0m^{A0},然后把mK0m^{K0}mA0m^{A0}输入到一个SSDD中得到比较正确的mD0m^{D0}

static region refinement

DD-Net的训练损失函数如下
Ldiff0=1SuS(J(MK0,A0,dK0,u;θd0)J(MK0,A0,dA0,u;θd0))(6) \begin{aligned} \mathcal{L}_{\text{diff0}} = \frac{1}{|S|} \sum_{u \in S}( & J(M^{K0,A0}, d^{K0}, u; \theta_{d0}) \\ & J(M^{K0,A0}, d^{A0}, u; \theta_{d0})) \end{aligned} \tag{6}

如果mK0m^{K0}mA0m^{A0}的mask都不对,用他们来训练是没有意义了,论文中这种样本去掉。论文没有具体说怎么去掉这些坏样本,可能人工筛选排除?

训练分割网络SegNet的损失函数如下
Lbase=Lseg(x,mK0;θe0,θbase)(7) \mathcal{L}_{\text{base}} = \mathcal{L}_{\text{seg}}(x, m^{K0}; \theta_{e0}, \theta_{\text{base}}) \tag{7}
Lseg(x,m;θ)=1kKSkmkKuSkmlog(huk(θ))(8) \mathcal{L}_{\text{seg}}(x, m; \theta) = - \frac{1}{\sum_{k \in K} |S_k^m|} \sum_{k \in K} \sum_{u \in |S_k^m|} \log (h_u^k(\theta)) \tag{8}
总的来说,该阶段的损失函数是
Lstatic=Lbase+Ldiff0(9) \mathcal{L}_{\text{static}} = \mathcal{L}_{\text{base}} + \mathcal{L}_{\text{diff0}} \tag{9}
该阶段的作用是
mD0=SSDD(e(x),mK0,mA0;θd0)(10) m^{D0} = SSDD(e(x), m^{K0}, m^{A0}; \theta_{d0}) \tag{10}

Training stage of a fully supervised segmentation model with a dynamic region refinement

该阶段,首先SegNet生成分割结果mK1m^{K1},通过CRF微调得到mA1m^{A1}mK1m^{K1}mA1m^{A1}输入到一个SSDD module1 中得到mD1m^{D1}。接着,mD1m^{D1}和上个阶段得到的mD0m^{D0}输入到另一个SSDD module2中得到mD2m^{D2}mD2m^{D2}用来重新训练分割网络。这个过程是循环过程,不断地改进mask的结果,同时提高分割网络的表现。

dynamic region refinement

分割网络的训练损失
Lmain=Lseg(x,mD2;θe1,θmain)(11) \mathcal{L}_{\text{main}} = \mathcal{L}_{\text{seg}}(x, m^{D2}; \theta_{e1}, \theta_{\text{main}}) \tag{11}
SSDD module1 的损失函数
Ldiff1=1SuS(J(MK1,A1,dK1,u;θd1)J(MK1,A1,dA1,u;θd1))(12) \begin{aligned} \mathcal{L}_{\text{diff1}} = \frac{1}{|S|} \sum_{u \in S}( & J(M^{K1,A1}, d^{K1}, u; \theta_{d1}) \\ & J(M^{K1,A1}, d^{A1}, u; \theta_{d1})) \end{aligned} \tag{12}
SSDD module2 的训练过程和SSDD module1不同。因为mK1,mA1,mD1m^{K1},m^{A1},m^{D1}依赖分割网络的分割结果,如果分割网络的分割结果太极端,比如mask全为0或全为1,这些mask就没意义。为了防止分割网络出现这种情况,作者在分割网络中引出一条分支,用来预测mD0m^{D0}mD1m^{D1}的difference,预测结果记为msubm^{sub}
SSDD module2的训练损失为
Ldiff2=1SuS(J(MD0,sub,dD0,u;θd2)J(Msub,D1,dD1,u;θd2))(13) \begin{aligned} \mathcal{L}_{\text{diff2}} = \frac{1}{|S|} \sum_{u \in S}( & J(M^{D0,sub}, d^{D0}, u; \theta_{d2}) \\ & J(M^{sub,D1}, d^{D1}, u; \theta_{d2})) \end{aligned} \tag{13}
分支的训练损失为
Lsub=αLseg(x,mD0;θe1,θsub)+(1α)Lseg(x,mD1;θe1,θbase)(14) \mathcal{L}_{sub} = \alpha \mathcal{L}_{seg}(x, m^{D0}; \theta_{e1}, \theta_{sub}) + (1 - \alpha) \mathcal{L}_{seg} (x, m^{D1}; \theta_{e1}, \theta_{base}) \tag{14}
最终总结该阶段的损失
Ldynamic=Lmain+Lsub+Ldiff1+Ldiff2(15) \mathcal{L}_{\text{dynamic}} = \mathcal{L}_{\text{main}} + \mathcal{L}_{\text{sub}} + \mathcal{L}_{\text{diff1}} + \mathcal{L}_{\text{diff2}} \tag{15}

Experiment

看看该方法得到的mask的结果
mask

分割的结果,与其他方法比较
comparision with the WSS methods without additional supervision
comparision with the WSS methods with additional supervision

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章