论文阅读笔记:Spatial-Assistant Encoder-Decoder Network for Real Time Semantic Segmentation
代码:https://github.com/CuZaoo/SANet-main
论文:https://arxiv.org/pdf/2309.10519
1 背景
实时语义分割需要在保持较高分割精度的同时获得较快的处理速度,以适应实时应用的要求。
为了提高网络分割性能,研究人员采用了多种策略,包括设计错综复杂的网络结构,扩展网络分支,最大化图像特征重用等。虽然这些方法增强了网络的图像分割性能,但是也降低了网络的推理速度。
为了提高网络的推理速度,轻量级网络被设计为提取图像特征的骨干网络。然而,较轻的网络通常具有较少的特征通道和较浅的网络深度。这可能导致网络提取的图像特征在增强图像分割精度方面存在不足。
本文提出了一个实时语义分割网络SANet,该网络在编码阶段使用一个主分支和一个子分支的组合。主分支包括多个公共卷积层,其步长为2,主要用于对图像进行充分下采样,以提取图像的语义信息。子分支具有较少的空洞卷积,旨在支持主分支保持图像的空间信息。金字塔池化模块有助于收集来自不同特征层的上下文洞察力,增强了网络获取全局的能力,所以作者在主要分支引入了非对称池化金字塔池化模块(APPPM)。
本文的方法在 Cityscapes 和 CamVid 数据集上都取得了最佳的效果和性能。图1为 Cityscapes 测试集上的评估指标(FPS超过30才可以达到实时的标准)。
2 创新点
-
引入了一个新的金字塔池化模块,APPPM,包括一个非对称池化层和一个传统的卷积层。非对称池化层实现了独特的池化操作,以捕获图像的各种尺度和方向特征。因此,这将导致图像分辨率更均匀地降低,从而更容易提取不同分辨率下的图像特征。
-
提出了一种有效且直接的注意力解码器SAD。它通过由水平和垂直注意力组成的混合注意力来增强特征表示,并使用多个卷积来增加特征融合效果。
-
基于上述模块,提出了一个实时语义分割模型SANet。大量的实验证明,SANet在Cityscapes和CamVid上都取得了精度和速度的平衡。特别地,SANet在Cityscapes测试集上获得了78.4 %的mIoU,同时在NVIDIA GTX 2080Ti上运行了65.1 FPS。
3 方法
在网络的总体架构设计方面,SANet采用了编码器-解码器的方式。网络的整体结构如图3所示。
本文在SANet的encoder中使用ResNet的BasicBlock作为卷积块。编码器包括一个Stom块,六个层,以及一个融合上下文特征的APPPM。不同层的分辨率[ 1/4、1/8、1/16、1/32、1/64]与颜色[白色、黄色、橙色、浅红色、深红色]相对应。颜色越重,分辨率越低。除第6层(bottleneck层)外,每层都由若干个BasicBlock串联而成。研究表明,保持空间信息可以提高分割精度。SANet网络的编码器在其初始层采用逐步下采样的方法,即从第1层到第3层。该网络在每个下采样层之后都有一个"缓冲"层,通过不执行任何下采样操作来保留细节信息。该方法有助于在编码器的早期阶段保持较高的分辨率,使得网络能够更有效地捕捉图像的局部细节。值得注意的是,可以使用更高分辨率的分支来保留空间细节,在SANet网络中,从第3层分裂出一个空间分支,即扩张路径DP,以保持高分辨率特征。在encoder之后,将提取的图像特征转发给非对称池化金字塔池化模块APPPM,完成跨尺度、分区域的信息整合。编码器的整体结构如表1。Repeat表示BasicBlock在单层重复的次数(S,M表示模型的尺寸)。
虽然解码器可以使用抽象的语义数据在像素级别上创建语义预测,但是随着解码器层数的增加,模型的预测速度会降低。因此SANet只包含一个精心设计的解码器SAD,用于恢复编码器提取的低分辨率特征。网络末端的分割头输出分割结果,在训练阶段,辅助分割头输出使用辅助损失(包括边界损失和辅助语义损失)训练分割结果。
4 模块
4.1 扩张路径DP
SANet的扩张路径包含多个具有不同扩张率的空洞卷积来扩大感受野。这提高了对图像中细节信息的辨别能力。DP的结构如图4所示。其中,DP2的空洞卷积采用了比DP1跟高的空洞率。(从图5来看,好像少了一根从L3输入到SAD的箭头)
4.2 非对称池化金字塔池化模块APPPM
金字塔池化模块通常使用不同大小的池化层来同时提取图像特征,然后将提取的特征在通道维度进行融合,生成具有多尺度信息的符合特征图。最近的一些研究探讨了修改池化层的数量和大小,并在池化层之后加入单独的卷积层来增强特征提取过程。然而,关于合并具有不同形状的池化层的研究非常有限。因此,作者引入了非对称池化金字塔池化模块( APPPM ),如图5所示。
APPPM由三个不同大小的池化层组成,其中包括一个全局池化层,但池化层具有非对称的形状。此外,作者采用了在池化层之后添加卷积层的技术,如DDRNet中使用的那样。此外,1×1卷积对1/64的图像特征图进行通道化,以保留细微的细节。将得到的特征图拼接为残差并加入到多尺度特征融合过程中。使用Concat操作来合并各种尺度特征,然后将其与1/64图像特征图通过双头注意力模块(这个模块论文没介绍,需要看代码)生成最终的输出。值得注意的是,APPPM采用的非对称池化层提供了对不同大小的图像的更深入的分析,从而轻松提取他们的特征。
4.3 简单注意力解码器SAD
在编码器-解码器结构中,解码器的主要目标是检索提取的特征。作者设计的简单注意力解码器( SAD )如图6所示。
SAD特征有四个输入:x表示从高分辨率分支输出的最终图像特征图。同时,dp1和dp2分别对应高分辨率分支不同扩张率的空洞卷积输出的特征图。此外,y表示由APPPM从图像中提取的高层语义特征得到的特征图。计算过程可表示为:
其中”⊕” 表示加法运算, ”⊗”表示乘法运算 。
5 效果
5.1 与SOTA方法对比
在2080Ti上,以2048*2048的分辨率推理CityScapes数据集,并和SOTA方法进行比较,如表2(从论文实现细节上看“/”前后应该表示的是直接评估和多尺度评估的结果)。
在2080Ti上,以720*960的分辨率推理CamVid测试集,并和SOTA方法进行比较,如表6。
5.2 消融实验
为了验证各个模块组合的有效性,除了APPPM外,作者在ImageNet数据集上只训练了SANet的编码器部分,该部分由一个负责下采样的主分支和一个负责扩大视野的空洞卷积分支组成。将训练好的编码器作为Baseline结果进行对比,与主分支和空洞卷积分支使用加法运算进行特征融合。如表3所示,简单地将两个特征图相加,可能会导致精确位置处的信息不同,相互抵消,从而导致信息丢失。SAD的引入有助于缓解信息丢失问题,网络能够捕获特征之间的复杂关系,并选择性地关注对任务更重要的特征。金字塔池化能够捕获不同尺度的图像信息,APPPM的加入可以显著提高模型的感知能力,从而导致网络性能的快速提升。当APPPM和SAD相结合时,准确率的提高会更加显著。
作者对各种金字塔池化模块也做了对比消融实验,最终证明了本文提出的APPPM的效果最佳,如表4。
作者比较了两种常用于语义分割的损失函数:交叉熵损失和在线难例挖掘交叉熵损失。同时,为了提高模型的感知空间能力,在模型不同的位置增加了边界损失。对比效果如表5。
图7展示了增加边界损失后的辅助分割头的输出。从左到右的6列分别为输入图像、SANet - S的边界损失结果、SANet - S的热力图结果、SANet - S的辅助分割头结果、SANet - S的预测结果和GT。可以看到对边界的响应会更高一些。
6 结论
感觉辅助损失(包括边界损失和辅助语义损失)可以不局限于只应用在L4层,用来监督更多层对模型的学习应该更有帮助。