Context encoding for semantic segmenftation论文笔记

之前引入上下文的方式:

①使用空洞卷积(膨胀卷积)来增大感受野

②使用多尺度特征金字塔结构来增大感受野

但这些方法均是通过增大感受野来引入上下文信息,捕获上下文信息是否就等同于增大感受野呢?

空洞卷积存在的问题:

CNN通过迭代非线性激活和下采样的卷积层能捕获带全局感受野的信息表示,为了克服下采样带来的空间分辨率损失,常用空洞卷积策略以预训练模型上产生密集预测。然而此策略依然会将像素从全局场景上下文相隔开,这会导致像素错误分类。

金字塔结构存在的问题:

基于特征金字塔结构表示(如FPN)利用各层特征图的融合的Top-down结构来扩大感受野,但这对上下文表示不够明确,捕获上下文信息是否等同于增加感受野大小?如果能先捕获到图像的上下文信息(如在卧室),则可提供许多相关小型目标的信息(如卧室有床、椅子)可动态地减少搜索区域可能,即加入一个场景先验知识,这样对图片中像素分类更有目的性。就可以设计一种方法充分利用场景上下文和存在类别概率之间的强相关性。

传统算法的经典特征表示通过捕获特征统计信息编码全局信息十分方便,虽然相比手工提取特征通过CNN方法得到了很大的改进,但传统方法的总体编码过程更为方便和强大。因此作者利用传统方法的上下文编码结合深度学习。传统方法在捕获上下文信息时,是从图像中提取特征描述子,然后利用聚类等非监督算法构建视觉词典,对特征进行编码(如BOWS等无序编码器),最后使用分类器分类。因此使用传统的视觉单词编码可以很好地统计图片的全局统计信息。

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

对于Context Encoding module:

先看Encode编码层:

将C*H*W的feature map作为一个C维的输入特征x,然后用传统方法得到一个带有上下文语义的视觉词典D(包含k个视觉单词),D就是对整张图片的所有上下文信息的统计编码。并为这k个视觉单词生成的k个缩放因子作为权重,通过软分配权重,编码层输出k个残差编码。

具体来说,通过将feature map的H*W个C维特征,每一个都与语义词dk(视觉单词)做差,然后和所有语义词做差的结果相加进行归一化,获得一个像素位置相对于某个语义词的信息eik,然后将这N个结果求和加在一块获得最终的ek,获得整个feature map相对于第k个语义词的信息。编码层最终输出定长表示{e1,e2,...,ek}

再看Featuremap Attention部分:

ek是C维的,最后将K个ek融合到一起,这里没有用concat,而是元素求和,原因是一方面concat包含了顺序信息,另一方面用加的方法节省了显存。这里加起来的含义是获得整张图像相对于K个语义词(视觉单词)的全部信息。最后的e也是c维的。然后利用产生的e来产生通道权重,即一个channel-wise的attention。具体来说,是在编码层顶部添加一个带sigmoid激活函数的FC层用于预测得到放缩因子scaling factors,记作γ

这里W是FC层的权重,δ表示sigmoid

然后与之前的特征图x进行每个通道上的逐元素相乘,得到场景类别相关的特征图Y。一组放缩因子(scaling factors)就是用于突出和类别相关的特征图。

直观例子是:考虑强调天空出现飞机而不会出现汽车!

仔细一想,k种视觉单词每种都由C维channel不同程度贡献而成,所以已知k种视觉单词的表现形式就可以反过来得到每一个channel的attention

C x H x W <=> C x N => C x k -(fc)=> C x 1

最后看整体Context Encoding Network (EncNet)部分:

网络结构中,对编码层中提取出的残差编码语义信息使用FC层进行编码,分送给2个分支。其中通过分支1直接送给SE-loss,进行场景中出现的类别的预测,另一个分支对每个类别预测加权尺度因子(缩放因子)对前面的每个通道的feature map进行加权,然后再上采样,最终计算loss。

SE-loss:

在标准的语义分割训练过程中,网络是从分离孤立的像素点中学习到的(对于每个输入的图像与标签,使用像素级别的交叉熵损失函数)。只应用具体的每个像素的分割损失,并不很强调使用场景的全局上下文信息。故网络在学习全局语义上下文信息的时候可能会有一定的困难,因此为了规范化上下文编码模块的训练过程,文章引入一种上下文语义编码损失函数SE-loss,使得训练更加系统化。即用来预测场景中出现的类别,使用二值交叉熵损失函数。与像素级别的交叉熵损失函数不同,SE-loss只考虑类别信息,会预测场景中出现的物体类别,来加强网络学习上下文语义信息的能力。对每类中像素的数量不关心,这样每类都是平等的,不存在类间样本数量不均衡的问题。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值