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时自监督学习的。

在实际的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为mK,advice为mA,difference为MK,A∈RH×W
MuK,A={10if(muK=muA)if(muK=muA)(1)
接着看看DD-Net的网络结构

DD-Net输入的有backbone network的high-level features eh(x;θe)和low-level featuresel(x;θe),还有一个mask m^,输出的是difference mask的置信度map d。训练的损失函数是
Ldiff=∣S∣1u∈S∑(J(MK,A,dK,u;θd)J(MK,A,dA,u;θd))(2)
其中
J(M,d,u)=Mulogdu+(1−Mu)log(1−du)
在我的理解中,DD-Net的作用可以认为是判断输入的mask各个pixel的label是否分类错误。置信度map d的值越大,说明对应的pxiel分类错的概率越大。
Self-supervised difference detection module (SSDD)
论文同时对knowledge和advice的mask进行错误预测。然后根据这两者的预测结果更新mask。

knowledge和advice通过DD-Net后分别得到置信度map dK和dA。然后考虑把knowldege、advice、dK和dA结合起来,生成更加准确的mask。
如果knowledge的错误率比advice更高(高出某个阈值),则更新mask对应位置的值为advice的值,否则,保留knowledge的值。
wu=duK−duA+biasu(3)
更新mask
MuD={muAmuKif(wu≥0)if(wu<0)(4)
SSDD的公式如下
mD=SSDD(e(x),mK,mA;θd)(5)
其中e(x)=(el(x),eh(x))。
weakly-supervised semantic segmentation
接下来看如何把SSDD应用到语义分割的弱监督训练的过程。
训练过程分成两部分。
Seed mask generation stage with static region refinement
该过程使用PSA方法生成语义分割的初始mask mK0,用mK0训练一个分割网络,用CRF方法微调mK0得到mA0,然后把mK0和mA0输入到一个SSDD中得到比较正确的mD0。

DD-Net的训练损失函数如下
Ldiff0=∣S∣1u∈S∑(J(MK0,A0,dK0,u;θd0)J(MK0,A0,dA0,u;θd0))(6)
如果mK0和mA0的mask都不对,用他们来训练是没有意义了,论文中这种样本去掉。论文没有具体说怎么去掉这些坏样本,可能人工筛选排除?
训练分割网络SegNet的损失函数如下
Lbase=Lseg(x,mK0;θe0,θbase)(7)
Lseg(x,m;θ)=−∑k∈K∣Skm∣1k∈K∑u∈∣Skm∣∑log(huk(θ))(8)
总的来说,该阶段的损失函数是
Lstatic=Lbase+Ldiff0(9)
该阶段的作用是
mD0=SSDD(e(x),mK0,mA0;θd0)(10)
Training stage of a fully supervised segmentation model with a dynamic region refinement
该阶段,首先SegNet生成分割结果mK1,通过CRF微调得到mA1,mK1和mA1输入到一个SSDD module1 中得到mD1。接着,mD1和上个阶段得到的mD0输入到另一个SSDD module2中得到mD2。mD2用来重新训练分割网络。这个过程是循环过程,不断地改进mask的结果,同时提高分割网络的表现。

分割网络的训练损失
Lmain=Lseg(x,mD2;θe1,θmain)(11)
SSDD module1 的损失函数
Ldiff1=∣S∣1u∈S∑(J(MK1,A1,dK1,u;θd1)J(MK1,A1,dA1,u;θd1))(12)
SSDD module2 的训练过程和SSDD module1不同。因为mK1,mA1,mD1依赖分割网络的分割结果,如果分割网络的分割结果太极端,比如mask全为0或全为1,这些mask就没意义。为了防止分割网络出现这种情况,作者在分割网络中引出一条分支,用来预测mD0和mD1的difference,预测结果记为msub。
SSDD module2的训练损失为
Ldiff2=∣S∣1u∈S∑(J(MD0,sub,dD0,u;θd2)J(Msub,D1,dD1,u;θd2))(13)
分支的训练损失为
Lsub=αLseg(x,mD0;θe1,θsub)+(1−α)Lseg(x,mD1;θe1,θbase)(14)
最终总结该阶段的损失
Ldynamic=Lmain+Lsub+Ldiff1+Ldiff2(15)
Experiment
看看该方法得到的mask的结果

分割的结果,与其他方法比较

