第十四章:Context Encoding for Semantic Segmentation ——语义分割的上下文编码

news2024/9/23 7:31:31

0.摘要

        近期的研究在使用全卷积网络(FCN)框架改善像素级标注的空间分辨率方面取得了显著进展,通过采用扩张/空洞卷积、利用多尺度特征和细化边界等方法。本文通过引入上下文编码模块来探索全局上下文信息对语义分割的影响,该模块捕捉场景的语义上下文,并选择性地突出显示类别相关的特征图。所提出的上下文编码模块在几乎不增加额外计算成本的情况下显著改善了语义分割结果,我们的方法在PASCAL-Context数据集上取得了新的最先进结果,mIoU达到了51.7%,在PASCAL VOC 2012上达到了85.9%的mIoU。我们的单一模型在ADE20K测试集上取得了0.5567的最终得分,超过了COCO-Place Challenge 2017的获胜模型。此外,我们还探索了上下文编码模块如何改善相对较浅网络在CIFAR-10数据集上的图像分类的特征表示。我们的14层网络在错误率方面达到了3.45%,与拥有10倍以上层数的最先进方法相当。完整系统的源代码公开可用。

图1:准确地为场景进行逐像素标注对于语义分割算法来说是一个挑战。即使对于人类来说,这个任务也很具有挑战性。然而,根据场景上下文缩小可能类别列表可以使标注变得更容易。受此启发,我们引入了上下文编码模块,该模块选择性地突出显示类别相关的特征图,使网络对语义分割的处理更加容易。(来自ADE20K数据集的示例。)

1.引言

        语义分割为给定的图像分配每个像素的对象类别预测,从而提供了包括对象类别、位置和形状信息在内的全面场景描述。最先进的语义分割方法通常基于全卷积网络(FCN)框架。深度卷积神经网络(CNN)的应用受益于从不同图像集中学习到的丰富的对象类别和场景语义信息。通过堆叠具有非线性和下采样的卷积层,CNN能够捕捉具有全局感知野的信息表示。为了解决与下采样相关的空间分辨率损失问题,近期的研究使用扩张/空洞卷积策略从预训练网络中产生密集的预测。然而,这种策略也会使像素与全局场景上下文相隔离,导致像素被错误分类。例如,在图4的第三行中,基线方法将一些窗玻璃像素错误分类为门。

        最近的方法通过使用基于多分辨率金字塔表示的方法,扩大感受野,取得了最先进的性能。例如,PSPNet采用了空间金字塔池化,将特征图汇集到不同的尺寸并在上采样之后进行级联[57],而Deeplab提出了一种采用大空洞卷积的空洞空间金字塔池化方法[5]。虽然这些方法确实提高了性能,但上下文表示并不明确,这引出了一个问题:捕捉上下文信息与扩大感受野的大小是否相同?考虑对一个包含150个类别的大型数据集(如ADE20K [59])中的图像进行标注,如图1所示。假设我们有一个工具允许标注员首先选择图像的语义上下文(例如卧室)。然后,该工具可以提供一个更小的相关类别子列表(例如床、椅子等),这将大大减少可能类别的搜索空间。同样地,如果我们能设计一种方法充分利用场景上下文与类别概率之间的强相关性,那么对于网络来说,语义分割变得更容易。

        经典的计算机视觉方法具有捕捉场景语义上下文的优势。对于给定输入图像,可以使用SIFT或滤波器响应密集提取手工设计的特征。然后,通常会学习视觉词汇(字典),并使用经典编码器(如词袋(BoW)、VLAD或Fisher Vector)描述全局特征统计信息。经典表示通过捕捉特征统计信息来编码全局上下文信息。虽然CNN方法极大地改进了手工设计的特征,但传统方法的整体编码过程便捷且强大。我们能否利用经典方法的上下文编码与深度学习的优势?最近的研究在CNN框架中广泛推广了传统编码器[1,56]。张等人引入了一个编码层,将整个字典学习和残差编码流程整合到单个CNN层中以捕捉无序表示。该方法在纹理分类方面取得了最先进的结果[56]。在这项工作中,我们扩展了编码层,以捕捉全局特征统计信息来理解语义上下文。

        作为本文的第一个贡献,我们引入了一个上下文编码模块,其中包括语义编码损失(SE-loss),这是一个利用全局场景上下文信息的简单单元。上下文编码模块整合了一个编码层,以捕捉全局上下文,并选择性地突出显示与类别相关的特征图。为了理解,考虑到我们希望在室内场景中减弱车辆出现的概率。标准的训练过程只使用了每像素的分割损失,这并没有充分利用场景的全局上下文信息。我们引入了语义编码损失(SE-loss)来规范训练过程,让网络预测场景中物体类别的存在,以强制网络学习语义上下文。与每像素损失不同,SE-loss对大对象和小对象的贡献相等,并且我们发现在实践中小对象的性能通常会得到改善。所提出的上下文编码模块和语义编码损失在概念上非常直观,并且与现有的基于FCN的方法兼容。

        本文的第二个贡献是设计和实现了一个新的语义分割框架Context Encoding Network (EncNet)。EncNet通过在预训练的Deep Residual Network (ResNet)[17]中加入一个Context Encoding Module来增强网络,如图2所示。我们使用预训练网络的扩张策略[4,52]。所提出的Context Encoding Network在PASCAL VOC 2012数据集上的mIoU达到了85.9%,在PASCAL in Context数据集上达到了51.7%。我们的EncNet-101单模型的得分为0.5567,超过了COCO-Place Challenge 2017 [59]的获奖作品。除了语义分割,我们还研究了Context Encoding Module在CIFAR-10数据集[28]上的视觉识别能力,通过使用所提出的Context Encoding Module显著改善了浅层网络的性能。我们的网络仅使用了3.5M个参数,错误率为3.96%。我们发布了完整的系统,包括最先进的方法,以及我们实现的同步多GPU批归一化[23]和内存高效的编码层[56]。

