non-local module及其变形—by Wilson


 一、 简介
  1. 卷积操作只关注于局部的感受野,是典型的local operation,如果要增大神经元的感受野,一般是堆叠卷积层和池化层来实现,但是这样计算量和复杂度都会增加,并且feature map的尺寸会较小。为了突破,作者借鉴图像去噪这个领域的non-local操作,提出了non-local neural network,用来捕捉长距离像素之间的信息,最终实现每个像素的全局感受野。并且通过不同的操作,还可以得到不同空间、时间、通道的像素之间的信息相关性。non-local这个模块在在视频分类的任务上,在Kinetics和Charades上都达到了最好的结果;在图像识别的任务上,non-local模型提高了COCO上物体检测/物体分割/姿态估计等任务的结果。
  2. 本文提出了一种用于语义分割的纵横交错网络(CCNet),该网络自适应地捕获纵横交错路径上的长程上下文信息。为了获得密集的上下文信息,我们引入了递归交叉注意模块,它从所有像素聚集上下文信息。消融实验表明,周期性的纵横交错注意力能够以更低的计算成本和存储成本获取密集的长期上下文信息。我们的CCNet在两个语义分割数据集(即城市景观,ADE20K和实例分割数据集,即COCO。
 
二、参考文献
  1. CVPR2018: Non-local Neural Networks
  by Xiaolong Wang\何凯明 in CMU/Facebook
  2. CVPR2018: CCNet: Criss-Cross Attention for Semantic Segmentation
  by Zilong Huang in 华中科技大学
  3. Non-locally Enhanced Encoder-Decoder Network for Single Image De-raining
  by Guanbin Li in 中山大学
 
三、non-local论文
  1. 动机
   卷积神经网络增加感受野的方法存在缺陷,为了提供增大感受野的方法,non-local neural network只增加了一层网络却实现了全局感受野。
  2. related work
   1⃣空洞卷积增加感受野:收集信息从周围的像素,不能生成准确密集的上下文信息。并且有“棋盘效应”。
   2⃣池化增加感受野:feature map size下降
   3⃣PSPNet通过预测的注意力图集合每个位置的上下文信息。但是计算量大。
  3. 做法
   1⃣定义:(从图像降噪的non-local operation得)
     C(x)为固定的一个函数
     f(x_i, x_j)是计算相关性的函数,计算每个像素和全部位置像素的相关性
     g(x_j)为对输入feature的操作
     y_i得到attention的第i位置的特征
 
     个人理解:C(x)做一个标准化;f(x_i, x_j)计算像素间的相关性,作为一个加权系数;g(x_j)对输入feature做语义转换(让算法自己训练这个操作),并经过加权系数得到第i位置的特征,这个特征融合了于每个位置的相关性。
   2⃣具体操作:(f(x_i, x_j)和g(x_j)的具体形式)
    1). guassian
    2). embedded gaussian(最常用)

     说明:wx_i和wx_j的操作相当于1✖1卷积核的卷积层;f和c函数的操作相当于将i位置和每个位置进行向量内积再做一个softmax()操作,最终我们得到j位置对i位置加权的系数矩阵,这样的矩阵我们称为self-attention,这个self-attention很容易扩展到channel、temporal上,从而得到其他方面的attention。具体操作如下所示:
 
 
 
      如中的feature map size为temporal, h, w, size。 通过三个1x1卷积减少一半的通道后(有助于减少计算量)进行reshape,再进行embedded gaussian操作后得到feature map, 通过1x1的输出卷积层恢复通道数量后,最后进行跳连作为最终的输出。注意在训练时,输出卷积层权重初始化为0,让non-local模块从0开始增加模块的作用。如需通过feature map size减少运算量,可以在其中两个卷积操作后做一个maxpooling,如图所示,其中x^为maxpooling后的特征图。
    3) 点乘

    4) concatenate

  4. 效果
    论文是基于视频分类模型进行实验的。baseline是C2D模型,backbone是resnet50:
 
     1⃣相似性度量方式:
 
 
      a) 说明后面三种度量方式都比较优秀,emb-gaussian和点乘方式类似,concatenation后续还需要额外的参数,所以emb-gaussian的方式最常见。这几种方式都得到较大的提高,说明是non-local这个block在起作用。
 
     2⃣作用的stage:
 
 
      b) 放在较低层(size较大)能够得到更好效果并且性能类似,但是放到高层时效果提升稍差,原因在于高层的size较小,得到的相关性矩阵分辨率太低,无法提供精确的位置信息。
     3⃣数量:

 

      c) 简单地说明数量有助于性能的提升
     4⃣spatial-time的组合:
  
  5. 待改进
 
   1⃣虽然操作比较简单,但是当输入feature map size较大时,占用显存比较多,计算量也比较大,如何精简操作并保持全局感受野,成为这个的改进方向之一。
   2⃣只对spatial操作,可以叠加上channel的信息。
 
 
