[论文阅读] Semi-supervised Semantic Segmentation via Strong-Weak Dual-Branch Network

[论文地址] [代码] [ECCV 20]

Abstract

虽然现有的工作已经探索了各种技术来推动弱监督语义分割的发展,但与监督方法相比仍有很大差距。在现实世界的应用中,除了大量的弱监督数据外,通常还有一些可用的像素级注释,在此基础上,半监督跟踪成为一种有前途的语义分割方式。目前的方法只是将这两组不同的注释捆绑在一起,训练一个分割网络。然而,我们发现这样的处理方式是有问题的,所取得的结果甚至比仅仅使用强标签还要糟糕,这表明对弱标签的误用。为了充分挖掘弱标签的潜力,我们建议通过一个强弱双分支网络对强注释和弱注释进行单独处理,将大量不准确的弱监督与强监督区分开来。我们设计了一个共享的网络组件来利用强注释和弱注释的联合判别;同时,建议的双分支分别处理完全和弱监督学习,并有效地消除它们的相互干扰。这种简单的结构在训练过程中只需要少量的额外计算成本,但却比以前的方法有明显的改进。在两个标准基准数据集上的实验表明了所提方法的有效性。


Intro

本文虽然标题只有Semi字样,但本身做的是Semi- and Weakly-Supervised Segmentation,即利用少量的完整标注数据与大量的弱标注数据来训练模型。

作者首先发现了一个事实,即简单将强弱标签混合在一起训练,效果甚至不如仅用弱标签,相应的对比如下:
在这里插入图片描述
可以发现Strong 1.4k + Weak 9k的性能甚至比Weak 10k略低;这个现象可以进一步从两个角度理解:

  • 在Weak 9k的基础上,增加1.4k高质量标注的效果只比加1k弱标签的质量略高一点点,没有带来本质上的改变
  • 在Strong 1.4k的基础上,增加9k弱标签甚至会造成性能大幅下降

这种情况是由以下两个原因导致的:

  • 样本不均衡。即大量的弱标签实际上"污染"了少量的强标签,造成网络对弱标签overfit
  • 监督不一致。由于网络对弱标签overfit,那么预测的结果质量也与弱标签较差的质量相当

而本文的相应解法也很简单,使用Dual Decoder架构来显式拆分处理两种监督信号。标题叫Dual Branch的一个原因似乎是两个Decoder之间仍然会共享若干层。


Network

在这里插入图片描述
本文框架如上所示。其中backbone | h(x) 对应着分割网络特征提取部分,例如VGG16;neck对应着两个Decoder的共享的卷积部分,包含n个卷积层;剩下的则为两个Decoder的非共享卷积部分,各自包含(3-n)个卷积层。强弱两个Decoder的结构完全相同,区别仅在与监督信号不同。

注意上面超参n的范围为0到3,也就是两个Decoder可以不共享任何信息(n=0)或者直接退化成单分支网络(n=3)。

而关于这两个分支的损失函数,其均使用标准的交叉熵损失来进行监督,并且没有做任何加权,如下所示: L data  = L c e ( s s , m s ) + L c e ( s w , m w ) \mathcal{L}_{\text {data }}=\mathcal{L}_{c e}\left(s^s, m^s\right)+\mathcal{L}_{c e}\left(s^w, m^w\right) Ldata =Lce(ss,ms)+Lce(sw,mw)


Training & Testing

Training 每个输入batch包含一半的强标注样本与一半的弱标注样本。从这里可以看到,由于每个batch是对半分的而不是按照数据集比例分(即每个batch强弱样本1:9),在batch层面进行了变相的oversample。

接着,每个batch便会传递到强弱两个不同的分支;对于强分支,只计算batch中强标注样本的loss并进行梯度反传;对于弱分支,只计算batch中弱标注样本的loss并进行梯度反传。

扫描二维码关注公众号,回复: 16283344 查看本文章

Testing 由于弱分支的作用为在训练阶段帮助强弱分支共享部分(即neck)的学习,因此在测试阶段只需要保留强分支即可。

猜你喜欢

转载自blog.csdn.net/qq_40714949/article/details/128962285