原論文
CBAM:Convolutional Block Attention Module
https://arxiv.org/pdf/1807.06521.pdf
日本語解説
CBAM:Convolutional Block Attention Moduleを読んだ
https://qiita.com/_NiMA_/items/20ec1b7a414668c1ece6
結論
SENetに局所的な空間認識を追加する.
チャネルと組み合わせることで「何」が「どこ」にあるかについて焦点を当てる.
概要
画像認識分野でCNNに動的なパラメータを追加したSENetがある.SENetは,入力特徴量でどのチャンネルが重要かを入力特徴量を使用して計算する.しかし,SENetの構造で,空間情報を1つの値に圧縮する構造が含まれ,空間の大切な情報を取りこぼす可能性がある.そこで,CBAMは,なるべく空間情報を取りこぼさないような構造を追加することと,チャンネルの重要度に加え,空間の重要度も計算する.
チャンネルと空間の両方を計算することで,精度向上した.
モデル構造
SENetでは,チャンネルアテンションのみだったが,その後に空間アテンションを追加する.これにより,チャンネルの重要度付けに加えて,空間の重要度付けが可能になる.
チャンネル注意
チャンネル注意は、入力画像が「何」に意味があるかに注目する.
最大値プーリングはシンプルで大切だよ(平均すると,重要な情報が平均によってかき消される)って気づいたから最大値プーリングも採用した.
入力特徴量($H \times W \times C$)を空間に対して,平均値プーリング($1 \times 1 \times C$)と最大値プーリング($1 \times 1 \times C$)を行い,2層のMLPに入力し,出力された特徴ベクトルを足し合わせ(要素和)をする.その後,シグモイド関数で値を0~1に変換して,入力した特徴量に掛け合わせる.これによって,入力特徴量の各チャンネルに重要度付けされる.
※平均と最大のプーリングにより,特徴ベクトルの情報が倍に増えてしまうため,学習するMLPの重みは平均と最大で共有する.(同じ重みで計算する)
空間注意
空間注意は「どこ」が情報的な部分であるかに注目する.
入力特徴量($H \times W \times C$)をチャンネルに対して,平均値プーリング($H \times W \times 1$)と最大値プーリング($H \times W \times 1$)を行い,各特徴量を連結する($H \times W \times 2$).
連結した特徴量に対して$7 \times 7$の畳み込み層とシグモイド関数で値を0~1に変換して,入力特徴量にかける.
$7 \times 7$が採用されたのは,精度が良かったからである.
並列?直列?
チャンネル重要度付けと空間重要度付けを並列でなく,直列に繋げたのは,実験的に直列が良かったからである.
結果
Poolingでの圧縮方法は,平均と最大値の両方を使用した場合に精度向上する.
おわりに
今回は,SENetに派生して空間とチャンネルの動的パラメータ【CBAM】について解説した.SENetの問題点を解決し,計算量も抑えている.