《Decoders Matter for Semantic Segmentation》论文笔记

参考代码:DUpsampling

1. 概述

导读:目前流行的语义分割网络架构都是编解码结构的,往往在解码器的最后是添加一个upsampling(图像的双线性插值)实现decoder输出与训练标注的尺寸一致,但是对于这样的实现文章指出这是一种过于简单且非数据依赖的操作,可能会导致结果并非最优。对此这篇文章从upsampling角度出发,从而提出了一种新的上采样方式DUpsampling(data-dependent upsampling),文章提出的方法使用最小化映射误差的方式计算变化矩阵(可以通过111*1的卷积实现),从而将upsampling与标注数据关联起来,从而使得pixel-wise的输出更加准确,尤其是在一些低分辨率特征尺寸是原输入图像的116,132\frac{1}{16},\frac{1}{32}的时候文章的方法能获取较为明显的提升,并且采用了这样的upsampling方法可以在网络设计的时候极大减少decoder部分的计算量,因而文章提出的upsampling方法具有如下的优点:
1)极大提升网络重建分割结果的能力,并且减少decoder计算量(使用文章的策略);
2)文章的犯法具有较好的扩展性,能够在当前的很多分割网络上使用;
文章的方法在PASCAL VOC与PASCAL Context两个数据集上达到了SOTA,其性能分别为88.1%和52.5%mIoU。

在图1中展示的是DeepLab-V3的编解码结构,其中在stride为8与4的时候进行了一次上采样操作。
《Decoders Matter for Semantic Segmentation》论文笔记

文章指出这样的结构其实是限制了分割的性能,其采用的双线性上采样算法并没有考虑像素之间的关联性,是数据无关的。这样的结果就导致了网络需要较浅层(更高分辨率)的特征做融合,从而构建更加精细的分割结果,但是这样随之会产生两个问题:

  • 1)将原有网络的stride从32降低到8,并且使用膨胀卷积扩大感受野,这样会导致较大的计算与内存开销,从而限制了整体网络的运算速度;
  • 2)decoder为了更好的分割结果需要融合stride=4的特征,因而分割网络的性能很大程度上依赖于低层次的特征,这正是使用普通非数据依赖双线性上采样的结果。这样的decoder结构限制了进行特征融合的空间,将网络限制到了局部解里面。而使用文章的方法就可以将为了性能而引入高分辨率特征的约束打破;

2. 方法设计

2.1 网络结构

若分割网络解码器输出的特征图为FRH^W^C^F\in R^{\hat{H}*\hat{W}*\hat{C}},而对应的标注为Y{0,1,2,,C}H,W,Y{0,1}HWCY\in \{0,1,2,\dots,C\}^{H,W},Y\in\{0,1\}^{H*W*C},那么特征图与标注之间的尺度比例关系为H^H=W^W=116or132\frac{\hat{H}}{H}=\frac{\hat{W}}{W}=\frac{1}{16}or\frac{1}{32},则原有的网络损失函数可以描述为:
L(F,Y)=Loss(softmax(bilinear(F)),Y))L(F,Y)=Loss(softmax(bilinear(F)),Y))
对此,文章先是对upsampling操作进行改进,之后对应的decoder部分网络进行简化(提升速度),并且提出了适应新upsampling方法的T-softmax(参考蒸馏网络),因而新的网络结构为:
《Decoders Matter for Semantic Segmentation》论文笔记

2.2 DUpsampling

原始的双线性插值是不能建立特征与标签之间的关联的,因而这部分就是要将这两个部分耦合起来,建立他们之间的关系。对此文章将标注Y进行下采样得到Y^RH^W^C^\hat{Y}\in R^{\hat{H}*\hat{W}*\hat{C}},这里下采样的比例r=16 or 32r=16\ or\ 32,因而下采样的时候使用这个比例可以将输入的数据划分为多个格子,每个格子的为S{0,1}rrCS\in \{0,1\}^{r*r*C},之后将其reshape成为一个向量v{0,1}N,N=rrCv\in \{0,1\}^N,N=r*r*C,接下来就是将其映射到更低分辨率的向量xRC^x\in R^{\hat{C}}。文章中采用是简单的矩阵映射的形式,将整个下采样与上采样的过程描述为:
x=Pv;v^=Wxx=Pv;\hat{v}=Wx
其中,PRC^NP\in R^{\hat{C}*N}用于下采样,而WRNC^W\in R^{N*\hat{C}}用于上采样。对应的过程如下图所示:
《Decoders Matter for Semantic Segmentation》论文笔记
那么接下来的问题就是要训练两个矩阵P,WP,W使得下采样之后的结果经过上采样与原数据的差异尽可能地小,从而这个过程可以描述为:
P,W=arg minP,Wvvv^2=arg minP,WvvWPv2P^{*},W^{*}=\argmin_{P,W}\sum_v||v-\hat{v}||^2=\argmin_{P,W}\sum_v||v-WPv||^2
上面的优化过程可以SGD下降法进行求解(在实际过程中是预先计算好的)。得到下采样之后结果之后就可以在特征的分辨率进行损失计算:
L(F,Y)=FY^2L(F,Y)=||F-\hat{Y}||^2
而更加普遍的方式是将特征映射到原始的标注大小进行损失计算:
L(F,Y)=Loss(softmax(DUpsampling(F)),Y)L(F,Y)=Loss(softmax(DUpsampling(F)),Y)

2.3 T-Softmax

使用文章的方法将双线性插值换成DUpsampling之后使用原有的softmax与交叉熵损失函数会存在较多损失跳跃(变换矩阵WW是在标注为one-hot编码形式下计算出来的)
《Decoders Matter for Semantic Segmentation》论文笔记
对此文章借鉴了知识蒸馏中的策略将特征软化,从而使得损失曲线平滑一些。
softmax(zi)=exp(zi/T)jexp(zj/T)softmax(z_i)=\frac{exp(z_i/T)}{\sum_jexp(z_j/T)}
其中,TT是一个随着网络训练的参数。

2.4 Feature Fusion Strategy

在常用的decoder网络中会将特征进行上采样得到一个尺寸较大的特征图:
F=f(concat(Fi,upsample(Flast)))F=f(concat(F_i,upsample(F_{last})))
这样的方式增大了decoder中特征的尺寸,从而增加了计算量,并且使用的stride一般为4,也无法使用文章的方法(带来的增益少),对此文章提出了一种的新的特征融合策略:
F=f(concat(Flast,downsample(Fi)))F=f(concat(F_{last},downsample(F_i)))
这里将backbone中的特征统一地下采样到最小的特征尺寸,之后进行特征融合,下面是使用不同的融合策略带来的计算量与性能的分析:
《Decoders Matter for Semantic Segmentation》论文笔记

3. 实验结果

《Decoders Matter for Semantic Segmentation》论文笔记