本文共 3690 字,大约阅读时间需要 12 分钟。
参考代码:
导读:目前流行的语义分割网络架构都是编解码结构的,往往在解码器的最后是添加一个upsampling(图像的双线性插值)实现decoder输出与训练标注的尺寸一致,但是对于这样的实现文章指出这是一种过于简单且非数据依赖的操作,可能会导致结果并非最优。对此这篇文章从upsampling角度出发,从而提出了一种新的上采样方式DUpsampling(data-dependent upsampling),文章提出的方法使用最小化映射误差的方式计算变化矩阵(可以通过 1 ∗ 1 1*1 1∗1的卷积实现),从而将upsampling与标注数据关联起来,从而使得pixel-wise的输出更加准确,尤其是在一些低分辨率特征尺寸是原输入图像的 1 16 , 1 32 \frac{1}{16},\frac{1}{32} 161,321的时候文章的方法能获取较为明显的提升,并且采用了这样的upsampling方法可以在网络设计的时候极大减少decoder部分的计算量,因而文章提出的upsampling方法具有如下的优点:
1)极大提升网络重建分割结果的能力,并且减少decoder计算量(使用文章的策略); 2)文章的犯法具有较好的扩展性,能够在当前的很多分割网络上使用; 文章的方法在PASCAL VOC与PASCAL Context两个数据集上达到了SOTA,其性能分别为88.1%和52.5%mIoU。
在图1中展示的是DeepLab-V3的编解码结构,其中在stride为8与4的时候进行了一次上采样操作。
文章指出这样的结构其实是限制了分割的性能,其采用的双线性上采样算法并没有考虑像素之间的关联性,是数据无关的。这样的结果就导致了网络需要较浅层(更高分辨率)的特征做融合,从而构建更加精细的分割结果,但是这样随之会产生两个问题:
若分割网络解码器输出的特征图为 F ∈ R H ^ ∗ W ^ ∗ C ^ F\in R^{\hat{H}*\hat{W}*\hat{C}} F∈RH^∗W^∗C^,而对应的标注为 Y ∈ { 0 , 1 , 2 , … , C } H , W , Y ∈ { 0 , 1 } H ∗ W ∗ C Y\in \{0,1,2,\dots,C\}^{H,W},Y\in\{0,1\}^{H*W*C} Y∈{ 0,1,2,…,C}H,W,Y∈{ 0,1}H∗W∗C,那么特征图与标注之间的尺度比例关系为 H ^ H = W ^ W = 1 16 o r 1 32 \frac{\hat{H}}{H}=\frac{\hat{W}}{W}=\frac{1}{16}or\frac{1}{32} HH^=WW^=161or321,则原有的网络损失函数可以描述为:
L ( F , Y ) = L o s s ( s o f t m a x ( b i l i n e a r ( F ) ) , Y ) ) L(F,Y)=Loss(softmax(bilinear(F)),Y)) L(F,Y)=Loss(softmax(bilinear(F)),Y)) 对此,文章先是对upsampling操作进行改进,之后对应的decoder部分网络进行简化(提升速度),并且提出了适应新upsampling方法的T-softmax(参考蒸馏网络),因而新的网络结构为:原始的双线性插值是不能建立特征与标签之间的关联的,因而这部分就是要将这两个部分耦合起来,建立他们之间的关系。对此文章将标注Y进行下采样得到 Y ^ ∈ R H ^ ∗ W ^ ∗ C ^ \hat{Y}\in R^{\hat{H}*\hat{W}*\hat{C}} Y^∈RH^∗W^∗C^,这里下采样的比例 r = 16 o r 32 r=16\ or\ 32 r=16 or 32,因而下采样的时候使用这个比例可以将输入的数据划分为多个格子,每个格子的为 S ∈ { 0 , 1 } r ∗ r ∗ C S\in \{0,1\}^{r*r*C} S∈{ 0,1}r∗r∗C,之后将其reshape成为一个向量 v ∈ { 0 , 1 } N , N = r ∗ r ∗ C v\in \{0,1\}^N,N=r*r*C v∈{ 0,1}N,N=r∗r∗C,接下来就是将其映射到更低分辨率的向量 x ∈ R C ^ x\in R^{\hat{C}} x∈RC^。文章中采用是简单的矩阵映射的形式,将整个下采样与上采样的过程描述为:
x = P v ; v ^ = W x x=Pv;\hat{v}=Wx x=Pv;v^=Wx 其中, P ∈ R C ^ ∗ N P\in R^{\hat{C}*N} P∈RC^∗N用于下采样,而 W ∈ R N ∗ C ^ W\in R^{N*\hat{C}} W∈RN∗C^用于上采样。对应的过程如下图所示:使用文章的方法将双线性插值换成DUpsampling之后使用原有的softmax与交叉熵损失函数会存在较多损失跳跃(变换矩阵 W W W是在标注为one-hot编码形式下计算出来的)
在常用的decoder网络中会将特征进行上采样得到一个尺寸较大的特征图:
F = f ( c o n c a t ( F i , u p s a m p l e ( F l a s t ) ) ) F=f(concat(F_i,upsample(F_{last}))) F=f(concat(Fi,upsample(Flast))) 这样的方式增大了decoder中特征的尺寸,从而增加了计算量,并且使用的stride一般为4,也无法使用文章的方法(带来的增益少),对此文章提出了一种的新的特征融合策略: F = f ( c o n c a t ( F l a s t , d o w n s a m p l e ( F i ) ) ) F=f(concat(F_{last},downsample(F_i))) F=f(concat(Flast,downsample(Fi))) 这里将backbone中的特征统一地下采样到最小的特征尺寸,之后进行特征融合,下面是使用不同的融合策略带来的计算量与性能的分析:转载地址:http://cwkhj.baihongyu.com/