許久沒有看相關論文了,在這裏先把之前整理過的相關論文,寫一下,有其他新的再更新。
主要集中在2018,2019年的一些文章(-_-!)
目錄
- (CVPR 2018) Squeeze-and-Excitation Networks
- (CVPR 2019) SKNet (Selective Kernel Networks)
- (NIPS 2018 )A^2-Nets: Double Attention Networks
- (ECCV 2018) PSANet: Point-wise Spatial Attention Network for Scene Parsing
- (BMVC 2018) BAM: Bottleneck Attention Module
- (ECCV 2018) CBAM: Convolutional Block Attention Module
- (CVPR 2018) Non-local Neural Networks
- (CVPR 2019)Dual Attention Network for Scene Segmentation
- 總結:
(CVPR 2018) Squeeze-and-Excitation Networks
- [pdf] [code]
- SENet想必大家都很熟悉,胡杰團隊用它在2017年最後一屆 ImageNet 2017 競賽 Image Classification 任務的冠軍.
- 最喜歡這種大道至簡的工作,思路很清楚,簡潔,很容易理解,但是有效
- 所做任務:自然圖像分類,場景分類,目標檢測(較爲通用)
- 結構塊:
- 在ResNet和Inception中的應用:
- 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的信息。
- 主要方法圖:
(NIPS 2018 )A^2-Nets: Double Attention Networks
(ECCV 2018) PSANet: Point-wise Spatial Attention Network for Scene Parsing
- [pdf] [code]
- 和上一篇A2Net很像,一個gather,一個collect, A2-Net是串行,PSANet是並行。
- 所做任務:語義分割(Cityspace、 ADE20K)
- 網絡結構
- PSA Module
(BMVC 2018) BAM: Bottleneck Attention Module
- [pdf] [code]
- 這篇論文主要工作是探索了sptial和channel兩個通道間的注意作用,思路清晰,文中具體討論了spatial和channel的注意力機制的作用;同時還是SENet作了比較,效果還可以。
- 所做任務:自然圖像分類(Cifar-10,100, ImageNet-1k),目標檢測(COCO)
- 整體結構,如下,需要注意的是BAM Module主要放置在每個Bottleneck之後
- 具體細節:
- 自己整理公式版:
(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
- 整體架構
- 自己整理公式版:
(CVPR 2018) Non-local Neural Networks
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).
- 主要工作和上面幾篇頗有相像之處,不過比較有趣的是本文討論了下圖中的和兩個函數的不同結合方式,有Gaussian Function,Embedded Gaussian,Dot product和 Concatenation。這一點一般很有啓發呦!
- 文中具體討論了non-local模塊的加入方式、位置,想深入瞭解的小夥伴,建議移步去論文。
- 所做任務: 視頻分類(Kinetics,Charades), 語義分割(COCO)
- non-local block:
- 自己整理公式版:
(CVPR 2019)Dual Attention Network for Scene Segmentation
- [pdf] [code]
- 本篇工作怎麼看怎麼想,雖然可能你也想不到像那篇O(∩_∩)O哈哈~,是不是躍躍欲試,自己也能搞出一篇論文了^_^。
- 所做任務:場景分割(PASCAL Context,COCO, Cityspace)
- 整體結構:
- Position Attention 和 Channel Attention
- 自己整理公式版:
總結:
- 以上相關的注意力機制,都有一個特點,就是進入注意力機制模塊前後,shape不變,這一點也就決定了所有這種方法都比較通用,容易加入到自己的方法中去。
- 不過,就我跑過的實驗來看,注意力機制有效的前提是任務的數據量要足夠,要不然很有可能發揮不出應有的性能。