欢迎扫描二维码关注微信公众号 深度学习与数学 [获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
论文地址 :FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation
工程地址:github 链接
时下的语义分割模型通常在主干网络中使用扩展卷积来获得高分辨率的特征图,但是这样做会增加计算复杂度和内存占用。该论文提出了一种新型的联合上采样模块JPU(Joint Pyramid Upsampling)以取代扩张卷积,该方法有效降低了计算复杂度和内存占用,能够在多种已有模型中应用,并且不损失甚至会对最终精度有一定的提升。
语义分割时计算机视觉的基本任务之一,其目标是为图像的每一个像素点进行。现有方法大多应用了全卷积神经网络(FCN)来完成这一任务,但是全卷积网络的原始网络是为图像分类任务设计的,通过逐步下采样(stride conv和池化层)得到一个富含语义信息但是分辨率很低的特征图,如下图所示,全卷积网络对原始图片进行五次典型的下采样得到原始图片 1 32 \frac{1}{32} 321大小的特征图。
为了获得最终的高分辨率特征图,一些方法将原始的FCN作为编码器来获取深层语义信息,增加解码器模块以融合来自编码器的多各层次的特征图以获取高分辨率特征图,如下图所示,如Unet,SegNet等。
更进一步的,DeepLab方法一处FCN最后两层下采样操作并引入扩张卷积来保持特征图感受野不变,后跟一个多尺度的语义模块从而得到最终效果,如下图所示,其中扩张卷积在保持最终特征图的分辨率方面作用明显,大大提升了编解码语义分割方法的分割精度,然而正如摘要中提到,扩展卷积大大增加了计算复杂度和内存占用,限制了其在实时问题上的应用。
该论文针对这一问题对出了新型的联合上采样模块JPU,在OS=32的FCN上应用得到了OS=8的高分辨率特征图,通过一系列的实验证明,在计算复杂度和内存占用都显著减少的同时模型精度并无明显降低。
综合来看论文的主要贡献在于:
略
为了获得分辨率更高的最终特征图,DilatedFCN移除了原始FCN中后两层下采样操作,并添加扩张卷积。该论文则要寻找能够取代这种操作并且在不损精度的条件下提速的方法来获得与DilatedFCN相同的高分辨率特征图,为此,论文首相将DialtedFCN移除的下采样层还原,如下图所示,文中方法的主干网络和原始FCN相同,五次下采样操作每次都缩小两倍,为了获得和DilatedFCN相同尺寸的特征图,应用JPU模块,它融合Conv3,4,5三层特征图,通过多尺度语义模块后得到最终的预测结果。
论文提出的JPU模块用于生成与DilatedFCN相通尺寸的特征图,该问题可以视为联合上采样,这样可以通过CNN来解决这一问题。
联合上采样 给定一个低分辨率的目标图 y l y_l yl和一个高分辨率的引导图 x h x_h xh,联合上采样的作用是将引导图中的细节和结构信息转化到目标图中以生成高分辨率的目标图。形式化来说, y l y_l yl是有低分辨率的引导图 x l x_l xl通过转化 f ( ⋅ ) f(\cdot) f(⋅)实现的,即 y l = f ( x l ) y_l=f(x_l) yl=f(xl)。给定 x l x_l xl和 y l y_l yl,需要一个 f ^ ( ⋅ ) \hat f(\cdot) f^(⋅)来逼近 f ( ⋅ ) f(\cdot) f(⋅),其中 f ^ ( ⋅ ) \hat f(\cdot) f^(⋅)的计算复杂度要远低于 f ( ⋅ ) f(\cdot) f(⋅),比如说 f ^ ( ⋅ ) \hat f(\cdot) f^(⋅)是多层感知机,那么 f ( ⋅ ) f(\cdot) f(⋅)就是线性变换。高分辨率目标图 y h y_h yh则通过 f ^ ( ⋅ ) \hat f(\cdot) f^(⋅)来获得,即 y l = f ^ ( x h ) y_l=\hat f(x_h) yl=f^(xh),最终联合上采样模块可以定义为:
(1) y h = f ^ ( x h ) , w h e r e f ^ ( ⋅ ) = a r g m i n h ( ⋅ ) ∈ H ∣ ∣ y l − h ( x l ) ∣ ∣ y_h=\hat f(x_h),where \hat f(\cdot)=argmin_{h(\cdot)\in H}||y_l-h(x_l)||\tag{1} yh=f^(xh),wheref^(⋅)=argminh(⋅)∈H∣∣yl−h(xl)∣∣(1)
其中 H H H是所有可能转化的集合,|| ⋅ \cdot ⋅||是预定义的距离矩阵。
扩张卷积 如上图所示,是一维的扩张率等于2的空洞卷积,1) 将输入特征 f i n f_{in} fin根据索引分为两组 f i n 0 f_{in}^0 fin0和 f i n 1 f_{in}^1 fin1;2) 用相同的卷积分别处理输出得到输出 f o u t 0 f_{out}^0 fout0和 f o u t 1 f_{out}^1 fout1;3) 将两个输出融合得到 f o u t f_{out} fout。
带有stride的卷积 如下图所示:
DilatedFCN和论文中方法的不同主要在于最后两个卷积层,给定输入图像 x x x,通过如下公式得到DilatedFCN的输出 y d y_d yd:
y d = x → C r → C d → . . . → C d = x → C r → S C r M → . . . → S C r M = x → C r → S → C r → . . . → C r → M = y m → S → C r n → M = y m 0 , y m 1 → C r n → M y_d=x\rightarrow C_r\rightarrow C_d \rightarrow ... \rightarrow C_d\\=x\rightarrow C_r\rightarrow SC_rM \rightarrow ... \rightarrow SC_rM\\= x\rightarrow C_r\rightarrow S\rightarrow C_r \rightarrow ... \rightarrow C_r \rightarrow M\\=y_m \rightarrow S \rightarrow C_r^n \rightarrow M\\= {y_m^0,y_m^1} \rightarrow C_r^n \rightarrow M yd=x→Cr→Cd→...→Cd=x→Cr→SCrM→...→SCrM=x→Cr→S→Cr→...→Cr→M=ym→S→Crn→M=ym0,ym1→Crn→M
同样地,通过如下公式得到论文种方法的输出 y s y_s ys:
y d = x → C r → C r → . . . → C r = x → C r → R → C r → . . . → C r = y m → R → C r n = y m 0 → C r n y_d=x\rightarrow C_r\rightarrow C_r \rightarrow ... \rightarrow C_r\\=x\rightarrow C_r\rightarrow R \rightarrow C_r \rightarrow ... \rightarrow C_r\\= y_m \rightarrow R \rightarrow C_r^n\\=y_m^0 \rightarrow C_r^n yd=x→Cr→Cr→...→Cr=x→Cr→R→Cr→...→Cr=ym→R→Crn=ym0→Crn
其中, C r , C d , C s C_r,C_d,C_s Cr,Cd,Cs分别代表普通卷积,扩张卷积和带有stride的卷积, C R n C_R^n CRn是n层普通卷积, S 、 M 、 R S、M、R S、M、R分别代表split,merge和reduce操作。
综上,给定 x x x和 y s y_s ys,与 y d y_d yd相同的特征图 y y y可以由如下公式得到:
y = y m 0 , y m 1 → h ^ → M w h e r e h ^ = a r g m i n h ∈ H ∣ ∣ y s − h ( y m 0 ) ∣ ∣ y m = x → C r y={y_m^0,y_m^1} \rightarrow \hat h \rightarrow M\\where\hat h=argmin_{h \in H}||y_s-h(y_m^0)||\\y_m=x \rightarrow C_r y=ym0,ym1→h^→Mwhereh^=argminh∈H∣∣ys−h(ym0)∣∣ym=x→Cr
正如上述公式所阐明的,联合上采样过程在梯度下降过程中的收敛会花费许多时间,该论文通过一个CNN模块来解决这个问题。具体地,首先在给定 x x x的条件下生成 y m y_m ym,然后 y m 0 和 y m 1 y_m^0和y_m^1 ym0和ym1的特征聚合在一起去学习一个映射 h ^ \hat h h^,最后,通过卷积模块得到最终预测 y y y,由此设计了如下图所示的JPU模块,首先每一个输入特征图都通过一个普通卷积块(a)以:1)通过 x x x生成 y m y_m ym;2)将 f m f_m fm进行降维。这样所有的结果维度相同以更好地融合和降低计算复杂度。
接着所有生成的特征图进行上采样和融合生成 y c y_c yc(b), y c y_c yc通过多尺度语义模块,其中空洞率为1的平行连接用于捕获 y m 0 和 y m y_m^0和y_m ym0和ym其他部分的关系,如下图所示,其他空洞率的平行连接用于学习用于将 y m 0 y_m^0 ym0转化为 y s y_s ys的映射 h ^ \hat h h^,如下图中的绿色部分。这样JPU就可以学习多尺度的特征以获得更好的性能,这与ASPP不同,在于该方法只利用了最后一个特征图的信息。
这样的特征图编码了 y m 0 和 y s y_m^0和y_s ym0和ys的映射关系与 y m 0 和 y m y_m^0和y_m ym0和ym其他部分的映射关系,之后通过又一个普通卷积块将特征图转化为最终的预测结果,即c过程。
该论文提出的JPU模块解决了两个问题:
论文比较了扩张卷积和带有stride的卷积,将获取高分辨率的图像的任务转化为联合上采样问题,并用JPU代替扩张卷积在不损失精度的情况下大幅度降低了计算复杂度和内存占用,在两个语义分割通用数据集ADE20K和Pascal Context上都取得了STOA效果。