deeplab v3+:encoder decoder with atrous convolution 实现语义分割

Deeplab V3+:encoder-decoder with atrous separable convolution for semantic segmentation

语义分割任务对于深度神经网络的使用主要关注于两个模块:空间金字塔池化模块(spatial pyramid pooling module)和编码器解码器结构(encode-decoder structure)。空间金字塔池化模块(SPPnet)通过对于输入特征图进行不同rates/strides卷积或者不同缩放因子的池化操作,从而得到多个不同尺寸的高效感受野,从输出特征图中获取多尺度的上下文信息,SPP操作得到的语义信息非常丰富(SPPnet论文中,是对于region proposal对应到特征图上的一小块特征扣取下来,然后分别进行4*4、2*2、1*1的最大池化,得到长度为21,维度等于输入特征图维数的特征图)。编码器解码器结构则通过逐渐地对编码器生成的低分辨率高阶语义特征图进行恢复分辨率的操作,从而得到更为尖锐(sharper)的物体边界。Deeplab V3+融合了两个模块的优点。

Deeplab V3+同样是编码器解码器结构,它使用Deeplab V3作为编码器模块,对于编码器输出的特征图,可以用空洞卷积,通过设定空洞卷积的相关参数控制最终输出特征图的分辨率,从而在模型准确率和运行时间上有良好的权衡。ASSP结构(编码器模块)和解码器模块都使用了Xception模块和depthwise separable convolution,从而得到快速强大的编解码器网络。

Spatial pyramid pooling:空间金字塔池化,用于PSPnet和deeplab v3。无论是在特征图上使用不同尺度的池化核(池化核指的是:将输入特征图划分成池化核尺寸的网格grid,在每个网格内进行池化操作,最终输出的特征图空间分辨率就是池化核尺寸,而特征通道数仍让不变——等于输入特征图通道数),或者对输入特征图使用不同扩张率的空洞卷积(卷积操作的dilation参数,通过设置空洞卷积的扩张率,增大输出特征图节点感受野尺寸,空洞卷积在不增加参数数量或计算量的情况下增加了更大范围的语境信息,输出特征图于输入特征图具有相同的空间分辨率),都是相当于在当前输入特征图上使用不同感受野大小的卷积核,都是为了从当前输入特征图中提取多尺度、多level的上下语义信息,SPP technique性能好的原因是因为它充分利用了多尺度的信息(multi-sacle information),它的目的是希望对于同一张输入特征图,得到不同感受野尺寸的输出特征图(而不是为了得到不同分辨率的输出特征图)。

(1)PSPnet(Pyramid Scene Parsing Network,金字塔场景解析网络,sensetime CVPR2017)是先经过基础分类网络进行特征提取后(基础层经过预训练的模型(ResNet101)和空洞卷积策略提取feature map,提取后的feature map是输入的1/8大小),得到最后一层较低分辨率的特征图,再分别经过4种不同尺度的空间池化层,该模块融合了4种不同金字塔尺度的特征,第一行红色是最粗糙的特征–全局池化生成单个bin输出,后面三行是不同尺度的池化特征。为了保证全局特征的权重,如果金字塔共有N个级别,则在每个级别后使用1×1的卷积将对于级别通道降为原本的1/N。再通过双线性插值(上采样的具体策略)获得未池化前的分辨率大小,最终concat到一起。金字塔等级的池化核大小是可以设定的,这与送到金字塔的输入有关。论文中使用的4个等级,核大小分别为1×1,2×2,3×3,6×6。(经过池化操作之后,产生不同分辨率的特征图)上使用空间金字塔池化。

(2)deeplab v3则是在每个不同分辨率的特征图上,应用多个不同rates值的空洞卷积并行计算(被称为atrous spatial pyramid pooling ASSP模块,带孔空间金字塔池化,这是因为,最早的spatial pyramid pooling是通过在同一个尺度的特征图上进行不同的池化网格,从而输出不同感受野大小的输出特征图——使用SPP则空间分辨率也不相同,而在这里则是使用设定空洞卷积核的步长参数,在同一个尺度的特征图上使用多种不同步长的空洞卷核,从而输出不同感受野大小的特征图——使用ASSP则空间分辨率相同)。Deeplab 还表明,必须根据特征图的大小来调整扩张率。针对output_stride=16的情况,ASSP中每个空洞卷积参数设置为:一个1×1的卷积与三个3×3的rates=(6, 12, 18)的空洞卷积,滤波器数量都为256,包含BN层。ASSP操作可以看作是deeplab的重要特点,用空洞卷积获得不同感受野的特征图(卷积核的感受野可以通过设置dilation rate参数进行自适应地调整)。

Deeplab v3+得到的分割特征图可以保留非常好的空间细节。Deeplab v3+使用deeplab v3作为编码器网络,即先对输入图像进行分类网络/backbone的特征提取后,再进行空洞卷积,得到DCNN模块最终的输出特征图,这时特征图的空间分辨率是输入图像的1/16,其中,最后一层卷积块使用dilation rate=2的空洞卷积,然后将当前特征图送入ASSP模块,将经过ASSP模块的5个分支输出特征图(它们的分辨率相同,都是输入图像分辨率的1/16)进行channel dim concatenate,之后经过1*1卷积核进行通道数降维,输出特征图通道数为256,就完成了编码操作。

output stride参数表示的是输入图像分辨率与当前模型最终输出的特征图分辨率比值,在分类网络中指的是全连接层或者global pooling层之前的特征图,在分割网络中指的特征图是编码器最后一层输出的特征图,通常分类网络的output stride=32,即全连接层之前的最终卷积特征图分辨率为输入图像的1/32,比如VGG16,输入图像是224*224,最后一层卷积特征图的分辨率为7*7,在语义分割网络中output stride通常设置为8或者16,如果利用相应的分类网络作为backbone,则需要移除分类网络中最后两个或者最后一个卷积块block,但是为了得到与output stride=32相同感受野大小的特征图,需要对语义分割网络输出的特征图进行空洞卷积操作,比如当output stride=8时,在倒数第二个卷积块和最后一个卷积块分别采用dilation rate=2和dilation rate=4的空洞卷积,使得这两层输出特征图节点的感受野大小与output stride=32的特征图相同。

解码器结构:解码器的最原始结构是对于编码器输出的output stride=16、通道数为256的特征图直接进行16倍的双线性上采样,但是这样直接上采样得到的分割结果中会损失很多细节,deeplab v3+模型的解码器结构如下:首先对编码器输出特征图进行4倍上采样,得到output stride=4的特征图,再与编码器中corresponding low level features(也是输入图像分辨率的1/4)进行concatenate(concatenate操作之前要先对低阶特征图进行1*1的卷积操作,将特征图通道数也变成256,以平衡与ASSP模块输出特征图的比重),concatenate操作后,得到output stride=1/4、通道数为256的特征图,再进行3*3卷积以对特征图进行refine,最后再简单经过一个双线性上采样操作,将特征图放大4倍,得到与输入图像分辨率相同的输出。

实验表明,当编码器的output stride=8时,分割模型性能最好,但是这样会增加额外的计算开销和内存开销(memory)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值