CCNet学习笔记

CCNet学习笔记

1.拟解决的问题

(1)长依赖可以来捕获有利于当前任务的上下文信息,这些信息对于视觉理解人物是很重要的。在语义分割任务中基于FCN的语义分割框架取得了很好的成果,但是由于卷积核固定的结构,使其只能接受短程的上下文信息,为了捕获长依赖信息,后面的研究者们设计出了扩张卷积、空间金字塔等方法,然而这些方法并不能生成密集的上下文信息。

(2)为了获取密集的上下文信息,研究者们将attention mechanism引入到了语义分割任务中,但是这些基于注意力机制的方法需要生成巨大的注意力图来计算每个像素之间的关系,其时间复杂度与空间复杂度均为O((HW)(H*W)),因此基于自注意的方法具有高计算复杂度并占据大量GPU内存。

Non-local方法是第一个将self-attention引入到语义分割任务中的,但是其高计算复杂度让其很难应用到下游任务中。因此作者提出了一种十字交叉注意力模块来代替Non-local的方法。这两个方法的结构图如下所示:
在这里插入图片描述
上图中的左边的蓝色的点是当前的像素点,这两个模块的目的是为了获取该像素点下拥有丰富语义的表示,也就是最右面红色的点。关于Non-local模型中需要计算出一个(H*W)*c的矩阵,里面的每个数表示的是每个像素与当前的像素至今的相关性分数,最终将这个矩阵中的数与之前的蓝色表示相乘并累加最终得到一个语义丰富的像素点特征表示。而在十字交叉注意力模块中只需要计算每个像素点所在的行与列中的像素点之间的关系因此只需要计算(H+W-1)*c的矩阵就可以了。

2.CCNet模块

作者基于十字交叉注意力模块设计了一个名为CCNet的语义分割模型,模型的示意图如下:
在这里插入图片描述
模型的流程就是将输入图像经过一个预训练的模型中,在这个模型中作者采用的是ResNet101作为骨干部分,并去除最后的两层下采样层,将之后的卷积核换成扩张卷积核,最终得到了输入图像的特征表示X,然后对这个特征进行一个降维操作,以减少十字交叉注意力模块的计算复杂度,最终得到了特征H。将特征H输入到第一个十字交叉注意力模块中最终得到了一个语义相对丰富的特征表示H’,然后再次将这个特征输入到第二个十字交叉注意力模块中,最终会得到含有丰富语义的特征表示H’’,最后作者采用了残差思想将特征H’’与特征X进行拼接后得到最终的图像特征表示,最后对其进行分割,最终得到分割结果。

3.十字交叉注意力模块

在介绍这个模块之前,我需要说明的是为了减少训练参数的数量,所有十字交叉注意力模块的注意力是共享的。

十字交叉注意力模块的模型如下图所示:
在这里插入图片描述
首先根据输入的特征H,作者采用了三个不同的1*1的卷积核来获取注意力模型中的Q、K、V,其中Q和K的作用是为了获取当前像素与该像素下横向和纵向的像素点之间的相关性。最后将相关性矩阵与V相整合并加上H特征,就得到了含有丰富语义的特征表示H’。

具体的过程就是:
(1)要计算Q中每个位置下的像素点与K中该位置下的十字空间中的像素点之间的相关性。其公式如下:
在这里插入图片描述
其中 Q u Q_u Qu表示的是Q特征图中u位置对应的特征向量,shape为[1,C], Ω u \Omega_{u} Ωu指的是K中u所在位置的水平像素以及垂直像素的集合,shape为[H+W-1,C],而 Ω i , u \Omega_{i,u} Ωi,u指的是其中的第i个像素。
(2)将Q中每个位置的像素点都计算完之后,最终得到了像素之间的相关性表示张量A,其维度为(H+W-1)×(W*H),(H+W-1)表示是每个像素点的十字区域内的像素点的总数。

(3)将相关性张量A与V特征进行整合,最后利用残差思想加上输入的特征H,就获得了丰富的特征表示H’。其计算公式如下:
在这里插入图片描述
其中 Φ i , u \Phi_{i,u} Φi,u Ω i , u \Omega_{i,u} Ωi,u意思一样。

4.循环十字交叉注意力模块的原因

首先可以在第一次的十字交叉注意力模块中,每个像素点只计算了十字型结构中的像素点的相关性,并没有遍历全部的像素点,因此在第二次使用十字交叉注意力模块时就会间接的遍历全部像素点。下面通过作者的图来详细的介绍:

在这里插入图片描述
首先左下角的绿色像素在loop1中时,只会包含左上角像素点与右下角的像素点,这个时候并没有右上角蓝色点的相关信息。

在loop2时再次计算左下角的绿色像素点时,再次包含了左上角与右下角的像素点,但是由于loop1中的参数与loop2中共享,所以在此时这两个点已经不再是单纯的两个点,其包含了蓝色像素点的相关信息。也就是说在loop2时会获得左下角像素点与蓝色像素点之间的间接关系。

通过两次loop就遍历了所有的点。所以在Non-local中需要计算 ( H ∗ W ) 2 (H*W)^2 (HW)2次,现在就变成了(HW)(H+W-1)次,大大降低了算法的复杂度。

5.实验结果

作者在Cityscapes、ADE20K、COCO三个数据集上进行了实验。

首先作者在Cityscapes数据集上与其他state-of-the-arts的方法进行对比,其结果如下:
在这里插入图片描述
在这里插入图片描述
其次作者在该数据集上进行了消融实验,来获得每个参数的变化对模型的影响,最后作者又在其他的两个数据集上与其他先进的方法进行了对比,其结果如下:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值