语义分割Deeplabv3+论文解读

论文链接

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
https://arxiv.org/abs/1802.02611

动机

  1. 在Deeplabv3和PSPNet中,虽然丰富的语义信息被编码,但是在backbone网络中多次下采样使得被分割物体的边缘信息丢失,导致边缘模糊
  2. 使用空洞卷积可以减少下采样,缓解由于下采样过多而使得被分割物体的边缘信息丢失的问题,但是空洞卷积往往导致占用过多显存,计算过于复杂,特别使当输出的分辨率是输入分辨率的1/8或者1/4时
  3. 由于编码器-译码器结构不需要空洞卷积,其计算量往往较少

贡献

  1. 使用Deeplabv3作为编码器,设计一个简单高效的译码器,构成一个新的编码器-译码器结构
  2. Deeplabv3+能够通过空洞卷积控制输出特征图的分辨率,实现准确率和运行时间的平衡
  3. 使用Xception模型,并把depthwise separable convolution应用到ASPP和译码器,构成一个更加强大的编码器-译码器网络
  4. 语义分割Deeplabv3+论文解读_第1张图片

算法

语义分割Deeplabv3+论文解读_第2张图片

空洞卷积

作用:(1)控制前向传播过程中被计算的特征分辨率 (2)调整感受野大小,能够捕捉多尺度信息

Depthwise separable convolution

结构:一个depthwise convolution + 一个1x1卷积层
作用:大大减少了计算复杂度
改进:将空洞卷积和depthwise convolution进行结合,构成atrous separable convolution

用Deeplabv3作为编码器

  1. 通过改变deeplabv3编码器最后一个(两个)模块的striding并改为使用空洞卷积,能够控制output stride为16(8)
  2. Deeplabv3改进了ASPP模块,有多个分支的不同rate的空洞卷积以及图像层特征

译码器

  1. 使用双线性插值法对编码器输出特征放大4倍
  2. 将放大后的编码器输出特征和来自backbone的低层特征进行拼接
  3. 使用1x1卷积对特征通道数进行压缩,使训练更容易,防止编码器输出特征信息被来自backbone的低层特征所压制

改进的aligned Xception

语义分割Deeplabv3+论文解读_第3张图片

  1. 使用更深的Xception结构,但是保留原有的entry flow network结构
  2. 所有最大池化层改为atrous separable convolution,从而能够在任意分辨率的特征图上提取特征
  3. 在每个3x3卷积层后都加了BN和ReLU层

实验

数据集

PASCAL VOC2012,CityScapes

评价指标

mIoU,Multiply-Adds

结果

来自低层的特征进行1x1卷积后输出通道数的变化对结果的影响 (resnet101 backbone):

语义分割Deeplabv3+论文解读_第4张图片

译码器3x3卷积结构变化对结果的影响(resnet101 backbone)

语义分割Deeplabv3+论文解读_第5张图片

不同推理策略对结果的影响 (resnet101 backbone)

语义分割Deeplabv3+论文解读_第6张图片
从Table3可以看出,output stride=8时,计算量增加将近3倍,但是mIoU的提升却非常小。所以设置output stride=8得不偿失

以修改的Aligned Xception作为backbone的deeplabv3+不同推理策略的结果的影响

语义分割Deeplabv3+论文解读_第7张图片
与Table 3中的结果相比,Aligned Xception在语义分割方面确实比resnet101有优势,在结果更好的情况下计算量更小

在Pascal Voc2012测试集上的结果

语义分割Deeplabv3+论文解读_第8张图片

在CityScapes上的结果(Xception backbone)

语义分割Deeplabv3+论文解读_第9张图片

优缺点

优点:

  1. 通过把Deeplabv3作为编码器,结合新的译码器,构建一个强大的语义分割网络
  2. 实验非常充分
  3. 能够根据需要控制output stride

缺点:

  1. 部分实验对于算法的实际应用而言没有太大的意义,小于%1的提升并不能说明绝对正确的优化,可能换个数据集就没有提升或者提升更大
  2. 没有提供运行时间,估计很难达到实时
  3. 许多实验都可以看出参数量越多,模型越大,效果会更好
  4. 实验用了50块GPU,一般人想要复现不太可能

反思

  1. 网络模型越做越大,很大可能是效果也越来越好,但是这是否是一个正确的思路?是否可以将网络做得不仅小,而且效果和大模型一样好?我觉得这才是我们追求的目标,特别是对于项目应用落地

你可能感兴趣的:(语义分割)