论文题目:Squeeze-and-Attention Networks for Semantic Segmentation(用于语义分割的挤压—注意网络)
下载链接:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9157815&tag=1
代码:未开源
文章贡献:
1. 将语义分割分解为两个子任务:像素预测和像素分组;
2. 提出了SA模块,能兼顾单个像素的多尺度密集预测,及像素组的空间注意,优于SE;
3. 提出了由SA模块构成的SANet网络结构,整合多尺度背景特征和图像级类别信息。
1 背景与动机
分割方法的进步主要是通过改进像素表示来实现精确标记。然而,语义分割并不完全等同于像素预测。
作者认为语义分割可以表示为2个独立的部分:1)像素级预测(每个像素的分类)和 2)像素分组(像素之间的联系)。
以往方法主要是在1)上改进,而忽视了2)。
因此作者引入像素分组的第二个子任务,直接鼓励属于同一类的像素在没有空间限制的情况下被分组在一起,基于像素分组问题设计了SA模块来缓解卷积核的局部约束。
2 相关工作
多尺度上下文
- 拉普拉斯金字塔结构整合多尺度上下文特征,最流行的方法是采用池化操作来收集不同尺度的空间信息。如pspnet,deeplab等。
- 编码器-解码器架构融合具有不同层次语义含义的特征。如FCN、Unet等。
因此作者也采取类似结构,融合了骨干残差网络的4个不同阶段输出,以获得多尺度信息。
通道注意力
- 有选择地对特征图的通道进行加权,有效地提高了传统残差模块的表示能力,但例如SE模块的方法会导致模型参数变多。
图(a)是残差结构,下分支为跳跃连接;图(b)是将SE加入到残差结构的分支中。图中省略了归一化层和激活层。
压缩和激励模块SE的核心思想在于网络训练的同时学习不同通道特征图的权重,使得有利于损失函数下降的特征图的权重变大,而对损失函数下降没有贡献或者贡献较小的特征图权重变小。
压缩步骤:输入是HxWxC的特征图,可以看成是C张HxW的图片,每张图片都用它所有像素点的均值来表示(即每个通道都采用1x1的平均池化),获得1x1xC的大小。
激励步骤:输入是压缩操作的输出,大小为1x1xC,经过2层全连接层,可以认为是一层隐藏层+一层输出层,隐藏层由1x1xC变为1x1xC’(C’<C),输出层由1x1xC’变为1x1xC,即为每个通道代表的特征分配的权重。隐藏层后接ReLU激活函数,输出层后接Sigmoid函数,把权重归一化。
将激励操作后的输出结果1x1xC和原始的特征图HxWxC相乘,得到融合了通道注意力信息的特征的结果。
与提高分类性能的SE模块类似,作者提出SA模块,专门为提高分割结果而设计,如图(c)所示:
SE在下采样时是完全压缩的,变为1x1xC,但SA使用的注意力通道(下分支)是未完全压缩的,可有效地产生非局部空间注意力,同时避免在上采样时需要过大的倍数,模型参数量不大。
SE是由注意力通道获取到权重,乘到Xin上再加上Xres,而SA整合了空间关注,对输出进行聚合以提高分割性能。具体表现在注意力通道获取的Xatt不是乘以Xin,而是乘上主通道的输出Xres,之后再加上Xatt。
论文中,SA的主通道和注意力通道的通道数都减少为特征图的1/4,注意力通道的中间ACONV1的通道数设置为4,下采样pooling和上采样upsample的因数都设置为8。
ACONV和CONV本质上是一样的,只是它属于注意通道所以叫注意卷积(attention convolution)。
3 网络结构
图中蓝色框相当于是编码部分,论文使用扩张的ResNet(resnet50&resnet101)和Effiicinets作为骨干网络,FCN Head是用于生成语义分割的分支,相当于是解码部分。
为了聚合多阶段非局部特征,作者在骨干网络的多阶段输出上采用SA模块,从而得到更好的对象边界和场景解析结果。
整个网络一共包含3个损失,总损失为:
其中参数α和β是权重参数,经测试,在论文所使用的数据集中,α取0.2,β取0.8效果最好。
3个损失具体如下面公式所示:
N是训练集的所有图片总数,M表示空间位置(即若图片大小是a*b,那么M=a*b,为像素点总数),C是类别数。
是SANet的预测值,是真实值。是类别的预测值和真实值,用来计算Lcat。Lcat相当于是一个多标签分类,只判断这张图片中有哪些类别而不管他们的位置。具体为,将骨干网络4个阶段的输出分别经过SA模块后进行concat,之后再进行平均池化和全连接层,获得一个1x1xn(n表示类别总数)的结果,将这个结果跟该张图片的真实多标签进行对比,计算Lcat损失。
Lmask和Lden是通常语义分割的交叉熵损失,Lcat是分类损失。
MASK是最终预测的语义分割结果。
总的来说感觉还是像素分类,Lmask和Lden所对应的真实值应该是一样的,论文只是比一般方法多了Lcat和Lden的loss计算。
4 实验结果
作者在Pascal VOC和Pascal Context两个数据集上进行测试,其中Pascal VOC设置学习率为0.0001,使用预训练的COCO数据集权重,再训练50个epoch;Pascal Context设置学习率为0.001,不使用预训练权重,一共训练80epoch。在两个数据集上均使用了随机梯度下降和 poly learning rate annealing schedule ,设置batchsize为16,骨干网络选用resnet50和resnet101,在多GPU上训练。
1. 使用Pascal Context数据集来确定损失函数中α和β的取值为α=0.2,β=0.8:
具体来说,使用resnet50作为骨干网络,训练20个epoch。左图为当β=0.8时α不同取值的mIoU对应情况,右图为当α=0.2时β不同取值的mIoU对应情况。
2. Lcat和Lden的影响
在Pascal Context上,使用Cat和Den损失后有效了提高了分割的准确率,其中mIoU计算中不包含背景:
3. SANet的有效性
在Pascal Context上,对比SANet和其它的一些方法,其中mIoU计算中包含背景:
以resnet50作为骨干网络的FCN基线结果和SANet分割结果效果对比:
4. SA模块的有效性
在FCN基线上对比SA和SE,骨干网络使用resnet50和resnet101:
resnet101比resnet50效果好一点,SE作用不明显,SA作用明显。
5. 注意力图和特征图的可视化
在Pascal VOC数据集上进行可视化,体现注意力机制的关注点:
bcd分别是在原始输入图片上选择的3个点对应的注意力图,注意力图中的红色区域可以被认为是最关注的像素组。即图b)蓝点关注物为小车,图c)黄点关注牛,图d)红点关注摩托。
在SA模块的低级(SA Head1)和高级(SA Head4)上注意力的侧重点不同。在低级阶段,Attn注意力图有广阔的视野,体现在第1行红色部分分布全局,具体关注点不明显。而在高级阶段,Attn注意图主要集中在所选点周围的区域,体现在第4行,bcd三张图的红色关注部分分别在小车、牛、摩托上。同时,Head4的Main特征图也比Head1语义更强,更清晰。
6. Pascal VOC的一些结果
以下为未使用COCO预训练权重的结果对比,SANet训练80epoch:
使用COCO预训练权重的结果对比:
模型复杂度比较:
MACs:每秒的乘法累积操作,Params:网络参数。使用resnet101作为骨干网络,未使用COCO预训练权重。
参考文档
[1] CVPR2020 语义分割之将像素分类group成整体
[2] Squeeze-and-Attention Networks for Semantic Segmentation
[3] Squeeze-and-Attention Networks for Semantic Segmentation | CVPR2020