Semantic Segmentation---EncNet:Context Encoding for Semantic Segmentation(论文解读十八)

Title:Context Encoding for Semantic Segmentatio

From:CVPR2018

Note data:2019/07/11

Abstract:引入上下文编码模块(Context Encoding Module),引入全局上下文信息(global contextual information),用于捕获场景的上下文语义并选择性的突出与类别相关的特征图。

Code :pytorch


目录

1 Abstract

2 Introduction

3 Context Encoding Module

3.1 Context Encoding

3.2 Context Encoding Network (EncNet)

4 Experiments

6 Conclusion 



1 Abstract

论文提出一种基于ResNet的Senmantic segmentation模型EncNet

网络结构:引入上下文编码模块

创新:将分类考虑到分割任务中,提升分割准确率

动机:解决扩张卷积,以及金字塔结构产生的一些问题

论文引入上下文编码模块(Context Encoding Module),从而引入了全局上下文信息(global contextual information),用于捕捉场景的上下文语义并选择性的突出与类别相关的特征图。与此同时,结合现先进的扩张卷积策略和多尺度策略提出了语义分割框架EncNet(Context Encoding Network)。

实验证明上下文编码模块能够显著的提升语义分割性能,在Pascal-Context上达到了51.7%mIoU, 在 PASCAL VOC 2012上达到了85.9% mIoU,单模型在ADE20K测试集上达到了0.5567。 此外,论文进一步讨论上下文编码模块在相对浅层的网络中提升特征表示的能力,在CIFAR-10数据集上基于14层的网络达到了3.45%的错误率,和比这个多10倍的层网络有相当的表现。


2 Introduction

扩张卷积的问题:

先进的语义分割系统通常是基于FCN架构,采用的深度卷积神经网络受益于从不同图片中学习到的丰富的对象类别信息和场景语义。CNN通过堆叠带非线性激活和下采样的卷积层能够捕获带全局接受野的信息表示,为了克服下采样带来的空间分辨率损失,最近的工作使用扩张卷积策略从预训练模型上产生密集预测。然而,此策略依然会将像素从全局场景上下文相隔开,这会导致像素错误分类。 

金字塔结构存在的问题

近期的工作使用基于金字塔多分辨率表示扩大接受野。例如,PSPNet采用的PSP模块将特征图池化为不同尺寸,再做联接上采样;DeepLab采用ASPP模块并行的使用大扩张率卷积扩大接受野。这些方法都有提升,但是这对上下文表示都不够明确,这出现了一个问题: 捕获上下文信息是否等同于增加接受野大小? 

                                                          

作者提出一种假设,如果能够先捕获到图像上下文信息(例如卧室),然后,这可以提供许多相关小型目标的信息(例如卧室里面有床、椅子等)。这可以动态的减少搜索区域可能。就是加入一个场景的先验知识进去,这样对图片中像素分类更有目的性。依照这个思路,可以设计一种方法,充分利用场景上下文和存在类别概率的之间的强相关性,这样语义分割会就容易很多。

经典图像方法

经典的计算机视觉方法具有捕获场景上下文语义的优点。例如SIFT提取密集特征或滤波器组响应密集提取手工设计的图像特征。学习一个视觉字典,BoW,VLAD和Fish Vector通过类别编码描述特征统计信息。 经典表示通过捕获特征统计信息编码全局信息,虽然手工提取特征通过CNN方法得到了很大的改进,但传统方法的总体编码过程更为方便和强大。

我们能否利用经典方法的上下文编码结合深度学习?

最近有工作在CNN框架中推广传统编码器方法获得了极大的进步,Zhao等人引入了一个编码层将整个字典学习和残差编码管道集成到CNN层中用于捕获无序表示(orderless)。在纹理分类任务上达到了state-of-the-art,在本文中,使用扩展编码层用于捕获全局特征的统计信息用于理解上下文语义。

论文主要贡献点

