参考代码:PyTorch-Encoding
1. 概述
导读:在这篇文章中研究了CNN特征图的全局上下文信息对于分割的影响,文章指出像之前工作中通过增加CNN网络层数感受野或者使用膨胀卷积,那么这样就能很好提取全局的上下文语义信息么?对此文章借鉴了channel-wise attention的思路对特征图进行优化,而对于目标分割任务(或者分类任务)提出了基于attention机制的Enc模块,使用attention的方式(编码器不同)增强特征的表达(Context Encoding Module)。此外对于传统上分割损失存在的偏心眼儿情况(对小目标不是很友好),在Enc模块基础上增加了基于GT像素类别先验监督的SE损失(与分类区域大小无关只与类别相关),进而引导更具表达能力特征的生成。在文章的方法也取得了不错的效果:PASCAL-Context和PASCAL-VOC上51.7% 和85.9%的mIoU。同样适用文章的方法在CIFAR-10数据集上只适用14层的卷积却获得了与更大体积(10倍)模型类似的结果,说明在依据GT类别来优化特征的生成还是挺有用的。
2. 方法设计
2.1 网络结构
文章的网络结构见下图所示:
这里是以ResNet的backbone基础在stage3和stage4上使用膨胀卷积和Enc模块(附带SE损失),之后再接一个分割头完成分割任务。
2.2 Enc模块
文章提出的Enc模块其详细结构见下图所示:
编码部分:
这部分可以看作是在原有channel-wise attention基础对编码器进行了改进而来,于输入的特征图 f ∈ R C ∗ H ∗ W f\in R^{C*H*W} f∈RC∗H∗W的,那么在channel维度进行切片可以得到数据 X = { x 1 , … , x n } , N = H ∗ W X=\{x_1,\dots,x_n\},\ N=H*W X={
x1,…,xn}, N=H∗W,之后文章定义了 K K K个codewords D = { d 1 , … , d K } D=\{d_1,\dots,d_K\} D=</