2.上下文编码模块

        我们将CNN模块称为上下文编码模块,模块的组成部分如图2所示。

 上下文编码:理解和利用上下文信息对于语义分割非常重要。对于在多样化图像集上预训练的网络[10],特征图编码了场景中的物体的丰富信息。我们使用编码层[56]来捕捉特征统计信息作为全局语义上下文。我们将编码层的输出称为编码语义。为了利用上下文,我们预测一组缩放因子,以选择性地突出显示与类相关的特征图。编码层学习了一个固有的字典,携带了数据集的语义上下文,并输出具有丰富上下文信息的残差编码器。为了完整起见,我们简要描述了编码层的先前工作。

        编码层将形状为C×H×W的输入特征图视为一组具有C维输入特征的集合X={x1,...xN},其中N是由H×W给出的特征总数。编码层学习一个包含K个码字(视觉中心)的固有码本D={d1,...dK}和一组视觉中心的平滑因子S={s1,...sK}。编码层通过聚合带有软分配权重ek的残差输出残差编码器,其中ek=PNi=1eik,eik=exp(−skkrikk2)exp(−skkrikk2)PKj=1exp(−sjkrijk2)rik,(1),而残差由rik=xi−dk给出。我们对编码器进行聚合而不是连接。即e=PKk=1φ(ek),其中φ表示带有ReLU激活的批归一化,避免使K个独立编码器有序,并减少特征表示的维度。

特征图注意力 为了利用编码层捕捉到的编码语义信息,我们预测特征图的缩放因子作为反馈回路,以强调或减弱与类别相关的特征图。我们在编码层之上使用一个全连接层和一个sigmoid作为激活函数,输出预测的特征图缩放因子γ=δ(We),其中W表示层的权重,δ是sigmoid函数。然后,模块的输出由Y =X ⊗γ给出,其中 ⊗ 表示逐通道乘法,X表示输入特征图,γ表示缩放因子。这种反馈策略受到了风格转移[22,55]和最近的SE-Net[20]中调整特征图尺度或统计量的先前工作的启发。作为对该方法实用性的直观示例,考虑强调天空场景中飞机的概率,但减弱车辆的概率。

语义编码损失 在标准的语义分割训练过程中,网络是从孤立的像素(对于给定的输入图像和真实标签,使用像素级交叉熵损失)中学习的。网络可能在没有全局信息的情况下难以理解上下文。为了规范化上下文编码模块的训练,我们引入了语义编码损失(SE损失),它以非常小的额外计算成本迫使网络理解全局语义信息。我们在编码层之上构建了一个附加的全连接层,并使用sigmoid激活函数进行个别预测,以判断场景中是否存在对象类别,并使用二元交叉熵损失进行学习。与像素级损失不同,SE损失同等考虑大和小的对象。实际上,我们发现小物体的分割结果通常会得到改善。总之,图2所示的上下文编码模块捕获语义上下文,预测一组缩放因子,以选择性地突出显示与类别相关的特征图,用于语义分割。

