論文--計算機視覺中的注意力機制

許久沒有看相關論文了,在這裏先把之前整理過的相關論文,寫一下,有其他新的再更新。
主要集中在2018,2019年的一些文章(-_-!)

(CVPR 2018) Squeeze-and-Excitation Networks

  • [pdf] [code]
  • SENet想必大家都很熟悉,胡杰團隊用它在2017年最後一屆 ImageNet 2017 競賽 Image Classification 任務的冠軍.
  • 最喜歡這種大道至簡的工作,思路很清楚,簡潔,很容易理解,但是有效
  • 所做任務:自然圖像分類,場景分類,目標檢測(較爲通用)
  • 結構塊:

SENet

  • 在ResNet和Inception中的應用:SEResNet_SEInceptionNet
  • PyTorch代碼實現(很簡單):
    from torch import nn
    
    class SELayer(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SELayer, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )
    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)
    

(CVPR 2019) SKNet (Selective Kernel Networks)

  • [pdf] [code]
  • 這篇工作作者和上一篇SENet的胡杰,都是Momenta的,原來是一家人呢!比較相似,所以放在了一起。
  • 所做任務:自然圖像分類(CIFAR,ImageNet)
  • 簡單來說,就是在SENet基礎之上,加了一個select操作,論文中介紹說,以下方法圖主要有三部分構成(Split,Fuse, Select),而前兩部分和SE的squeeze和excitation操作很相似,主要區別在於Select部分,通過一種通道間軟注意力機制來選擇不同空間scale的信息。
    SKNet_Select_part
  • 主要方法圖:
    SKNet

(NIPS 2018 )A^2-Nets: Double Attention Networks

  • [pdf] [code僅供參考]
  • 具體介紹可以參看這裏
  • 所做任務:行人行爲(Kinetics),自然圖像分類(ImageNet)
  • 主要框架結構
    A2Net
  • 計算圖
    A2Net_overview

(ECCV 2018) PSANet: Point-wise Spatial Attention Network for Scene Parsing

  • [pdf] [code]
  • 和上一篇A2Net很像,一個gather,一個collect, A2-Net是串行,PSANet是並行。
  • 所做任務:語義分割(Cityspace、 ADE20K)
  • 網絡結構
    PSANet
  • PSA Module
    PSA_Module

(BMVC 2018) BAM: Bottleneck Attention Module

  • [pdf] [code]
  • 這篇論文主要工作是探索了sptial和channel兩個通道間的注意作用,思路清晰,文中具體討論了spatial和channel的注意力機制的作用;同時還是SENet作了比較,效果還可以。
  • 所做任務:自然圖像分類(Cifar-10,100, ImageNet-1k),目標檢測(COCO)
  • 整體結構,如下,需要注意的是BAM Module主要放置在每個Bottleneck之後
    BAM_Module
  • 具體細節:
    BAM_Module_detail
  • 自己整理公式版:
    自己整理公式

(ECCV 2018) CBAM: Convolutional Block Attention Module

  • [pdf] [code]
  • 這篇工作和BAM的是同一相關作者,效果更加好一些,該工作可以看做是SENet基礎之上,添加了spatial的注意力機制;同時又和BAM類似,不同之處在於BAM同時計算spatial和channel之間的,CBAM先計算channel的,後計算spatial的類似於SENet.
  • 還有一點,相比於BAM Module插在每一個Bottleneck之後,CBAM插入在每一個ResBlock之後。
  • 文中也論證了channel attention放在spatial attention之前效果更好一些
  • 所做任務: 自然圖像分類(Cifar, ImageNet),目標檢測(VOC, COCO)
  • Channel Module和Spatial Attention Module
    CBAM_channel_spatial
  • 整體架構
    overview
  • 自己整理公式版:
    自己整理版

(CVPR 2018) Non-local Neural Networks

  • [pdf] [code]
  • 主要是用來捕捉到long-range dependencies。引用論文中的話來講就是:

A position xi ’s response is computed by the weighted average of the features of all positions xj (only the highest weighted ones are shown here).

  • 主要工作和上面幾篇頗有相像之處,不過比較有趣的是本文討論了下圖中的θ\thetaσ\sigma兩個函數的不同結合方式,有Gaussian Function,Embedded Gaussian,Dot product和 Concatenation。這一點一般很有啓發呦!
  • 文中具體討論了non-local模塊的加入方式、位置,想深入瞭解的小夥伴,建議移步去論文。
  • 所做任務: 視頻分類(Kinetics,Charades), 語義分割(COCO)
  • non-local block:
    在這裏插入圖片描述
  • 自己整理公式版:
    non_local_manual

(CVPR 2019)Dual Attention Network for Scene Segmentation

  • [pdf] [code]
  • 本篇工作怎麼看怎麼想,雖然可能你也想不到像那篇O(∩_∩)O哈哈~,是不是躍躍欲試,自己也能搞出一篇論文了^_^。
  • 所做任務:場景分割(PASCAL Context,COCO, Cityspace)
  • 整體結構:
    DANet
  • Position Attention 和 Channel Attention
    detail_position_channel_attention
  • 自己整理公式版:
    DANet_manual

總結:

  • 以上相關的注意力機制,都有一個特點,就是進入注意力機制模塊前後,shape不變,這一點也就決定了所有這種方法都比較通用,容易加入到自己的方法中去。
  • 不過,就我跑過的實驗來看,注意力機制有效的前提是任務的數據量要足夠,要不然很有可能發揮不出應有的性能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章