天天看點

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

摘要

本文提出了卷積注意力子產品(CBAM),這是一種用于前饋卷積神經網絡的簡單而有效的注意力子產品。 給定一個中間特征圖,CBAM子產品會沿着兩個獨立的次元(通道和空間)依次推斷注意力圖,然後将注意力圖與輸入特征圖相乘以進行自适應特征優化。 由于CBAM是輕量級的通用子產品,是以可以忽略的該子產品的開銷而将其無縫內建到任何CNN架構中,并且可以與基礎CNN一起進行端到端訓練。 本文通過在ImageNet-1K,MS COCO檢測和VOC 2007檢測資料集上進行的廣泛實驗來驗證CBAM。 實驗表明,使用該子產品在各種模型上,并在分類和檢測性能方面的持續改進,證明了CBAM的廣泛适用性。

模型

Convolutional Block Attention Module (CBAM) 表示卷積子產品的注意力機制子產品,是一種結合了空間(spatial)和通道(channel)的注意力機制子產品。相比于senet隻關注通道(channel)的注意力機制可以取得更好的效果。

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

上圖給出了添加CBAM子產品之後的整體結構。可以看到的是,卷積層輸出的結果,會先通過一個通道注意力子產品,得到權重結果之後,會再經過一個空間注意力子產品,最終進行權重得到結果。

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

通道注意力子產品如上圖子圖1所示。将輸入的特征圖,分别經過基于width和height的global max pooling 和global average pooling,然後分别經過MLP。将MLP輸出的特征進行基于element-wise的加和操作,再經過sigmoid激活操作,生成最終的channel attention featuremap。将該channel attention featuremap和input featuremap做elementwise乘法操作,生成Spatial attention子產品需要的輸入特征。以上是通道注意力機制的步驟。

換一個角度考慮,通道注意力機制(Channel Attention Module)是将特征圖在空間次元上進行壓縮,得到一個一維矢量後再進行操作。在空間次元上進行壓縮時,不僅考慮到了平均值池化(Average Pooling)還考慮了最大值池化(Max Pooling)。平均池化和最大池化可用來聚合特征映射的空間資訊,送到一個共享網絡,壓縮輸入特征圖的空間維數,逐元素求和合并,以産生通道注意力圖。單就一張圖來說,通道注意力,關注的是這張圖上哪些内容是有重要作用的。平均值池化對特征圖上的每一個像素點都有回報,而最大值池化在進行梯度反向傳播計算時,隻有特征圖中響應最大的地方有梯度的回報。通道注意力機制可以表達為:

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

空間注意力子產品如上圖子圖2所示。将Channel attention子產品輸出的特征圖作為本子產品的輸入特征圖。首先做一個基于channel的global max pooling 和global average pooling,然後将這2個結果基于channel 做concat操作。然後經過一個卷積操作,降維為1個channel。再經過sigmoid生成spatial attention feature。最後将該feature和該子產品的輸入feature做乘法,得到最終生成的特征。

同樣,空間注意力機制(Spatial Attention Module)是對通道進行壓縮,在通道次元分别進行了平均值池化和最大值池化。MaxPool的操作就是在通道上提取最大值,提取的次數是高乘以寬;AvgPool的操作就是在通道上提取平均值,提取的次數也是是高乘以寬;接着将前面所提取到的特征圖(通道數都為1)合并得到一個2通道的特征圖。

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

其中,

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

為sigmoid操作,7*7表示卷積核的大小,7*7的卷積核比3*3的卷積核效果更好。

實驗

本文中,進行了較多的對比實驗,旨在驗證注意力子產品的積極作用。

首先,對比了通道、空間以及通道&空間,不同注意力機制的效果。

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

僅使用Channel Attention,對比的是使用AvgPool、MaxPool以及都使用時的性能

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

僅使用Spatial Attention,對比的是不同Avg,Max以及kernel_size的性能差異

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

CBAM子產品,對比的是不同順序的性能差異

可以看到的是,先使用Channel(AvgPool&MaxPool),再使用Spatial(avg&max,k=7)的性能是最優的。

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

上圖給出了ImageNet-1K資料集上,訓練誤差的曲線。同樣的證明了,CBAM子產品在訓練集合驗證集上,相比于Baseline和SE注意力機制,都有一定的提升。

最後,是使用Grad-cam進行了可視化,以來證明CBAM是真正地提取出了積極有效的特征。

注意力機制 cnn keras_CBAM:卷積注意力機制子產品

CBAM,SE,Baseline等最後一層卷積層使用Gradcam進行可視化的對比圖

參考文獻

Woo S, Park J, Lee J Y, et al. Cbam: Convolutional block attention module[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 3-19.