图2:所提出的EncNet的概述。给定一张输入图像,我们首先使用预训练的CNN提取密集的卷积特征图。我们在顶部构建了一个上下文编码模块,包括一个编码层,用于捕捉编码的语义信息并预测依赖于这些编码语义的缩放因子。这些学习到的因子有选择地突出显示与类别相关的特征图(用颜色可视化)。在另一个分支中,我们使用语义编码损失(SE损失)来规范训练,让上下文编码模块预测场景中是否存在某些类别。最后,上下文编码模块的表示被输入到最后一个卷积层中进行每个像素的预测。

(符号说明:FC表示全连接层,Conv表示卷积层,Encode表示编码层[56],N表示通道间乘法)

 

图3:扩张策略和损失。每个立方体代表不同的网络阶段。我们将扩张策略应用于第3和第4阶段。语义编码损失(SE损失)被添加到基础网络的第3和第4阶段。

(D表示扩张率,Seg-loss表示每像素分割损失。)

 

2.1.上下文编码网络(EncNet)

        通过所提出的上下文编码模块,我们使用预训练的ResNet [17]构建了一个上下文编码网络(EncNet)。我们按照之前的工作,在第3和第4阶段的预训练网络上使用了扩张网络策略[6,53,57],如图3所示。我们在最终预测之前的卷积层上构建了我们提出的上下文编码模块,如图2所示。为了进一步提高上下文编码模块的性能并规范化训练,我们建立了一个单独的分支来最小化SE损失,该分支以编码的语义信息为输入并预测对象类别的存在。由于上下文编码模块和SE损失非常轻量级,我们在第3阶段之上建立了另一个上下文编码模块,以最小化SE损失作为额外的正则化,类似于PSPNet [57]的辅助损失,但比较廉价。SE损失的地面真值直接从地面真实分割掩码中生成,无需任何额外的注释。我们的上下文编码模块可微分,并且在现有的FCN流程中插入,无需任何额外的训练监督或框架修改。在计算方面,所提出的EncNet对原始扩张FCN网络仅引入了边际的额外计算。

2.2.与其他方法的关系

        在计算机视觉任务中,包括语义分割在内,卷积神经网络(CNN)已成为事实上的标准。早期的方法通过对区域提议进行分类来生成分割掩码[14,15]。全卷积神经网络(FCN)开创了端到端分割的时代[36]。

        然而,由于使用了原本设计用于图像分类的预训练网络,从下采样的特征图中恢复细节信息是困难的。为了解决这个问题,

        一种方法是学习上采样滤波器,即分数步卷积或解码器[3,40]。

        另一种方法是在网络中采用Atrous/扩张卷积策略[4,52],该策略保留了较大的感受野并生成了密集的预测。

先前的工作采用密集条件随机场(CRF)来对FCN的输出进行细化分割边界[5,7],CRF RNN实现了与FCN的端到端CRF学习[58]。最近的基于FCN的工作通过使用更大率的扩张卷积或全局/金字塔池化来增加感受野,极大地提升了性能[6,34,57]。然而,这些策略不得不牺牲模型的效率,例如PSPNet [57]在金字塔池化和上采样之后对平面特征图应用卷积,DeepLab [5]采用了大率扩张卷积,在极端情况下会退化为1×1卷积。我们提出了上下文编码模块,以有效利用全局上下文进行语义分割,仅需要边际的额外计算成本。此外,所提出的上下文编码模块作为一个简单的CNN单元与所有现有的基于FCN的方法兼容。

        通道级特征图注意力的策略受到一些开创性工作的启发。空间变换网络(Spatial Transformer Network)[24]学习了一个在输入条件下的网络内部变换,为特征图提供了空间注意力,无需额外的监督。批量归一化(Batch Normalization)[23]将数据的均值和方差规范化为网络的一部分,成功地允许更大的学习率,并使网络对初始化方法的敏感性降低。最近的风格迁移工作通过操作特征图的均值和方差[11,22]或二阶统计量,实现了网络内部的风格切换[55]。一个非常近期的工作SE-Net通过探索跨通道信息学习了通道级的注意力,在图像分类方面取得了最先进的性能[20]。受到这些方法的启发,我们使用编码的语义信息来预测特征图通道的缩放因子,这提供了一种机制,可以根据场景上下文强调或减弱单个特征图的显著性。

