(ML) BAM : Bottleneck Attention Module
Bottleneck Attention Module
以下為 BAM(Bottleneck Attention Module)的架構
最終的輸出 為 F’ = input tensor + input tensor ⊗ σ(Mc(F) + Ms(F)) 可以用下方的公式來表示
M(F) = (Channel attention + Spatial attention) 最後會通過 Sigmoid,在相加之前,兩個分支輸出的大小都會調整為 C × H × W
Mc(F) Channel attention
在 BAM(Bottleneck Attention Module)中的 Channel attention 類似於 SENet 中的 Squeeze-and-Excitation
公式步驟如下
- 通過 GAP (Global average pooling) C ×1×1
- 通過兩層 MLP (Multilayer perceptron) C / r ×1×1
- 通過 BN (Batch normalization) C ×1×1
Ms(F) Spatial attention
在 BAM(Bottleneck Attention Module)中的 Spatial attention 採用的是 Bottleneck 架構,例:ResNet。其中使用的兩個卷積採用 Dilation convolution(擴張/空洞卷積)。
公式步驟如下
- 通過 1x1 convolution C/r ×H×W
- 通過兩個 Dilation convolution(擴張/空洞卷積)
- 通過 1x1 convolution 1×HxW
- 通過 BN (Batch normalization)
Bottleneck
Bottleneck通常使用一個較小的卷積核將輸入的通道數降低,接著使用一個較大的卷積核來進行卷積運算,最後再使用另一個較小的卷積核將通道數升高。
Bottleneck設計模式通常可以減少計算量,同時保持較高的模型性能
Dilation convolution
左圖為一般的卷積,右圖為擴張卷積,使用擴張卷積就是為了能夠 擴大感受野
藍色為輸入 tensor
綠色為輸出 feature map
Experiments
(a) Experiments on hyper-params
- Dilation value (d) 在 d = 4 時,能夠取得最佳性能
- Reduction rate (r) 在 r = 16 時,能夠取得最佳性能
(b) Experiments on each branch
- 不管在通道 (Channel) 還是空間 (Spatial) 上各別使用 Attention 都能提升網路的性能,但將兩者結合後,能夠得到最好的性能提升
- 在通道 (Channel) 與 空間 (Spatial) 進行合併時,可以發現使用 Element-wise summation 的可獲得最佳的性能提升,Element-wise summation 是整合和保護訊息的最佳方法。
(c) Experiments comparing conv blocks and BAM
從圖表可以發現,若只是任意的增加原本網路的 Block 只會增加參數量,性能提升的效益不佳,但如果插入 BAM (Bottleneck Attention Module) 的話,能夠產生卓越的性能,而產生的參數也較少。
Ablation Study
除了 PreResNet28 以外,通常一般將 BAM 放置在 bottleneck 後是有效的,Error 都有降低
BAM-C:表示將 BAM Block 插入到每個卷積塊 (Convolution block) 中
BAM:插在 ResNet 每一個 Stage 之後
BAM 在 low-level 對低層次特徵進行去噪,例如背景紋理特徵
。 然後 BAM 在 heigh-level 聚焦於明確的目標上,例如圖中的貓。
Comparison with Squeeze-and-Excitation (SE)
在大多數的情況下 BAM 會優於 SENet 然後參數也更少,不過 BAM 需要稍微多一點的 GFLOPS(每秒浮點運算次數),但參數比 SENet 少得多
Conclusion
BAM(Bottleneck Attention Module)通過利用通道 (Channel) 和空間 (Spatial) 注意力機制進行融合來增強特徵表示,總體來說 BAM 可以幫助深度神經網絡更好地捕捉關鍵特徵,從而提高模型的性能