四、Criss-Cross attention
  1. 动机
    non-local可以在feature map的空间上可以捕捉长距离的上下文信息,但是中间过程的相关性矩阵大小为WH✖WH,当输入的feature size过大时,会占用非常多的显存(亲身经历,平时只要2-3G的显存,加入non-local后占用超8G)。1⃣作者在保持全局感受野的前提下,保持了non-local的特性,并大大减少了运算量和显存。 2⃣获得比non-local更好的效果。
  2. related work
    同non-local。
  3. 做法——criss-cross attention
 

 

      采用当前位置与其同行同列的像素的相关性得到水平方向和垂直方向的远距离像素的上下文信息,并叠加两个相同的模块使每个像素的感受野为全局(同non-local,信息传递),并且大大减少了运算量。
      a)non-local,中间attention map为WH✖WH,红色特征图(左图表示输入的feature map,最右表示含有self-attention的feature map)
      b)cc attention,中间的attention map为WH✖️(H+W-1),只关注每个像素与同行同列(如图中的“十字”)的上下文信息,经过两个这样的attention操作,根据信息传递原理,红色特征图为每个像素与全部像素的上下文信息。
      堆叠两次得到全局感受野,由信息传递可说明:
    在第一次计算cc attention时,左下角像素值只有最左列和最下行的信息聚合,左上角像素有右上角的信息聚合,右下角也有右上角像素的信息聚合。当第二次计算cc attention时,在左下角左同行同列的信息聚合时,由于此时左上角和右下角是有右上角像素的信息的,根据信息传递原则,此时左下角也具有右上角像素的信息。其他像素同理。其中,右上角像素的信息通过左上角和右下角传递给左下角像素两次,虽然间接没有直接传递效果好,但是这可能是造成cc attention效果比non-local要好的原因。
计算量由原来的WH✖WH变为WH✖️(H+W-1)✖️2(若堆叠两次),计算量由乘号变成加号,计算量有所下降。(相关操作类似mobileNet的depth-wise和point-wise,将复杂操作变成两个步骤)
      将cc attention嵌入语义分割,相关网络图如上图所示。
  4. 效果
    1⃣1/11的内存消耗,15%的计算开销(不同input size有不同的比例,越大的图得到的优化越多),但得到比non-local更好的性能,如下表所示:
 

 

 
    2⃣论文baseline为DeepLabv3。
    如下表所示,在validation获得比其他sota算法更好的性能

 

    3⃣可视化说明cc attention的作用
 

 

      中间两个热图为原图中绿色像素与其他像素的相关性(cc attention模块中间feature map的某一行)。可知R=1只有同行列attention,R=2为所有像素。
    4⃣定性结果
 

 

      注意左侧图中圈圈的部分。
  5. 待改进:
    1⃣作者没有提供R>2的结果,有待论证
    2⃣只关注sptial attention,没有关注channel 或者 temporal attention
    3⃣与最近🔥的graph neural network有所联系(摘自其他博主,没有接触过图神经网络),可以从中得到改进的点。
    4⃣更好的信息传递方式...
 
五、其他优化non-local
    patch-non-local module:
    不是全局的相关性度量,将特征图分m✖️n个patch,再在patch中计算patch内部的attention map。
    计算量为:(HW)**2/(mn)
    缺点在于不是全局的感受野,未来可通过叠加另一个模块来实现全局感受野。
    实现方法参考博客链接,大意是将每个patch整理成I(batch, patch, h, w)的形式,然后用原始non-local的操作进行计算。
    性能分析等由于不熟悉去雨去噪这个领域,没有做进一步分析。
 
六、讨论(开会后的总结:参与人员和QA)
  全体213伐木累参与了会议;加深了对non-local模块的理解,提供网络添加模块的思想;将复杂操作转换为简单分布的操作,有助于减少计算量和参数量;
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM