- 论文地址:DeepLabv3: Rethinking Atrous Convolution for Semantic Image Segmentation
- 论文代码: github-Tensorflow
概述
- DCNNs中语义分割存在三个挑战:
- 连续下采用和重复池化,导致最后特征图分辨率低
- 图像中存在多尺度的物体
注:当前版本没有使用CFR
-
作者把解决多尺度物体问题的方法分成四类:
- 把输入图片缩放成不同尺度,经过同一个网络,最终融合多尺度下的物体信息
- 使用编解码结构,在decoder时融合encoder网络不同阶段的特征
- 在原网络最后层增加额外的context模块,比如DenseCRF,或者串联几个不同感受野的卷积模块
- 在原网络最后层添加并行结构—空间金字塔池化,获取不同尺度的物体信息
- 作者的处理方案:
- 使用空洞卷积,防止分辨率过低情况
- 串联不同膨胀率的空洞卷积或者并行不同膨胀率的空洞卷积(v2的ASPP),来获取更多上下文信息
- 优势
- 当时在PASCAL VOC 2012 test上效果最好,并且没有使用DenseCRF
- 本文主要工作
- 探索更深结构下的空洞卷积探索(串行结构)
- 优化atrous spatial pyramid pooling—ASPP(并行结构)
膨胀卷积
v1、v2中已详细说明,略....
更深结构下的空洞卷积
-
串联结构
把resnet最后一个block,下图中的Block4拷贝几份串联起来:
每个block的最后一个卷积stride都为2(除了最后一个block),连续的下采样保证获取更大范围的特征,但是这样不利于语义分割。
使用不同膨胀率的空洞卷积保证了分辨率和大的感受野,如上图b所示。 - multi-grid
作者考虑了multi-grid
方法,即每个block中的三个卷积有各自unit rate
,例如Multi Grid = (1, 2, 4),block的dilate rate=2,则block中每个卷积的实际膨胀率=2* (1, 2, 4)=(2,4,8)
优化Atrous Spatial Pyramid Pooling
作者通过实验发现,膨胀率越大,卷积核中的有效权重越少,当膨胀率足够大时,只有卷积核最中间的权重有效,即退化成了1x1卷积核,并不能获取到全局的context信息。3x3的卷积核中有效权重与膨胀率的对应如下:
为了解决这个问题,作者在最后一个特征上使用了
全局平均池化(global everage pooling)
(包含1x1卷积核,输出256个通道,正则化,通过bilinear上采样还原到对应尺度)修改后的ASPP结构如下:
所有的分支都包含256个通道和正则化,最终concat到一起,1x1卷积将通道数为256。
实验
- 训练策略
-
Learning rate policy:
poly,学习率下降方式如下:
- Crop size:
513,保证更大的膨胀率有效 - Batch normalization:
先在增强数据集上output stride = 16(输入图像与输出特征大小的比例),batch size=16,BN参数衰减为0.9997,训练30k个iter。
之后在官方PASCAL VOC 2012的trainval集上冻结BN参数, output stride = 8,batch size=8,训练30k个iter。 - Upsampling logits:
v1、v2中都是下采样的真值来计算loss,这里上采样最后的输出结果。 - Data augmentation:
输入图片随机缩放(0.5-2.0),随机左右翻转
- 串行结构下的结果
-
block串联个数不同,在resnet50和resnet101下的mIOU:
-
ResNet-101,output stride = 16下不同multi-grid的mIOU:
-
消融实验:
- ASPP结构下的结果
-
output stride = 16,不同multi-grid和膨胀率的结果:
-
消融实验:
经验track
- 如何在MS COCO上预训练?
从trainval_minus_minival
挑选包含PASCAL分类
并且目标区域像素个数大于1000
的图片,大概有60k
的图片用于训练,除了PASCAL分类区域,其它都看成背景。从上述实验结果中发现提升了3
个百分点。 - 对于有些类准确率比较低,怎么办?
针对包含namely bicycle、chair、table、potted- plant、and sofa
分类的图片,在训练集中增加它们比列。通过BN策略和这里的策略,达到85.7%IOU,再次提升3个百分点。 - Cityscapes上的小策略:
cropsize 769 iters 90k
- output stride = 16时:77.23%
- output stride = 8时:77.82%
-
多尺度输入(0.75,1,1.25)
:79.30% - 事先在
trainval coarse
上预训练,scales = {0.75, 1, 1.25, 1.5, 1.75, 2} ,output stride = 4,output stride = 8,最终结果:81.3%
网友评论