CCNet: Criss-Cross Attention for Semantic Segmentation

CCNet: Criss-Cross Attention for Semantic Segmentation

* Authors: [[Zilong Huang]], [[Xinggang Wang]], [[Yunchao Wei]], [[Lichao Huang]], [[Humphrey Shi]], [[Wenyu Liu]], [[Thomas S. Huang]]


初读印象

comment:: (CCNet)每个像素通过一个十字注意力模块捕获十字路径上的语义信息,通过多次重复操作,每个点最终能够获得整张图的信息。

Why

CNN不能捕获全局信息,注意力太费计算和存储资源。

What

将nonlocal中稠密连接(每个点之间都会连接)的图换成连续的多个稀疏连接的图。CCNet使用了两个交错的注意力模块,分布汇聚了水平方向和垂直方向的上下文信息。能把复杂度从O(N2)降低到O(NN)
Pasted image 20220923214318###How

网络总体架构

Pasted image 20220924110207

  1. CNN的下采样倍率为8。
  2. reduction。
  3. 经过recurrent criss-cross attention (RCCA)模块:
    1. 第一个CC注意力模块,使每个像素都汇集其十字路线上的语义信息。
    2. 第二个CC注意力模块,每个像素获得了所有点的语义信息。(这两个CC注意力模块是共享参数的,)。
  4. 拼接H''和X,经过多个卷积、BN、激活函数得到分割图。

Criss-Cross Attention

Pasted image 20220924115057
A

  1. 输入HRC×H×W
  2. 使用1×1卷积得到Q和K特征图(Reduction)
  3. 通过Affinity操作得到注意力图AR(H×W1)×(W×H):
    1. QuRCQ中一个像素上的向量,ΩuR(H+W1)×CK中与像素u同行同列的向量。

    2. Ωi,uRCΩu的第i个向量,di,uQuΩi,u的相关度:
      Pasted image 20220924121322

    3. 合并du得到D,经过softmax得到A
      lALPJx8Zx9gJzE_NBD7NBP8_1279_1086

    4. 使用又一个1×1卷积得到V特征图(通道数仍为C)。从V中得到像素u十字路径上的特征向量矩阵Φu,相乘得到Hu
      lALPJw1WTqBtoHbNBEzNBP8_1279_1100

    5. 与输入矩阵H相加得到最终结果:
      Pasted image 20220924132659####Recurrent Criss-Cross Attention (RCCA)
      不在十字路径上的点(蓝色)到绿色点的信息流通路径。
      Pasted image 20220924134908

类别一致性损失

将RCCA得到的特征图reduction后(一般通道数降低到16),使用了四种额外的损失:

  1. seg:交叉熵损失
  2. var:惩罚与相同类的特征向量过远的像素
  3. dis:惩罚和不同类的特征向量过近的像素
  4. reg:惩罚所有像素的平均特征向量与初始值过远的情况(类似于权重衰退的L2正则化?)

Pasted image 20220924143409其中:* C是类别集合;

  • NC是属于c类的像素数;
  • hi是H矩阵中像素i的特征向量;
  • μC是C类的平均特征向量。
    最终损失为:
    Pasted image 20220924143536

Pasted image 20220924143653

Experiment

网络细节

backbone:ResNet-101(去除最后两个stage的下采样,并换用空洞卷积)
学习率策略:SDG with mini-batch,poly(power=0.9)。动量(0.9),权重衰退(0.0001)
初始学习率:0.01for Cityscapes and ADE20K
数据增强: (pdf)

性能比较(Cityscapes)

Pasted image 20220924145239####消融实验

RCCA

Pasted image 20220924150607

RCCA是有效的,但是当循环太多时,会浪费资源。

Pasted image 20220924150707#####类别一致损失
损失值为NaN时代表训练失败,使用了CCL的训练成功率更高。

Pasted image 20220924150852

Pasted image 20220924150944

Conclusion

这篇文章总体思路应该和A Nonlocal是相同的,都是通过减少采样数量来降低运算量。不同的是,A Nonlocal是通过平均池化来采样,并融合了多尺度信息来弥补下降的精度,而CCNet是通过两次采样十字路径上的点来近似得到采样了所有点的效果。

posted @   InunI  阅读(311)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示