論文位址:ECA-Net
論文代碼:https://github.com/BangguWu/ECANet
論文總結
ECA-Net是基于SE-Net的擴充,其認為SE block的兩個FC層之間的次元縮減是不利于channel attention的權重學習的,這個權重學習的過程應該直接一一對應。作者做了一系列實驗來證明在attention block中保持channel數不變的重要性。
ECA-Net的做法為:(1)Global Avg Pooling得到一個 1 ∗ 1 ∗ C 1*1*C 1∗1∗C的向量;(2)通過一維卷積1D-Conv來完成跨channel間的資訊互動。
一維卷積的卷積核大小通過一個函數來自适應,使得channel數較大的層可以更多地進行cross channel 互動。自适應卷積核大小的計算公式為: k = ψ ( C ) = ∣ log 2 ( C ) γ + b γ ∣ k=\psi(C)=|\frac{\log_2(C)}{\gamma}+\frac {b}{\gamma}| k=ψ(C)=∣γlog2(C)+γb∣,其中 γ = 2 , b = 1 \gamma=2,b=1 γ=2,b=1。
論文内容
作者表示,最近基于SE-Net的擴充,大多都隻緻力于開發複雜的attention模型,以得到更好的性能,這不可避免的增加了模型複雜度。而本文的方法ECA-Net隻涉及少數的參數,可以達到兩個目的:(1)避免特征次元的縮減;(2)增加channel間資訊的互動,在降低複雜度的同時保持性能(通過一維卷積)。
SE block的結構由兩部分組成:(1)global avg pooling産生 1 ∗ 1 ∗ C 1*1*C 1∗1∗C大小的feature maps;(2)兩個fc層(中間有次元縮減)來産生每個channel的weight。
ECA-Net
的結構如下圖所示:(1)global avg pooling産生 1 ∗ 1 ∗ C 1*1*C 1∗1∗C大小的feature maps;(2)計算得到自适應的kernel_size;(3)應用kernel_size于一維卷積中,得到每個channel的weight。
消融學習實驗
作者對SE-Net的擴充嘗試如下圖所示:【前提知識 y y y為平均池化層的輸出】,有SE-Var1(直接對y進行非線性運算),SE-Var2(對y進行depth-wise卷積運算,即一個channel一個參數),SE-Var3(對y直接進行一個全連接配接運算),SE-GC(對y進行分組卷積運算),ECA-NS(每個channel使用k個參數進行channel之間的互動),ECA(共享k個參數,進行channel之間的互動,即一維卷積)。
由上圖可以得出以下結論:
- SE-Var1與Vanilla的結果表明,不添加參數的attention都是有效的;
- SE-Var2與SE的結果表明,盡管SE-Var2的參數較少,但SE-Var2的效果仍比原始的SE要好,這表明了維持通道數的重要性。這個重要性比考慮channel之間的資訊互動依賴的非線性還要重要;
- SE-Var3與SE的結果表明,SE-Var3隻是用一個FC都比帶次元縮減的兩個FC層的SE要好;
- SE-Var3與SE-Var2的結果表明,跨channel的資訊互動對于學習channel attention的重要性;
- Group Conv的使用是SE-Var3和SE-Var2的一個折中方法,但使用了Group Conv并沒有SE-Var2的效果好;這可能是由于Group Conv放棄了不同Group之間的依賴,因而導緻了錯誤的資訊互動;
- ECA-NS對于每個channel都有k個參數,這樣可以避免不同Group之間的資訊隔離問題,從結果來說是可以的;
- ECA使用共享權重,結果表明了該方法的可行性;同時,共享權重可以減少模型參數;
自适應kernel_size
作者放棄了使用線性方法來得到kernel_size,認為這樣太過于局限了。由于channel數一般都是2的指數,是以有了如下公式:
其中, ∣ x ∣ o d d |x|_{odd} ∣x∣odd 的意思為選擇最近的奇數; γ = 2 , b = 1 \gamma=2,b=1 γ=2,b=1