好长一段时间没有和大家见面,但是在学习群里,大家每天都是非常活跃的进行着学术邻域的探讨,今天算是四月的初始,又是一个清爽明媚的季节,在这个样的季节中,大家一定都有很大的动力,去学习去科研去努力去进步!今天给大家分享的是这个系列的最后一篇——DeepLab V3。
论文下载地址:http://arxiv.org/abs/1706.05587
代码地址:https://github.com/tensorflow/models/tree/master/research/deeplab.
简要介绍
DeeplabV1和V2 ,即带孔卷积(atrous convolution), 能够明确地调整filters的感受野,并决定DNN计算得到特征的分辨率;
DeeplabV3,即多尺度(multiple scales)分割物体,设计了串行和并行的带孔卷积模块,采用多种不同的atrous rates来获取多尺度的内容信息;
DeeplabV3中提出 Atrous Spatial Pyramid Pooling(ASPP)模块, 挖掘不同尺度的卷积特征,以及编码了全局内容信息的图像层特征,提升分割效果;
DeeplabV3中,不需要DenseCRF后处理(与之前的不一样的处理)。
接下来简单介绍下带孔卷积的内容。
带孔卷积(Atrous convolution)
Atrous convolution, 即dilated convolution, 它主要是通过移除网络最后几层的降采样操作以及对应的滤波器核的上采样操作,来提取更紧凑的特征,相当于在不同的滤波器权重之间插入holes,其决定了DCNNs计算的特征的分辨率,而不增加新的额外学习参数。
常见的多尺度处理如下:
DeeplabV3
在串行模块和空间金字塔池化(spatial pyramid pooling,SPP)模块的网络结构中,atrous convolution都能够有效增加filters的感受野,整合多尺度信息;
提出的串行和并行(atrous spatial pyramid pooling,ASPP)网络模块中包含了不同rates的atrous convolution处理与batch normalization layers,对于网络训练非常重要;
采用rate非常大的3×3 atrous convolution,由于图像边界效应,不能捕捉图像的大范围信息,effectively simply degenerating to 1×1 convolution, 所以提出将图像层特征整合仅在ASPP模块中。
接下来我们来主要讲讲主要的方法内容。
主要方法
这里主要回顾如何应用atrous convolution来提取紧凑的特征,以进行语义分割; 然后介绍在串行和并行中采用atrous convolution的模块。
Atrous Convolution for Dense Feature Extraction
假设2维信号,针对每个位置i,对应的输出y, 以及filter w,对于输入feature map x进行 atrous convlution 计算:
其中,atrous rate r表示对输入信号进行采样的步长(stride),等价于将输入x 和通过在两个连续的filters值间沿着各空间维度插入r−1个零值得到的上采样filters进行卷积。通过改变Atrous convolution 的rate值,来修改filter的感受野,也可以控制FCN网络(fully convolutional networks)计算的特征紧凑程度。如上面图中提及到的。标准卷积即是atrous convlution的一种rate r=1的特殊形式。
Going Deeper with Atrous Convolution
以串行方式设计atrous convolution 模块,复制ResNet的最后一个block,如下图的block4,并将复制后的blocks以串行方式级联。
其中,各block中有三个convolutions, 除了最后一个block, 其它block的最后一个convolution的步长都为2, 类似于原来的ResNet(残差网络)。
这种网络模型设计的动机,引入的stride能更容易的捕获较深的blockes中的大范围信息。例如,整体图像feature可以融合到最后一个小分辨率的feature map中,如上图(a)。
不过,这种连续的步长式设计,对于语义分割是不利的,会破坏图像的细节信息。因此,这里采用由期望outpur_stride值来确定rates的atrous convolution 进行模型设计,如上图(b)。
采用串行的ResNet,级联block为block5、block6、block7,均为block4的复制,如果没有 atrous convolution, 其output_stride=256。
Multi-grid Method
对block4~block7 采用不同atrous rates.。即,定义Multi_Grid=(r1,r2,r3)为block4~block7的三个convolutional layers的 unit rates。
convolutional layer最终的atrous rate等于unit rate与对应的rate的乘积。例如,当output_stride=16, Multi_Grid=(1,2,4)时, block4中three convolutions的rate分别为:rates=2∗(1,2,4) = (2,4,8)。
Atrous Spatial Pyramid Pooling
ASPP, 采用四个并行的不同atrous rates的atrous convolutions对feature map进行处理,灵感来自spatial pyramid pooling。
ASPP, deeplabv3 中将batch normalization加入到ASPP模块。
具有不同atrous rates的ASPP能够有效的捕获多尺度信息。不过,论文发现,随着sampling rate的增加,有效filter特征权重(即有效特征区域,而不是补零区域的权重)的数量会变小。如下图所示,当采用具有不同atrous rates的3×3 filter应用到65×65 feature map时,在rate值接近于feature map 大小的极端情况,该3×3 filter不能捕获整个图像内容嘻嘻,而退化成了一个简单的1×1 filter, 因为只有中心 filter 权重才是有效的。
针对上面的问题,并将全局内容信息整合进模型中,则采用图像级特征。
采用全局平均池化(global average pooling)对模型的feature map进行处理,将得到的图像级特征输入到一个1×1 convolution with 256 filters(加入 batch normalization)中,然后将特征进行双线性上采样(bilinearly upsample)到特定的空间维度。
改进了ASPP, 即:
当output_stride=16时,包括一个1×1 convolution和3×3 convolutions,其中3×3 convolutions的rates=(6,12,18),(所有的filter个数为256,并加入batch normalization)。需要注意的是,当output_stride=8时,rates将加倍;
图像级特征, 如下图所示。
连接所有分支的最终特征,输入到另一个1×1 convolution(所有的filter个数也为256,并加入batch normalization),再进入最终的1×1 convolution,得到 logits 结果。
实验结果
最后还给出了可视化的效果,如下:
但是实验过程中,也出现了一些错的案例,比如:
小结一下:
提出的模型”DeepLab v3”采用atrous convolution的上采样滤波器提取稠密特征映射和去捕获大范围的上下文信息。具体来说,编码多尺度信息,提出的级联模块逐步翻倍的atrous rates,提出的atrous spatial pyramid pooling模块增强图像级的特征,探讨了多采样率和有效视场下的滤波器特性。实验结果表明,该模型在Pascalvoc 2012语义图像分割基准上比以前的DeppLab版本有了明显的改进,并取得了与其他先进模型相当的性能。