论文地址:https://arxiv.org/pdf/2007.09690.pdf
PPT:https://wenku.baidu.com/view/ffaeebc8ce1755270722192e453610661fd95a4f.html
讲稿:https://wenku.baidu.com/view/9a670cab1cd9ad51f01dc281e53a580217fc504f.html
一、背景
近年来语义分割出现了很多利用上下文信息,也就是context information的一个方法,最具代表性的主要包括几种,作者总结的第一种是利用空洞卷积的ASPP模块的deeplab系列,第二种是利用金字塔池化的PSPNet,还有就是自注意力机制,代表工作包括DANet,CCNet,OCNet等等。
二、动机
这篇论文的动机就是刚才这些方法在融合上下文信息时都面临着一些问题,比如说deeplab系列的方法还有PSPNet方法它们在融合上下文信息时都不够自适应,就是说可能会融合到错误的信息,从而对分割产生一些不好的影响。而利用自注意力机制的Non-local block的工作则是把全局的信息都融合进来,但是这样就会融入很多多余的语义信息。所以为了更好地进行上下文信息的学习和融合,作者选择图卷积来实现这一目的。一方面图卷积的邻接矩阵可以用来描述两个结点之间的连接关系,另一方面图卷积可以很好地利用结点之间的关系来进行图推理,因此呢可以通过设计邻接矩阵来进行特定的feature的融合过程。
下图是作者使用该文章中提出来的图卷积方式做的一个语义分割效果可视化,从上到下从左到右依次为:原始图像,groundtruth,deeplabV3结果,作者的CDGCNet结果。可以看出,作者的方法保留了更多的上下文细节,并使边界分割得更准确。
三、主要贡献
这篇文章的主要贡献有两个,一个是class-wise learning strategy,也就是一个逐类别的学习策略,它的意思就是说我们要在类别层面上进行构图然后去做图卷积优化;另一个是Dynamic Sampling,叫动态采样,因为是逐类别进行,所以在采样过程中可能会采样到一些困难样本,也就是把本来是错误的结果采样进来,这个错误结果作者称为hard negative,所以为了解决这个问题作者采用一种叫做动态采样的方法去挖掘这个困难样本,然后去优化这个图卷积过程。这两个方法组合在一起就是这个文章提出来的Class-wise dynamic graph convolution,简称CDGC,类动态图卷积。
四、方法
1. Coarse-to-fine Framework
下图是这篇文章设计的一个整体框架,采用了Coarse-to-fine(从粗到精)的框架。首先用一个basic network(可以是任何最新的语义分割架构,文章中用的deeplabV3)去生成一个粗略的分割结果,以及对应的一个feature,称作coarse feature,然后再把这个coarse feature 放入CDGC模块去做refine过程,然后将reasoned feature和之前的coarse feature 二者concat起来或者是sum起来,然后再使用1*1卷积得到最终的预测结果。
2. Class-wise Graph Convolution
下图是CDGC模块的详细结构,它主要包含两步,一步是图构建,一步是图卷积。构图时将经过一个backbone(resnet101),将降采样后的feature map上的每个点作为图的结点。和前人工作不同的是作者的图卷积过程是逐类别进行的,就是刚才说的class-wise learning strategy,主要就是想把属于同一类别的点进行构图,防止属于其它类别的点对这一类别的学习过程进行干扰,因此就需要basic network 预测出来的分割结果作为一个过滤器,去采样不同类别的对应的点来构图。然后在构图过程中就会采样到困难样本,然后为了缓解这一问题文章就提出采用Dynamic Sampling来去对这个困难样本进行一个优化。然后经过图卷积过程就得到了reasoned feature,然后再做一个1*1卷积得到一个和之前的coarse feature相同的形状,这样的话方便之后的结合和预测。
下面通过公式具体介绍一下这篇文章中的图构建和图卷积。
第一种构图方式:Similarity Graph
利用结点间的相似度作为邻接矩阵的边的权值。因为在图卷积里构图其实就是在构邻接矩阵。具体来说就是假如对于两个结点的feature, x i x_i xi和 x j x_j xj,定义两个可以学习的线性变换, ϕ \phi ϕ 和 ϕ ’ \phi’ ϕ’ 来衡量这两个feature的相似度,就得出公式:
F ( x i , x j ) = ϕ ( x i ) T ϕ ′ ( x j ) F(x_{i},x_{j}) = \phi(x_{i})^{\scriptscriptstyle T}\phi'(x_{j}) F(xi,xj)=ϕ(xi)Tϕ′(xj)
这两个线性变换是可以学习的,相当于一个动态学习的构图方式,之后然后再进行一个softmax归一化就得到了邻接矩阵,公式如下:
A i j = e x p ( F ( x i , x j ) ) ∑ j = 1 N e x p ( F ( x i , x j ) ) A_{ij} = \frac{exp(F(x_{i},x_{j}))}{\sum_{j=1}^{N}{exp(F(x_{i},x_{j}))}} Aij=∑j=1Nexp(F(xi,xj))exp(F(xi,xj))
这种构图方式是一个非常朴素的构图方式,在实现中就是对于同类别的点来进行全连接的一个构图。
第二种构图方式:Dynamic Sampling
在Similarity Graph的基础上这篇文章采用了一种动态采样的方法来选点构图,在训练过程中同时利用在基础网络预测出来的预测map(记作C)和groundtruth mask(记作G)来选点,这样的话呢,这个叫Sampled的式子就是采样的一些类别:
S a m p l e d = C − C ∩ G + G − C ∩ G + r a t i o ⋅ C ∩ G Sampled=C-C\cap G+G-C\cap G+ratio\cdot C\cap G Sampled=C−C∩G+G−C∩G+ratio⋅C∩G
= C ∪ G − ( 1 − r a t i o ) ⋅ C ∩ G =C\cup G-(1-ratio)\cdot C\cap G =C∪G−(1−ratio)⋅C∩G
第一项 C − C ∩ G C-C\cap G C−C∩G 叫做hard negative,就是本不属于这一类的点却给它采样进来了;第二项 G − C ∩ G G-C\cap G G−C∩G 叫做hard positive,就是本应该属于这一类的点却没有被采样进来;最后一项 C ∩ G C\cap G C∩G 叫做easy positive,就是属于这一类的点并且也给采样出来了,也就是简单样本。所以从这个公式可以看出在选点的时候就是把所有困难样本点先全部选出来,然后再有一定比率地去选择简单样本来辅助这个训练过程。
具体示意图如下图,以“骑车的人”作为一个目标类别,图中红色和绿色的点就代表困难样本和简单样本。困难样本从图上可以看到,主要是在远的物体上和边界上,远的物体因为非常小然后经过降采样之后就很难去识别;边界的话是非常模棱两可的一个东西,它可能会划分到别的物体上。从这张图中我们可以看出远处有骑车的人和行人,所以被分类错误的远处的骑车的人和骑车人的边界(图中大部分红点)叫做hard positive。而远处的行人将它识别出来了但它本不属于“骑车的人”这一个类别,叫做hard negative。动态采样就是在这两个困难样本(红点)和简单样本(绿点)上采出来的点之间进行构图。
在构图完毕后就可以进行图卷积,在图卷积的时候本文采用了一个非常标准的形式:
Z = σ ( A X W ) Z=\sigma(AXW) Z=σ(AXW)
A是邻接矩阵,X是输入的一个feature map,W是要学习的网络参数, σ \sigma σ 是非线性激活函数,本文采用的是ReLU,Z是经过图卷积之后的一个feature。
五、实验
为了证明文章提出的CDGC模块的有效性,作者在Cityscapes数据集上进行了一系列的消融实验,首先是验证了class-wise学习方式的有效性(第一个表格),主要是比较class-wise GCN和plain GCN的表现,plain-GCN就是单纯在feature map上进行图卷积,而resnet101 baseline指的是在backbone基础上再加一个1*1卷积去预测,可以看出采用class-wise的方式带来的mIOU的提升是最大的,也就是直接说明了class-wise learning strategy的有效性。
在第二个表格中作者直接验证整体CDGC模块的有效性,第一行还是之前的baseline,第二行是resnet101加上一个ASPP就是代表deeplabV3,可以看出来单独加了CDGC也比单独加ASPP要表现得好一点,然后最后两行是在ASPP基础上再加上CDGC,相当于有一个更好的基础网络然后再去做一个coarse-to-fine的一个优化,可以看到这样取得了一个更好的精度,而其中sum和concat主要是两类feature的一个叠加方式。
第三个表格主要是比较一下不同构图方式的表现,首先第一行是一个baseline,然后第二行是用一个简单的刚才说的Similarity来构图的一个方式,可以看到仅仅用相似度这种方法去构图也可以带来提升,然后之后的几行是用本文提出的Dynamic Sampling去构图,后面的值是对简单样本的一个采样率,由低到高的,可以看到当这个采样率超过0.4的时候就已经超过了用相似度来构图的方式,然后当这个采样率越来越高,它表现也是越来越高,当采样率达到1的时候也就是全采出来之后它的表现是最好的,达到在Cityscapes验证集的81.1的mIOU。
表4是验证挖掘困难样本是否有效的一个实验,在训练的时候作者主要挖掘了hard positive和hard negative这两类困难样本来优化学习过程,从表中可以看到这两类困难样本的选择确实可以带来mIOU的提升。
除了Cityscapes数据集,作者还在PASCAL VOC 2012数据集和COCO Stuff数据集上进行了实验,从表中可以看到CDGCNet在三个语义分割常用的数据集上取得了更好的结果。
下图是一个class-wise feature的可视化,作者选取了几个特定的类别来看,从上到下是车子、植被和行人,可以看到基础网络识别出来的feature(第二列)有一些不确定的点或者识别错误的点,但是通过图卷积(第三列)直接可以把不确定的点或者错误的点把它给强化或者纠正掉,这样就会直接带来一个精度上的提升,也说明CDGCNet的有效性。
然后下面这个图是一个更加广义的效果图,作者直接在验证集上挑了一些比较困难的样本去做一个分割可视化,也可以看到CDGCNet(第三列)确实要比基础网络deeplabV3(第二列)的识别效果要好一些。