3.实验结果

        在本节中,我们首先提供了EncNet和基线方法的实现细节,然后我们在Pascal-Context数据集[39]上进行了完整的消融研究,最后我们报告了在PASCAL VOC 2012 [12]和ADE20K [59]数据集上的性能。除了语义分割,我们还探讨了上下文编码模块如何提升在CIFAR-10数据集上浅层网络的图像分类性能(第3.5节)。

3.1.实现细节

图4:理解场景的上下文信息对于语义分割非常重要。例如,基线的FCN在不知道上下文的情况下将沙子分类为土地,如第一个例子所示。在第二和第四行中,很难区分建筑物、房屋和摩天大楼,没有语义信息。在第三个例子中,由于分类孤立的像素而没有全局感知/视角,FCN将窗玻璃识别为门。(来自ADE20K数据集的视觉示例。)

3.2.在PASCAL-Context数据集上的结果

 

3.3.在PASCAL VOC 2012数据集上的结果

3.4.在ADE20K上的结果

3.5.在CIFAR-10上的图像分类结果

4.总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springMVC的开发步骤-15

第一步你用到前端核心控制器,你应该有他,因此导包: 第二步:配servlet 第三步:配控制器,用来调用视图 结束之后我要干嘛?这个springMvC,我能否将这个pojo放到容器内部当中,能否通过bean标签进行配…

Linux 系统编程-开发环境(三)

目录 16 vim 16.1 vi简介 16.1.1 命令行模式 16.1.2 文本输入模式 16.1.3 末行模式 16.2 vim基础操作 16.3 vim分屏操作 16.4 vim打造IDE 16.4.1 简洁版IDE 17 gcc 18 toolchain 19 静态库和共享库 19.1 静态库 19.2 共享库 19.2.1 基础班使 19.2.2 就业班使用…

BiSeNetv2(pytorch)测试、训练cityscapes

1. 源码: github: https://github.com/CoinCheung/BiSeNet git clone https://github.com/CoinCheung/BiSeNet.git2. 预训练模型: 工程下载后解压,并在其中创建文件夹【model】用于存放预训练模型; 3. 运行demo conda creat…

【安装】Linux环境下的 JDK的安装 安装配置 环境变量

目录 Linux安装java环境1.检查系统中是否有JDK2.删除原有的java相关的包3.上传jdk到指定的文件夹4.解压jdk-8u371-linux-x64.tar.gz5.配置jdk的环境变量6.让配置生效 运行一个jar包运行jar包进行测试 Oracle 甲骨文中国 | 云应用和云平台 windows环境下的 JDK官网下载 & 安…

Android实现抓包 使用Fiddler抓包

Fiddler下载:https://pan.baidu.com/s/1QzvL0xugp6XX7gbFBFlEJg?pwdbf6u 提取码:bf6u 1.Fiddler配置 如果用不到https可以不开启https抓包 电脑打开fiddler,手机电脑同一网段。fiddler打开https抓包(Tools->Options->HTTPS)&a…

re学习(17)Bugku-re-Tworld(使用DFS解决迷宫问题)

下载地址: 跳转提示 参考视频: 【Bugku/CTF/Re/WP】使用DFS解决迷宫问题CTF "Tworld"_哔哩哔哩_bilibili 载入IDA后发现有UPX壳,先用工具进行脱壳,然后载入IDA进行分析。 编写脚本: #全部代码 import…

【电路原理学习笔记】第3章:欧姆定律:3.3 电压的计算

第3章:欧姆定律 3.3 电压的计算 电压相关欧姆定律公式: V I R VIR VIR 【例3-11】在图3-10所示的电路中,产生5A电流需要多大电压? 【答】 V I R 5 A 100 Ω 500 V VIR5\rm A\times 100Ω500 V VIR5A100Ω500V 【同步练习…

N天爆肝数据库——MySQL(5)