1. Context Encoding Module 以及 Semantic Encoding Loss(SE-Loss).

Context Encoding Module 作为 Encoding Layer 整合进网络,用于捕捉全局上下文信息以及突出类别相关的特征图. 例如,可以不用关注室内场景出现车辆的概率。语义分割中标准的训练过程是只采用像素级的分割 loss,其并未利用到场景的全局上下文信息. 这里提出 SE-Loss,对网络训练进行正则化,其使得网络预测场景中目标类别的存在,更有助于网络对于语义上下文信息的学习.

SE-Loss 与像素级 loss 的不同之处还在于,SE-Loss 不受目标物体大小的影响,其对于大目标物体和小目标物体的贡献一致对待(实际上,其对于小目标往往具有提升效果.)

2. Context Encoding Network(EncNet)

基于预训练的 ResNet,加入 Context Encoding Module 模块,其中还采用了 dilation 策略.

另外,还开源了 synchronized multi-GPU Batch Normalization 和 memory-efficient Encoding Layer 的 pytorch 实现.


 

3 Context Encoding Module

论文将新的CNN模块称为Context Encoding Module,如下图:

3.1 Context Encoding

对于在各种图像集上预训练的网络,特征图编码丰富的信息,即场景中的对象。 我们使用编码层将特征统计捕获为全局语义上下文。 我们将编码层的输出称为编码语义(encoded semantics)。为了使用上下文,预测了一组放缩因子(scaling factors)以选择性地突出类依赖的特征图。编码层学习带有上下文语义的固有字典,输出丰富上下文信息的残差编码。 这里简单描述一下编码层的完整的先前工作。

编码层认为一个shape是C×H×W的输入特征图为一组C维度的输入特征X={x_1,..,x_N},其中N是特征的总个数即H×W,这学习固有的codebook D={d_1,...,d_K}包含K个codewords,和一组视觉中心平滑因子S={s_1,...,s_K}。编码层输出残差编码,这是通过聚合具有soft-assignment权重:

                                                      

通过r_ik=x_i−d_k给定残差,我们在编码器上使用聚合而不是联接。对于中的ϕ表示带ReLU的BN层,避免K个独立编码器被排序,并减少了特征表示的维度。

Featuremap Attention:

为了使用编码层捕获的编码语义,我们预测一组特征图的放缩因子作为循环用于突出需要强调的类别。在编码层端上使用FC层,使用sigmoid作为激活函数,预测特征图的放缩因子γ=δ(We),其中WW表示层的权重,δ表示sigmoid激活函数。模块通过Y=X⊗γ得到输出,每个通道在特征图X和放缩因子γ之间做逐像素相乘。 这样的方法受SE-Net等工作的启发,即考虑强调天空出现飞机,不强调出现车辆的可能性。

Semantic Encoding Loss:

EncNet 的构建采用了 dilated 策略,如下图,在Stage3 和 Stage 4 采用了 dilation 卷积. 同时,添加了新的独立分支,以最小化 SE-Loss 正则化网络训练,其采用 encoded semantics 作为输入,输出预测的是物体类别是否存在.

语义分割问题的标准训练过程中,网络是对独立的像素进行学习(给定输入图像和对应的 GT labels,计算逐像素的交叉熵损失函数). 因此,网络很难理解带有全局信息的上下文内容.

SE-Loss(Semantic Encoding Loss) 作为新增的网络训练正则化损失函数,其是在 Encoding Layer 的输出端,新加一个全连接层和 sigmoid 激活函数,以对场景中物体类别存在的可能性进行预测,其后采用的是 BCE-Loss(Binary Cross Entropy Loss).

SE-Loss 对比于 PSPNet 的辅助 loss,类似,但计算代价更小。SE-Loss 的 GT 是由 GT segmentation mask 直接生成的.

