CCNet:Criss-Cross Attention for Semantic Segmentation

[code pytorch](t https://github.com/speedinghzl/CCNet)

两种基于注意力的上下文aggregation图

  1. 对于每个位置(例如蓝色),Non-local模块都会生成密集的注意力图,该图的权重为H×W(绿色)。
  2. 对于每个位置(例如蓝色),criss-cross注意模块会生成一个稀疏的注意图,该图仅具有H + W-1个权重。 循环操作后,最终输出特征图中的每个位置(例如红色)都可以捕获所有像素的远程依赖关系。 为了清晰显示,忽略了残差连接。
    在这里插入图片描述

1.Overall

在这里插入图片描述

  • 图2是网络的基本的结构。输入图像经过深度卷积神经网络(DCNN)传递,生成特征图X。
    获得特征图X之后,我们首先应用卷积层以获得降维的特征图H,然后将特征图H放入纵横交错注意(CCA)模块并生成新的特征图H‘,这些特征图H’汇聚长距离的上下文信息并且每个像素以十字交叉的方式进行同步。

  • 特征图H‘仅在水平和垂直方向上聚合上下文信息,这对于语义分割而言还不够。 为了获得更丰富和更密集的上下文信息,我们将特征图H’再次输入到交叉注意模块中,然后输出特征图H‘’。 因此,特征图H‘’中的每个位置实际上收集了来自所有像素的信息。 前后两个纵横交错的注意模块共享相同的参数,以避免添加过多的额外参数。 此递归结构命名为递归纵横交叉注意(RCCA)模块。

  • 然后,我们将密集的上下文特征H‘’与局部表示特征X连接起来。紧接着是一层或数个具有批量归一化和激活以进行特征融合的卷积层。 最后,将融合的特征输入进分割层以生成最终的分割图。

2.Criss-Cross Attention

在这里插入图片描述

  • 如图3所示,局部特征H∈RC×W×H,criss-cross注意模块首先在H上应用两个具有1×1 filters的卷积层,分别生成两个特征图Q和K,其中{Q,K}∈RC’×W×H。C’是特征图的通道数,由于尺寸缩减,C‘小于C。在获得特征图Q和K之后,我们通过Affinity运算进一步生成注意力图A∈R(H + W-1)×W×H。 在特征图Q的空间维度上的每个位置u,我们都可以得到向量Qu∈R C’。 同理,我们可以通过从K中提取特征向量来获得集合Ωu,K是与u处于同一行或同一列。因此,Ωu∈R(H + W-1)×C‘,Ωi,u∈R C’是Ωu的第i个元素。

  • Affinity运算的定义如下:
    在这里插入图片描述
    其中di,u∈D表示特征Qu与Ωi,u的相关程度,i = [1,…,|Ωu|],D∈R(H + W-1)×W× H。 然后,我们沿着channel维度在D上应用softmax层,以计算注意力图A。

  • 然后在H上应用另一个具有1×1 filters的卷积层以生成V∈R C×W×H以进行特征自适应。 在特征图V的空间维度上的每个位置u,我们都可以获得向量Vu∈RC和集合Φu∈R(H + W-1)×C。 集合Φu是V中的特征向量的集合,这些特征向量位于位置为u的同一行或同一列中。 远程上下文信息由Aggregation操作收集:
    在这里插入图片描述
    其中H’u表示输出特征图H’∈R C×W×H在位置u处的特征向量。 Ai,u是通道i和位置u处的标量值。将上下文信息添加到局部特征H中以增强局部特征并增强按像素表示。 因此,它具有广阔的上下文视图,并根据空间注意力图选择性地聚合上下文。

3.Recurrent Criss-Cross Attention

在这里插入图片描述

  • 尽管纵横交错的注意力模块可以捕获水平和垂直方向的远程上下文信息,但像素与像素周围的连接仍然稀疏。 我们基于上述的纵横交叉注意模块引出了反复纵横交叉注意。 循环交叉注意模块可以展开为R个循环。在第一个循环中,纵横交错的注意力模块将从CNN模型中提取的特征地图H作为输入,并将特征地图H’作为输入,其中H和H‘具有相同的形状。 在第二个循环中,纵横交错的注意力模块将输入特征图H’和输出特征图H‘’作为输入。
    如图2所示,循环纵横交错注意模块具有两个循环(R = 2),足以从所有像素中获取远程依存关系,以生成具有密集且丰富的上下文信息的新特征图。

  • A和A‘分别作为循环1和循环2中的注意图。 由于我们只对上下文信息的空间维度而不是通道维度感兴趣,因此可以将具有1×1filters的卷积层视为相同的连接。 另外,从位置x ‘,y’到权重Ai,x,y的映射函数定义为

  • 在这里插入图片描述

  • 对于特征图H’’上的任何位置u和特征图H上的任何位置θ,如果R = 2,则存在连接。一种情况是u和θ在同一行或同一列中:
    在这里插入图片描述

  • 其中←表示附加操作。 另一种情况是u和θ不在同一行和同一列中。 图4显示了上下文信息在空间维度上的传播路径:
    在这里插入图片描述

  • 通常,我们的循环交叉注意模块弥补了交叉注意模块无法从所有像素获取密集上下文信息的不足。 与纵横交错注意模块相比,循环纵横交错注意模块(R = 2)不会带来额外的参数,并且可以以较小的计算增量为代价实现更好的性能。

发布了12 篇原创文章 · 获赞 4 · 访问量 1266

猜你喜欢

转载自blog.csdn.net/qq_36321330/article/details/105460926