论文地址:https://arxiv.org/pdf/2009.06160.pdf
一、背景
Scene Parsing 任务属于语义分割的一个分支,也是把每个像素点分成一个具体的语义类别,它和常见的语义分割的区别在于 Scene Parsing 任务的数据集里的类别分为 Object 和 Stuff 两种类别,Stuff 类别是背景类别,比如天空、草地这种形状不太固定的类别,而且这种数据集的类别一般也会比较多,比如 ADE20K 数据集有 150 个类别。
在 Scene Parsing 任务里很重要的一件事情是怎么去构造上下文的信息,因为想从 RGB 值过渡到语义类别上的话,怎么去获得它想要的一些其他像素点的信息是特别重要的。常见的一种简单的方式是用 FCN(上图)去堆叠卷积层和池化层,但这种方式有两点问题:
- 在每一个像素点上它的感受野都是一致的。
- 理论的感受野和实际的感受野是不一致的。
也就是说感受野缺乏了多样性。
在 FCN 之后有一些工作提出来尝试把 multi-level 的信息加入到上下文建模里面,比如说 PSPNet 是把特征 pooling 成不同的大小,然后再把它们 concat 在一起,这样每一个特征位置上都能够捕捉到多尺度的信息;deeplab 中的 ASPP 模块尝试用不同空洞率的空洞卷积去捕捉不同尺度。这类方法的问题是它的 multi-level 的尺度是手工定义的。
那有没有一种更好的方法是针对每个像素它都有自己的一个独特的 context 信息,Non-local 就是这种方式,针对每一个像素都去求这个像素和其他周围像素点之间的关系,在语义分割任务里 DANet 和 OCNet 都是这方面的工作。
最近有一些工作尝试去减少 Non-local 的计算复杂度,因为理论上来讲其实不需要针对每一个像素都去求它的 context 信息,对于某些相似的区域可以 share 一些 context 。所以有一些工作提出来把 GCN 放到分割任务里面,面向语义分割的 GCN 有一个共同的特点就是一共分三步,第一步是投射:把特征从特征空间投射到图空间;第二步是图推理:在图空间上去做 GCN(在投射到图空间的时候每一个结点实际上对应了图像上的一些区域,那么只要在这些结点之间去做 GCN 就代表在捕捉区域之间的关系);第三步是反投射:把这个特征从图空间反投射到特征空间上。用这种方式去增强特征的分辨能力。
二、动机
针对以上背景和前人工作,这篇文章考虑的问题是 context 只是去捕捉其他像素点的信息可能不够,是不是可以把一些语义的上下文概念加进来,作者尝试在第二步图推理时将语义概念加进来。也就是说,作者希望能够不仅去推理视觉区域之间的关系,而且把语义概念和它们之间的关系加到推理过程中来。
三、主要贡献
- 提出了用于上下文建模的新型“图形交互单元”(GI单元),该单元结合了基于数据集的语义知识,以促进视觉图上的上下文推理。
- 提出了语义上下文损失(SC-loss)来规范训练过程,该方法强调了出现在场景中的类别,并抑制了没有出现在场景中的类别。
四、方法
下图是这篇文章的整体框架。
首先,采用经过预训练的 ResNet 作为 backbone,在给定输入 2D 图像的情况下,可以提取视觉特征(视觉表示);同时,可以以分类实例(类)的形式提取基于数据集的语义知识,并将其输入 Word Embedding 以实现语义表示。
其次,视觉特征和语义表示由所提出的 GI 单元进行投射操作,以分别构造两个图(视觉图和语义图):在视觉特征上建立了一个编码视觉区域之间依赖关系的图,其中节点表示视觉区域,边表示区域之间的相似性或关系;另一个图是建立在与数据集相关的类别(由 word embedding 表示)之上的,该类别对语义相关性和标签相关性进行编码。
接下来,在GI单元中进行图交互操作,其中语义图用于在视觉图上促进上下文推理,并指导从视觉图提取基于示例的语义图。(交互的结果是:VisG 上的每个节点得到了一些它需要的语义上下文信息;SemG 上的每个节点在从 Embedding 抽取出来的时候是一个General的表征,但在经过图交互之后它实际上是对于当前图片的每一个语义类别的表征了。)
然后,由GI单元生成的演化后的视觉图通过反投射操作,把特征从图空间反投射到特征空间上,以增强每个局部视觉表示的判别能力;语义图则在训练阶段受到语义上下文损失(SC-loss)的更新和约束。(约束语义图上每一个类别的有无,SC-loss在文章实验当中显示可以有效地提高小物体类别的识别率。)
最后,采用 1×1 卷积,然后进行简单的双线性上采样获得解析结果。
五、实验
下面两个表是作者做的 Ablation Study。
从表1可以看到在 VisG 之后添加 GINet 模块,把语义信息加进来之后可以提高 0.8 个点,进一步地用 SC-loss 去约束全局的语义概念又可以得到 0.7 个点的提升。
表2是和常见的一些 context 建模方法的比较,可以看本文提出的 GINet 显示出了比较高的性能和比较快的速度。
下表是和一些 state-of-the-art 的方法比较,可以看出本文提出的 GINet 在 PASCAL-Context、COCO Stuff 和 ADE20K 数据集上均获得了不错的性能。
下图是一些结果的可视化,重点其实是作者尝试随机选了三个节点初始化了出来,可以看到不同的节点其实对应图片中不同的区域,也就是说只要在这些节点之间去做交互就可以得到区域之间的关系。