标准的语义分割训练过程,使用的是逐像素的交叉熵,这将像素独立开学习。这样网络在没有全局上下文情况下可能会难以理解上下文,为了规范上下文编码模块的训练过程,使用Semantic Encoding Loss (SE-loss)在添加少量额外计算消耗的情况下强制网络理解全局语义信息。在编码层之上添加了一个带Sigmoid激活的FC层用于单独预测场景中出现的目标类别,并学习二进制交叉熵损失。不同于逐像素损失,SE loss 对于大小不同的目标有相同的贡献,这能够提升小目标的检测性能。

3.2 Context Encoding Network (EncNet)

在提出的上下文编码模块基础上,基于使用了扩张策略的预训练ResNet构建了Context Encoding Network (EncNet)。 细节如下图所示: 

                           

扩张卷积策略: 在stage3使用了扩张率为2,stage4扩张率为4。

为了进一步的提升和规范上下文编码模块的训练,使用了单独的分离分支用于最小化SE-loss,该Loss采用已编码的语义作为输入并预测对象类别的存在。因为上下文模块和SE-loss是轻量级的,论文在stage3上端添加另一个上下文编码模块用于最小化SE-loss作为额外的正则化,这类比于PSPNet的辅助分支但比那个轻量了许多。SE-loss的ground truth是从真实的ground-truth分割mask上直接生成的。

上下文编码模块插入到现存的CNN模型上是不需要额外的修正和监督的。

Segmentation Approaches:

CNN在包括语义分割的计算机视觉领域上成为了标准方法。FCN开创了端到端的训练方式,但是因为在图像分类任务上预训练导致的特征图空间分辨率的损失,语义分割任务需要恢复细节信息。 有工作是学习上采样滤波器,即decoder等;另一个方法是使用扩张卷积保持特征大的接受野生成密集预测。早期有使用CRF做后端处理,也实现了端对端训练;最近基于FCN架构通过大扩张率卷积或全局/金字塔池化提升接受野达到性能上的提升。

这些策略是以牺牲模型效率为代价,例如PSPNet在PSP模块和上采样后对平面特征图使用卷积,DeepLab使用大扩张率卷积在极端情况下会退化为1×11×1的卷积。 我们提出的上下文编码模块能够有效的利用全局上下文用作语义分割。这只需要少量的计算消耗成本。

Featuremap Attention and Scaling:

逐通道式的特征attention是受到其他工作启发。 Spatial Transformer Network在没有额外监督的条件下在网络内部学习了空间变换。Batch Normalization 是的小批量数据的均值和方差作为网络的一部分做标准化,成功的允许使用更大的学习率,并使得网络对初始方法不是那么敏感。最近在风格转换方面的工作处理特征图均值和方差或二阶统计信息用于启动网络内部风格变换。SE-Net探究了跨通道信息以学习逐通道attention。

受这些方法启发,论文使用以编码语义预测特征图通道的放缩因子,这提供了在给定场景上下文的情况下强调个别特征图的机制。


4 Experiments

     实验细节:基础层使用带扩张卷积策略的预训练ResNet,最终输出为输入的1/8。使用双线性上采样到指定大小并计算loss。              

                     

实际情况下,越大的crop尺度对语义分割任务性能更好,但这同时需要更大的GPU存储空间,相应的这会减少Batch Normalization的batchsize,弱化训练过程。

为了解决这个问题,论文在PyTorch中实现了跨GPU的Sync-BN,实际的训练过程中使用batchsize为16。 论文以dilated ResNet FCN为对比的baseline。对于训练的EncNet,在编码层使用32个codewords,SE-loss的ground truth通过在给定的ground-truth 分割mask中通过”unique”操作查找类别,最终的loss是逐像素loss和SE-Loss的加权和。

在Pascal VOC2012上表现:


6 Conclusion

论文的一些想法可以尝试在其他的一些模型看看效果!

发布了106 篇原创文章 · 获赞 158 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_41997920/article/details/95510512
今日推荐