论文链接
Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
https://arxiv.org/abs/1802.02611
动机
- 在Deeplabv3和PSPNet中,虽然丰富的语义信息被编码,但是在backbone网络中多次下采样使得被分割物体的边缘信息丢失,导致边缘模糊
- 使用空洞卷积可以减少下采样,缓解由于下采样过多而使得被分割物体的边缘信息丢失的问题,但是空洞卷积往往导致占用过多显存,计算过于复杂,特别使当输出的分辨率是输入分辨率的1/8或者1/4时
- 由于编码器-译码器结构不需要空洞卷积,其计算量往往较少
贡献
- 使用Deeplabv3作为编码器,设计一个简单高效的译码器,构成一个新的编码器-译码器结构
- Deeplabv3+能够通过空洞卷积控制输出特征图的分辨率,实现准确率和运行时间的平衡
- 使用Xception模型,并把depthwise separable convolution应用到ASPP和译码器,构成一个更加强大的编码器-译码器网络
算法
空洞卷积
作用:(1)控制前向传播过程中被计算的特征分辨率 (2)调整感受野大小,能够捕捉多尺度信息
Depthwise separable convolution
结构:一个depthwise convolution + 一个1x1卷积层
作用:大大减少了计算复杂度
改进:将空洞卷积和depthwise convolution进行结合,构成atrous separable convolution
用Deeplabv3作为编码器
- 通过改变deeplabv3编码器最后一个(两个)模块的striding并改为使用空洞卷积,能够控制output stride为16(8)
- Deeplabv3改进了ASPP模块,有多个分支的不同rate的空洞卷积以及图像层特征
译码器
- 使用双线性插值法对编码器输出特征放大4倍
- 将放大后的编码器输出特征和来自backbone的低层特征进行拼接
- 使用1x1卷积对特征通道数进行压缩,使训练更容易,防止编码器输出特征信息被来自backbone的低层特征所压制
改进的aligned Xception
- 使用更深的Xception结构,但是保留原有的entry flow network结构
- 所有最大池化层改为atrous separable convolution,从而能够在任意分辨率的特征图上提取特征
- 在每个3x3卷积层后都加了BN和ReLU层
实验
数据集
PASCAL VOC2012,CityScapes
评价指标
mIoU,Multiply-Adds
结果
来自低层的特征进行1x1卷积后输出通道数的变化对结果的影响 (resnet101 backbone):
译码器3x3卷积结构变化对结果的影响(resnet101 backbone)
不同推理策略对结果的影响 (resnet101 backbone)
从Table3可以看出,output stride=8时,计算量增加将近3倍,但是mIoU的提升却非常小。所以设置output stride=8得不偿失
以修改的Aligned Xception作为backbone的deeplabv3+不同推理策略的结果的影响
与Table 3中的结果相比,Aligned Xception在语义分割方面确实比resnet101有优势,在结果更好的情况下计算量更小
在Pascal Voc2012测试集上的结果
在CityScapes上的结果(Xception backbone)
优缺点
优点:
- 通过把Deeplabv3作为编码器,结合新的译码器,构建一个强大的语义分割网络
- 实验非常充分
- 能够根据需要控制output stride
缺点:
- 部分实验对于算法的实际应用而言没有太大的意义,小于%1的提升并不能说明绝对正确的优化,可能换个数据集就没有提升或者提升更大
- 没有提供运行时间,估计很难达到实时
- 许多实验都可以看出参数量越多,模型越大,效果会更好
- 实验用了50块GPU,一般人想要复现不太可能
反思
- 网络模型越做越大,很大可能是效果也越来越好,但是这是否是一个正确的思路?是否可以将网络做得不仅小,而且效果和大模型一样好?我觉得这才是我们追求的目标,特别是对于项目应用落地