CCNet: Criss-Cross Attention for Semantic Segmentation

  • 论文地址:https://arxiv.org/abs/1811.11721
  • 论文代码:https://github.com/speedinghzl/CCNet

1. 摘要

  • 本文提出了一个CCNet,具有以下优点1)GPU内存友好。与non-local块相比,循环的交叉注意模块需要较少的GPU内存使用。2)计算效率高。在计算远程依赖关系时,反复出现的交叉注意显著减少了约85%的non-local块。3)最先进的性能。
  • 图1.两种基于注意力的上下文聚合方法的图表。 (a)对于每个位置(例如蓝色),non-local模块生成具有 HxW 权重(绿色)的密集注意力图。 (b)对于每个位置(例如蓝色),十字交叉注意模块生成稀疏的注意力图,其仅具有H+W-1权重。在重复操作之后,最终输出特征图中的每个位置(例如红色)可以捕获来自所有像素的长程依赖性。为清晰显示,忽略剩余连接。
  • 贡献
      (1) 提出了一个新颖的纵横交叉关注模块,可以利用它以更有效和更有效的方式从远程依赖中捕获上下文信息.
      (2) 通过利用两个经常性的交叉关注模块来提出CCNet,在基于细分的基准测试中实现领先的性能,包括Cityscapes,ADE20K和MSCOCO。

2. 引言

  • 金字塔池化中使用空洞卷积:基于扩张卷积的方法收集来自少数周围像素的信息,并且实际上不能生成密集的上下文信息。
  • 金字塔池化中的池化:基于池化的方法以非自适应方式聚合上下文信息,并且所有图像像素采用同构上下文信息,这不满足不同像素需要不同上下文依赖性的要求。
  • 为了生成密集且逐像素的上下文信息,PSANet学习通过预测的注意力映射来聚合每个位置的上下文信息。非局部网络利用自我关注机制,其使得来自任何位置的单个特征能够感知所有其他位置的特征,从而产生更多的功率像素方向表示。这里,特征图中的每个位置通过自适应预测的关注图与所有其他位置连接,从而收集各种范围的上下文信息,参见图1(a)。然而,这些基于注意力的方法需要生成巨大的注意力图来测量每个像素对的关系,其时间和空间的复杂性都是O((HxW)x(HxW)),其中HxW表示输入要素图的空间维度。由于输入特征映射在语义分割任务中始终具有高分辨率,因此基于自注意的方法具有高计算复杂度并占据大量GPU内存。我们认为:是否有一种替代解决方案能够以更有效的方式实现这样的目标?
  • 我们发现采用的当前non-local操作可以替换为两个连续的十字交叉操作,其中每个操作对于特征映射中的每个位置只有稀疏连接(H+W-1)。这促使我们提出纵横交错的关注模块,以在水平和垂直方向上聚合远程像素方面的上下文信息。通过串行堆叠两个纵横交错的注意模块,它可以收集来自所有像素的上下文信息。分解大大降低了O((HxW)x(HxW))到O((HxW)x(H+w-1)的时间和空间复杂度。
  • 具体而言,我们的纵横交错注意模块能够在纵横交错的路径上收集附近和远处的各种信息。如图1所示,non-local模块和十字交叉注意模块都提供具有空间大小HxW的输入特征映射,以分别生成关注映射(上分支)和适配特征映射(下分支)。然后,采用加权和作为聚合方式。在纵横交错注意模块中,特征图中的每个位置(例如,蓝色)通过预测的稀疏注意力图与处于同一行和相同列中的其他位置连接。预测的注意力图在non-local模块中仅具有H+W-1权重而不是HxW。此外,我们提出了反复交叉注意模块来捕获所有像素的远程依赖性。局部特征仅被传递到纵横交错注意模块一次,其在水平和垂直方向上收集上下文信息。十字形注意模块的输出特征图被输入下一个十字交叉注意模块;第二特征图中的每个位置(例如,红色)从所有其他位置收集信息以增强逐像素表示。所有纵横交错的注意模块共享参数以减少额外参数。我们的纵横交叉注意模块可以插入任何完全卷积的神经网络,名为CCNet,以便以端到端的方式进行分割。

3. 方法

  • 我们提供了用于语义分割的CrissCross网络(CCNet)的详细信息。首先,我们介绍我们网络的一般框架。然后,我们将介绍纵横交叉注意模块,该模块在水平和垂直方向上捕获远程上下文信息。最后,为了捕捉密集和全局的背景信息,我们提出了循环的纵横交叉关注模块。

3.1 总体框架

  • 网络架构如图2所示。输入图像通过深度卷积神经网络(DCNN),它以全卷积的方式设计,然后产生一个特征图X.我们将X的空间大小表示为HxW。为了保留更多细节并有效地生成密集特征映射,我们删除了最后两个下采样操作,并在后续卷积层中使用扩张卷积,从而将输出特征映射X的宽度/高度放大到1/8输入图像。
  • 在获得特征映射X之后,我们首先应用卷积层来获得降维的特征映射H,然后,特征映射H将被馈送到纵横交叉关注(CCA)模块并生成新的特征映射H',它们以纵横交错的方式为每个像素聚合上下文信息。特征映射H'仅聚合水平和垂直方向上的上下文信息,这些信息对于语义分割而言不够强大。为了获得更丰富和更密集的上下文信息,我们再次将特征映射H'提供给十字交叉注意模块,并输出特征映射H''。因此,特征映射H''中的每个位置实际上从所有像素收集信息。之前和之后的两个交叉注意模块共享相同的参数以避免添加太多额外参数。我们将这种经循环结构命名为循环交叉注意力(RCCA)模块。
  • 然后我们将密集的上下文特征H''与本地表示特征X连接起来。接下来是一个或几个卷积层,具有批量归一化和激活特征融合。最后,融合的特征被馈送到分割层以生成最终的分割图。

3.2. Criss-Cross Attention

  • image.png
  • 通过Affinity操作产生A,操作定义如下:

3.3. Recurrent Criss-Cross Attention

  • 尽管交叉注意模块可以在水平和垂直方向上捕获长距离上下文信息,但是像素和周围像素之间的连接仍然是稀疏的。获取语义分割的密集上下文信息是有帮助的。为实现这一目标,我们基于上述交叉注意模块引入了循环交叉注意力。循环交叉注意模块可以展开到R循环中。在第一个循环中,交叉注意模块将从CNN模型中提取的输入特征映射H和输出特征映射H'为输入,其中H和H'有相同的形状。在第二个循环中,交叉注意模块将H'和输出特征图H''。如图2所示,经常性十字交叉注意模块有两个循环(R = 2),足以从所有像素中获取远程依赖关系,以生成具有密集和丰富上下文信息的新特征映射。
  • 另一种情况是u和θ不在同一行和列中。图4显示了空间维度中上下文信息的传播路径:


  • 一般来说,我们循环交叉注意模块弥补了交叉注意模块的缺陷,无法从所有像素获取密集的上下文信息。与交叉注意模块相比,循环交叉注意模块不会带来额外的参数,并且可以通过较小的计算增量来实现更好的性能。循环交叉注意模块也是一个独立的模块,可以在任何阶段插入任何CNN架构,并以端到端的方式进行优化

4.实验

  • 训练设置:
       SGD,lr=1e-2采用poly l更新学习率,动量0.9和权重衰减为1e-4.
      数据增强采用随机缩放(从0.75 到2.0).

你可能感兴趣的:(CCNet: Criss-Cross Attention for Semantic Segmentation)