(ML) BAM : Bottleneck Attention Module

YEN HUNG CHENG
6 min readFeb 19, 2023

--

Bottleneck Attention Module

以下為 BAM(Bottleneck Attention Module)的架構

r (reduction ratio) = 16, d (dilation Rate) = 4

最終的輸出 為 F’ = input tensor + input tensor ⊗ σ(Mc(F) + Ms(F)) 可以用下方的公式來表示

source

M(F) = (Channel attention + Spatial attention) 最後會通過 Sigmoid,在相加之前,兩個分支輸出的大小都會調整為 C × H × W

source
source

Mc(F) Channel attention

在 BAM(Bottleneck Attention Module)中的 Channel attention 類似於 SENet 中的 Squeeze-and-Excitation

source
source

公式步驟如下

  1. 通過 GAP (Global average pooling) C ×1×1
  2. 通過兩層 MLP (Multilayer perceptron) C / r ×1×1
  3. 通過 BN (Batch normalization) C ×1×1

Ms(F) Spatial attention

在 BAM(Bottleneck Attention Module)中的 Spatial attention 採用的是 Bottleneck 架構,例:ResNet。其中使用的兩個卷積採用 Dilation convolution(擴張/空洞卷積)。

source
source

公式步驟如下

  1. 通過 1x1 convolution C/r ×H×W
  2. 通過兩個 Dilation convolution(擴張/空洞卷積)
  3. 通過 1x1 convolution 1×HxW
  4. 通過 BN (Batch normalization)

Bottleneck

Bottleneck通常使用一個較小的卷積核將輸入的通道數降低,接著使用一個較大的卷積核來進行卷積運算,最後再使用另一個較小的卷積核將通道數升高。

Bottleneck設計模式通常可以減少計算量,同時保持較高的模型性能

Dilation convolution

左圖為一般的卷積,右圖為擴張卷積,使用擴張卷積就是為了能夠 擴大感受野

藍色為輸入 tensor

綠色為輸出 feature map

Experiments

(a) Experiments on hyper-params

  1. Dilation value (d) 在 d = 4 時,能夠取得最佳性能
  2. Reduction rate (r) 在 r = 16 時,能夠取得最佳性能

(b) Experiments on each branch

  1. 不管在通道 (Channel) 還是空間 (Spatial) 上各別使用 Attention 都能提升網路的性能,但將兩者結合後,能夠得到最好的性能提升
  2. 在通道 (Channel) 與 空間 (Spatial) 進行合併時,可以發現使用 Element-wise summation 的可獲得最佳的性能提升,Element-wise summation 是整合和保護訊息的最佳方法。

(c) Experiments comparing conv blocks and BAM

從圖表可以發現,若只是任意的增加原本網路的 Block 只會增加參數量,性能提升的效益不佳,但如果插入 BAM (Bottleneck Attention Module) 的話,能夠產生卓越的性能,而產生的參數也較少。

Ablation Study

source

除了 PreResNet28 以外,通常一般將 BAM 放置在 bottleneck 後是有效的,Error 都有降低

BAM-C:表示將 BAM Block 插入到每個卷積塊 (Convolution block) 中

BAM:插在 ResNet 每一個 Stage 之後

source

BAM 在 low-level 對低層次特徵進行去噪,例如背景紋理特徵
。 然後 BAM 在 heigh-level 聚焦於明確的目標上,例如圖中的貓。

Comparison with Squeeze-and-Excitation (SE)

source

在大多數的情況下 BAM 會優於 SENet 然後參數也更少,不過 BAM 需要稍微多一點的 GFLOPS(每秒浮點運算次數),但參數比 SENet 少得多

Conclusion

BAM(Bottleneck Attention Module)通過利用通道 (Channel) 和空間 (Spatial) 注意力機制進行融合來增強特徵表示,總體來說 BAM 可以幫助深度神經網絡更好地捕捉關鍵特徵,從而提高模型的性能

--

--