本文主要对索引进行了讲解 这里写目录标题 本文主要对索引进行了讲解索引概述介绍优缺点索引结构二叉树红黑树B-Tree(多路平衡查找树)BTreeBTree与B-Tree区别: HashHash索引特点 为什么InnoDB存储引擎选择使用BTree索引结构?索引分类在InnoDB存储引擎中,…

详解JS的四种异步解决方案!

目录 同步&异步的概念 js中异步的应用场景 实现异步的四种方法 1、 回调函数 2、Promise 3、Generator 4、 async/await 「异步编程」是前端工程师日常开发中经常会用到的技术,也是校招面试过程中常考的一个知识点。 通过掌握「异步编程」的四种方式&…

redis 和mongodb基础操作练习

目录 redis作业 string、list、hash 数据类型 举例说明list和hash的应用场景,每个至少一个场景 mongodb作业 1. 创建一个数据库 名字grade 2. 数据库中创建一个集合名字 class 3. 集合中插入若干数据 文档格式如下 4. 查找 5. 增加、更新、删除、统计 re…

【电路原理学习笔记】第3章:欧姆定律:3.1 电压、电流与电阻的关系

第3章:欧姆定律 3.1 电压、电流与电阻的关系 欧姆定律指出:电流与电压成正比,与电阻成反比。即 I V R I\frac{V}{R} IRV​ 3.1.1 电压与电流之间的线性关系 数学上,线性指的是变量之间的关系在图形上是一条直线。线性方程所对…

数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)

目录 引例 希尔增量序列 原始希尔排序 代码(C语言) 时间复杂度 更多增量序列 Hibbard增量序列 Sedgewick增量序列 希尔排序(by Donald Shell) 引例 给以下序列进行排序: 先以5的间隔进行插入排序&#xff1a…

自学数据结构和算法(5)

二叉树的遍历 分为先序、中序、和后序遍历。 这三种遍历都可以由递归序来得到: (1)先序遍历(也是二叉树的深度优先遍历)是第一次到某个结点才打印; (2)中序遍历是第二次到某个结…

【ACM】—蓝桥杯大一暑期集训Day3

🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前正在学习C/C、Java、算法等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:CSTL&#xff…

PCL 获取点集中距离最近的两个点(二维)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 给定一个平面上n个点的点集,问题是找出点集中最近的点对。这个问题经常出现在许多应用程序中,例如,在空中交通管制中,监视靠得太近的飞机,因为这可能发生碰撞。这里实现一种方式来获取这两个点,具体计算过程如…

换零钱II:零钱面值动态变化,class方法自动兑换最少零钱(贪心算法)

银行现存零钱面值种类动态变化但数量无限,类方法change()完成指定金额的最少零钱个数兑换。 (本笔记适合学透python基本数据结构,熟悉class的基构造,对类内全局变量有一定认的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1…

C++并发编程(4):共享数据的问题、使用互斥量保护共享数据、死锁

在线程间共享数据 参考博客 线程间共享数据——使用互斥量保护共享数据 [c11]多线程编程(四)——死锁(Dead Lock) c多线程之死锁 C 死锁及解决办法 共享数据的问题 设想你有一段时间和朋友合租公寓,公寓只有一个厨房和一个浴室。除非你们的感情格外深厚&#xff0…

KBQA项目-基于豆瓣电影TOP250数据的知识图谱对话机器人

从今天开始,我们要一起来学习一个新的课程,叫做《基于豆瓣电影TOP250数据的知识图谱对话机器人》,同时,这个课程也是「知识图谱」系列的第一个项目。 项目演示 课程内容 1、爬取数据:使用reqests库,结合b…

贝莱德CEO再谈比特币ETF:客户需求让我们进军加密市场

来源:CNBC 编译:WEEX Exchang 「进军加密货币领域符合这家资产管理巨头更广泛的使命,即为投资者创造易用且低成本的产品。」贝莱德 CEO Larry Fink 周五(7 月 14 日)在 CNBC 「街谈巷议」(Squawk on the St…

Java 设计模式——装饰者模式

目录 1.概述2.结构3.案例实现3.1.抽象组件3.2.具体组件3.3.抽象装饰3.4.具体装饰3.5.测试 4.优缺点5.使用场景6.JDK 源码解析——BufferedWriter7.装饰者模式和静态代理的比较 1.概述 (1)我们先来看一个快餐店的例子:快餐店有炒面、炒饭这些…