チャンネルアテンションおよびスキューズ・アンド・エキサイテーションネットワーク(SENet)
コンピュータビジョンにおけるアテンションメカニズムの初期の頃、CVPR 2018(およびTPAMI)で発表された論文、Squeeze and Excitation Networks は、独自のチャネルアテンションメカニズムを導入しました。このシンプルでありながら効率的なアドオンモジュールは、パフォーマンスの向上を得るために任意のベースラインアーキテクチャに追加することができ、計算オーバーヘッドはほとんど無視できます。
この記事では、Squeeze-and-Excitationネットワークについて4つの部分に分けて説明します。最初に、現代の写真技法のいくつかの側面を訪れることで、チャネルアテンションがなぜ重要であるかについての直感を理解します。次に、Squeeze-and-Excitation(SE)ブロックにおけるチャネルアテンションの計算に関与する方法論に進みます。その後、標準的なアーキテクチャにおけるSqueeze-and-Excitation(SE)ブロックの影響を解剖し、さまざまなコンピュータビジョンタスクで評価します。最後に、提案された方法の特定の欠点に関する論文の批評で締めくくります。
目次
- 現代写真におけるフレーム選択
- 畳み込みニューラルネットワークにおけるチャネルアテンション
- スキューズアンドエキスパンダネットワーク
- コード
- EfficientNetsにおけるMBConv
- ベンチマーク
- 短所
- 参考文献
前提条件
- Python:ここでコードを実行するには、あなたのマシンにPythonがインストールされている必要があります。読者は続ける前に基本的なPythonコーディングの経験を持っているべきです。
- ディープラーニングの基礎:この記事では、ディープラーニング理論を適用するために重要な概念を扱っており、読者は関連する用語や基本的な理論に関していくつかの経験を持っていることが期待されています。
現代写真におけるフレーム選択
Pixel 2のフレームショット
現代の写真撮影は、最高のショットを捉えるための賢いメカニズムの進化を通じて成長してきましたが、静止写真のためのベストフレームショットを選択するという非常に微妙な技術はあまり注目されていません。これは特定のスマートフォンに共通している特徴です。
静止写真には多くの変数があります。同じ条件下で、同じ環境で被写体を撮影した二枚の写真は、一秒の間隔でも大きく異なることがあります。たとえば、二枚のうちの一枚では目が閉じているかもしれません。最良のショットを得るためには、写真を撮影する瞬間に複数のフレームをキャプチャする方がはるかに良いです。そうすることで、写真家はキャプチャしたすべてのフレームから最良のフレームを選択する選択肢を持つことができます。現在、これは自動化されたインテリジェントな方法で行われています。Google Pixelなどのスマートフォンは、一度の撮影で取得したすべての利用可能なフレームの中から最良のフレームを選択する能力を持っています。このインテリジェントなメカニズムは、照明、コントラスト、ぼかし、背景の歪みなどのさまざまな要因に条件付けられています。抽象的に言うと、このインテリジェントなメカニズムは、その写真の最も代表的な情報を含むフレームを選択しています。
現代の畳み込みニューラルネットワークアーキテクチャに関しては、フレームを畳み込み層によって計算されたテンソルのチャネルとして考えることができます。このテンソルは通常、(B, C, H, W) の次元で表され、B はバッチサイズ、C はチャネル、H と W は特徴マップの空間次元を表します (H は高さ、W は幅を表します)。チャネルは、畳み込みフィルタが入力から異なる特徴を導出した結果です。ただし、チャネルが同じ代表的な重要性を持つわけではありません。いくつかのチャネルが他のチャネルよりも重要である可能性があるため、次の層に伝播する前に、チャネルの重要性に基づいてチャネルに重みを適用することは理にかなっています。
これをチャンネルアテンションの重要性に関する基礎的な理解として使用し、次のセクションで詳しく説明します。
チャネル注意
前のセクションで説明した直感に基づいて、深層畳み込みニューラルネットワークアーキテクチャの一般化能力を向上させるために、チャネルアテンションが重要な要素である理由を深く掘り下げていきましょう。
要約すると、畳み込みニューラルネットワークには、2つの主要なコンポーネントがあります:
- 入力テンソル(通常は4次元テンソル)で、次元は(B、C、H、W)で表されます。
- その層の重みを含む学習可能な畳み込みフィルタ。
畳み込みフィルターは、それらのフィルター内の学習された重みに基づいて特徴マップを構築する役割を担っています。一部のフィルターはエッジを学習し、他のフィルターはテクスチャを学習し、集まって入力テンソルによって埋め込まれた画像内のターゲットクラス情報の異なる特徴表現を学習します。したがって、チャンネルの数は、入力の異なる特徴マップを学習する畳み込みフィルターの数を表します。写真におけるフレーム選択の以前の理解から、これらの特徴マップも重要性の異なる大きさを持っています。 これは、いくつかの特徴マップが他のものよりも重要であることを意味しています。例えば、エッジ情報を含む特徴マップは、背景のテクスチャの移行を学習する別の特徴マップと比較して、学習にとってより重要で決定的かもしれません。したがって、基本的なレベルでは、「より重要な」特徴マップに対して、対応する特徴マップよりも高い重要度を与えたくなります。
例のフィーチャーマップ
これはチャンネルの注意の基盤です。私たちはこの「注意」をより重要なチャンネルに集中させたいと考えています。つまり、特定のチャンネルに対して他のチャンネルよりも高い重要性を与えるということです。これを行う最も簡単な方法は、より重要なチャンネルのスケールを高い値で調整することです。これはまさにSqueeze-Excitation Networksが提案していることです。
圧縮および励起ネットワーク
2018年に、HuらはCVPR 2018で圧縮と励起ネットワークというタイトルの論文を発表し、TPAMIにジャーナル版も発表しました。注目メカニズムの分野で最も影響力のある作品の一つと称賛され、この論文は1000回以上引用されています。この論文が提案する内容を見てみましょう。
スクイーズ・エキサイテーションモジュール
この論文では、上の図に示された3つのコンポーネントから構成される、簡単にプラグインできる新しいモジュール「Squeeze-and-Exciteブロック」(SEブロックと略称)を提案します。
- 絞りモジュール
- 励起モジュール
- スケールモジュール
これらのモジュールを詳細に見ていき、チャネルアテンションの文脈においてそれらがなぜ重要であるかを理解しましょう。
絞りモジュール
最適なチャネルアテンションを得るためには、特徴マップのスケーリングがそれ自体に適応する必要があります。要約すると、特徴マップセットは本質的には畳み込み層からの出力テンソル(通常は次元がの4-Dテンソル)です。ここで、頭文字はバッチサイズ、チャネル、高さ、幅を示します。簡単のために、これを形状
これは、スクイーズモジュールの動機となります。特徴マップの空間次元を単一の値に減らすために使用できる多くの特徴記述子が存在しますが、畳み込みニューラルネットワークにおける空間サイズを削減するための一般的な方法はプーリングです。プーリングには非常に人気のある2つの方法があります:平均プーリングと最大プーリングです。前者は定義されたウィンドウ内の平均ピクセル値を計算し、後者は同じ定義されたウィンドウ内の最大ピクセル値を取得します。どちらもそれぞれの利点と欠点があります。最大プーリングは最も活性化されたピクセルを保持しますが、非常にノイジーになる可能性があり、隣接するピクセルを考慮しません。一方、平均プーリングは情報を保持しませんが、そのウィンドウ内のすべてのピクセルの滑らかな平均を構築します。
著者たちは、各ディスクリプタの性能を調査するためにアブレーションスタディを行いました。つまり、グローバル平均プール(GAP)とグローバル最大プール(GMP)についてであり、以下の表に示されています。
| 記述子 | トップ1エラー率 | トップ5エラーレート |
|---|---|---|
| GMP | 22.57 | 6.09 |
| ギャップ | 22.28 | 6.03 |
スqueezeモジュールは、2つの選択肢のうちスムーズな方を選び、グローバル平均プーリング(GAP)操作を使用します。これは、基本的に全てのピクセルの平均を取ることによって、全体の特徴マップを一つの値に縮小します。したがって、次元に関して言えば、入力テンソルが(C_×_H_×_W)である場合、GAPオペレーターを通過させた後に得られる出力テンソルの形状は(_C_×1×1)になり、事実上、長さCのベクトルであり、各特徴マップは一つの値に分解されます。
Squeeze演算子の重要性を確認するために、著者たちは次の表に示すように、SqueezeバリアントとNo-Squeezeバリアントを比較しました。注: No-Squeezeバリアントは、本質的に特徴マップを含むテンソルが単一のピクセルに減少しなかったことを意味し、Excitationモジュールは全体のテンソルに対して動作しました。
| バリアント | トップ1エラー率 | トップ5エラーレート | GFLOPs | パラメータ |
|---|---|---|---|---|
| バニラ ResNet-50 | 23.30 | 6.55 | 3.86 | 2560万 |
| NoSqueeze | 22.93 | 6.39 | 4.27 | 2810万 |
| SE | 22.28 | 6.03 | 3.87 | 2810万 |
励起モジュール
多層パーセプトロン(MLP)構造の例。
入力テンソルがかなり小さなサイズ(C×1×1)に分解されたので、モジュールの次の部分はこれらのチャネルの適応スケーリングウェイトを学習することです。Squeeze-and-ExcitationブロックのExcitationモジュールでは、著者はスケーリングウェイトをマッピングするために完全に接続された多層パーセプトロン(MLP)ボトルネック構造を選択しています。このMLPボトルネックは、同じ形状の入力層と出力層に加えて、単一の隠れ層を持っています。隠れ層は、入力空間をデフォルトで16に設定されたリダクション係数によって定義される小さな空間に縮小するためのリダクションブロックとして使用されます。その後、圧縮された空間は、入力テンソルとして元の次元に戻されます。より簡潔に言えば、MLPの各層における次元の変化は以下の3つのポイントによって定義できます。
- 入力は形状 (_C_×1×1) です。したがって、入力層には C ニューロンがあります。
- 隠れ層はこれを減少因子rで減少させるため、合計C/rのニューロン数になります。
- 最後に、出力は入力と同じ次元空間に戻され、合計でCニューロンに戻ります。
合計で、(_C_×1×1) テンソルを入力として与え、同じ形状の重み付きテンソル (_C_×1×1) を得ます。
著者たちは、以下の表に示すように、異なる縮小比(r)を使用してResNet-50アーキテクチャにおけるSEモジュールの性能に関する実験結果を提供しています。
| r | トップ1エラー率 | トップ5エラーレート | パラメータ |
|---|---|---|---|
| 2 | 22.29 | 6.00 | 4570万 |
| 4 | 22.25 | 6.09 | 3570万 |
| 8 | 2.26 | 5.99 | 3070万 |
| 16 | 22.28 | 6.03 | 2810万 |
| 32 | 22.72 | 6.20 | 26.9M |
| バニラ | 23.30 | 6.55 | 2560万 |
理想的には、情報の伝播を改善し、クロスチャネルインタラクション(CCI)を向上させるために、rは1に設定されるべきであり、これによりすべての層で同じ幅を持つ完全接続された正方形ネットワークを形成します。しかし、rを減少させることで得られる複雑性の増加と性能の改善との間にはトレードオフが存在します。したがって、上記の表に基づいて、著者たちは削減比率のデフォルト値として16を使用しています。これは、性能を向上させるためにさらに調整する余地のあるハイパーパラメータです。
スケールモジュール
エキサイテーションモジュールから得られた(_C_×1×1)「エキサイテッド」テンソルは、最初にシグモイド活性化層を通過し、値を0から1の範囲にスケールします。次に、その出力は単純なブロードキャスト要素ごとの乗算を介して入力に直接適用され、入力テンソルの各チャネル/フィーチャーマップがエキサイテーションモジュールのMLPからの対応する重みでスケールされます。
著者たちは、以下の表に示すように、励起演算子として使用されるさまざまな非線形活性化関数の効果に関するさらなるアブレーションスタディを実施しました。
| 活性化関数 | トップ1エラー率 | トップ5エラーレート |
|---|---|---|
| ReLU | 23.47 | 6.98 |
| タンハ | 23.00 | 6.38 |
| シグモイド | 22.28 | 6.03 |
結果に基づき、著者らはシグモイドが最も性能の良い活性化関数であると定め、それをスケールモジュールのデフォルトの興奮演算子として使用しています。
要約すると、Squeeze Excitation Block(SE Block)は、形状が(C×H×W)の入力テンソル
さて、問題はモジュールが「どこに接続されているのか」、例えば残差ネットワークの中でどこに接続されているのかということです。
アブレーション研究で探求されたSEブロック統合設計。
著者たちは、上の図に示されているように、SEブロックの異なる統合戦略を試しました。これには次のようなものが含まれます:
- 標準SE
- SE-PRE
- SE-POST
- SE-アイデンティティ
標準のSEブロックは、アーキテクチャの最終畳み込み層の直後、残差ネットワークのこの場合で、スキップ接続のマージの直前に適用されます。SE-PRE構成は、最初の畳み込み層の前にブロックの最初にSEブロックを配置することで構築され、SE-POSTはブロックの最後に配置することで逆のことを行いました(スキップ接続のマージの後)。最後に、SE-Identityブロックは、メインブロックに並行してスキップ接続ブランチ自体にSEモジュールを適用し、通常の残差として最終出力に追加されます。
著者たちは、次の2つの表に示された統合戦略に関する彼らの広範なアブレーション研究の結果を提供しました。
表1. ImageNet分類タスクにおけるResNet-50のエラー率に対する異なるSE統合戦略の効果
| 戦略 | トップ1エラー率 | トップ5エラーレート |
|---|---|---|
| SE | 22.28 | 6.03 |
| SE-PRE | 22.23 | 6.00 |
| SE-POST | 22.78 | 6.35 |
| SE-アイデンティティ | 22.20 | 6.15 |
表2. Residualブロック内の空間3x3畳み込み層の後にSEブロックを導入した効果
| デザイン | トップ1エラー率 | トップ5エラーレート | GFLOPs | パラメータ |
|---|---|---|---|---|
| SE | 22.28 | 6.03 | 3.87 | 2810万 |
| SE-3×3 | 22.48 | 6.02 | 3.86 | 2580万 |
表1からわかるように、SE-POSTを除くすべての構成は、類似した一貫したパフォーマンスを提供しました。表2で示されたように、著者は残差ブロック内の空間畳み込みの後にSEブロックを挿入する実験をさらに行いました。3×3の空間畳み込みはチャネル数が少ないため、パラメータとFLOPsのオーバーヘッドははるかに小さくなります。デフォルトのSE構成と比較して類似のパフォーマンスを提供できるものの、著者はどの構成が最も好ましいかについて決定的な声明を出さず、「SE」をデフォルトの統合構成として保持しました。
運の良いことに、著者たちはSEブロックを既存のアーキテクチャに統合する方法について質問に答えています。
SE-ResNetモジュール
残差ネットワークにおいて、Squeeze-Excitationブロックは最終畳み込み層の後、スキップ接続の残差を加える前のブロックに挿入されます。これの直感は、スキップ接続のブランチをできるだけクリーンに保ち、アイデンティティの学習を容易にすることです。
SE-インセプションモジュール
しかし、Inceptionネットワークでは、スキップ接続がないため、SEブロックは最終畳み込み層の後のすべてのInceptionブロックに挿入されます。
次の図では、著者たちは、各ブロックにSEモジュールを持つ修正されたResNet-50およびResNext-50アーキテクチャを示しています。
SEベースのアーキテクチャデザイン
著者たちは、ResNet-50の4つの異なるステージにおけるSEブロックの統合戦略を広範囲にわたり研究しました。結果は以下の表に示されています。
| ステージ | トップ1エラー率 | トップ5エラーレート | GFLOPs | パラメーター |
|---|---|---|---|---|
| ResNet-50 | 23.30 | 6.55 | 3.86 | 2560万 |
| SE ステージ 2 | 23.03 | 6.48 | 3.86 | 2560万 |
| SE ステージ3 | 23.04 | 6.32 | 3.86 | 2570万 |
| SE ステージ4 | 22.68 | 6.22 | 3.86 | 2640万 |
| SEすべて | 22.28 | 6.03 | 3.87 | 2810万 |
コード
論文に関連する公式コードリポジトリはここにあります。ただし、コードは現在あまり一般的ではないCaffeで構成されています。このモジュールのPyTorchとTensorFlowのバージョンを見てみましょう。
PyTorch
### Import necessary packages
from torch import nn
### Squeeze and Excitation Class definition
class SE(nn.Module):
def __init__(self, channel, reduction_ratio =16):
super(SE, self).__init__()
### Global Average Pooling
self.gap = nn.AdaptiveAvgPool2d(1)
### Fully Connected Multi-Layer Perceptron (FC-MLP)
self.mlp = nn.Sequential(
nn.Linear(channel, channel // reduction_ratio, bias=False),
nn.ReLU(inplace=True),
nn.Linear(channel // reduction_ratio, channel, bias=False),
nn.Sigmoid()
)
def forward(self, x):
b, c, _, _ = x.size()
y = self.gap(x).view(b, c)
y = self.mlp(y).view(b, c, 1, 1)
return x * y.expand_as(x)
TensorFlow
import tensorflow as tf
__all__ = [
'squeeze_and_excitation_block',
]
def squeeze_and_excitation_block(input_X, out_dim, reduction_ratio=16, layer_name='SE-block'):
"""Squeeze-and-Excitation (SE) Block
SE block to perform feature recalibration - a mechanism that allows
the network to perform feature recalibration, through which it can
learn to use global information to selectively emphasise informative
features and suppress less useful ones
"""
with tf.name_scope(layer_name):
# Squeeze: Global Information Embedding
squeeze = tf.nn.avg_pool(input_X, ksize=[1, *input_X.shape[1:3], 1], strides=[1, 1, 1, 1], padding='VALID', name='squeeze')
# Excitation: Adaptive Feature Recalibration
## Dense (Bottleneck) -> ReLU
with tf.variable_scope(layer_name+'-variables'):
excitation = tf.layers.dense(squeeze, units=out_dim/reduction_ratio, name='excitation-bottleneck')
excitation = tf.nn.relu(excitation, name='excitation-bottleneck-relu')
## Dense -> Sigmoid
with tf.variable_scope(layer_name+'-variables'):
excitation = tf.layers.dense(excitation, units=out_dim, name='excitation')
excitation = tf.nn.sigmoid(excitation, name='excitation-sigmoid')
# Scaling
scaler = tf.reshape(excitation, shape=[-1, 1, 1, out_dim], name='scaler')
return input_X * scaler
EfficientNetsにおけるMBConv
Squeeze-Excitationブロックを含む最も影響力のある作業のいくつかは、MobileNet v2とEfficient Netsのものであり、どちらもモバイル逆残差ブロック(MBConv)を使用しています。Efficient NetsにはSqueeze-Excitationブロックも追加されています。
効率的なネットワークにおけるMBConvブロック
MBConvでは、Squeeze-Excitationブロックは最終的な畳み込み層の前、ブロック内の空間畳み込みの後に配置されています。これにより、元々意図されていた付加的なものではなく、むしろ不可欠な部分となります。SE-Netの著者たちはアブレーションスタディを行い、この統合方法をテストしましたが、最終的な1×1畳み込みの後にSEブロックを追加するデフォルト設定を選択しました。Efficient Netsは、標準のImageNet-1kデータセットでの画像分類からMS-COCOデータセットでの物体検出に至るまで、多くのタスクで最先端(SOTA)と見なされています。これは、チャネルアテンションの重要性とSqueeze Excitationブロックの効率性を証明しています。
ベンチマーク
著者たちは、ImageNet、MS-COCO、Places-365などの競争的な標準データセットを用いて、画像分類、シーン分類、物体検出などの異なるタスクに関する広範な結果を提供しています。以下の表は、上記のタスクにおけるSEモジュールの効率性と利点を示しています:
CIFAR-10分類タスク
| 建築 | バニラ | SE-バリアント |
|---|---|---|
| ResNet-110 | 6.37 | 5.21 |
| ResNet-164 | 5.46 | 4.39 |
| WRN-16-8 | 4.27 | 3.88 |
| シェイクシェイク 26 2x96d + カットアウト | 2.56 | 2.12 |
ここでの比較に用いられる尺度は分類誤差です。著者たちは、SEモジュールを使用した際に得られる性能向上が、データ拡張のような異なる性能向上技術の使用と一貫しているかを確認するために、Shake-ShakeネットワークのCutoutという形のデータ拡張も追加しました。
CIFAR-100分類タスク
| 建築 | バニラ | SE-バリアント |
|---|---|---|
| ResNet-110 | 26.88 | 23.85 |
| ResNet-164 | 24.33 | 21.31 |
| WRN-16-8 | 20.43 | 19.14 |
| シェイクシェイク 26 2x96d + カットアウト | 15.85 | 15.41 |
ImageNet-1k分類タスク
標準的な深層アーキテクチャにおけるImageNet分類性能の比較
軽量モバイルアーキテクチャに関するImageNet分類性能比較
トレーニングダイナミクス
異なるネットワークのトレーニング曲線(Squeeze Excitation(SE)ありとなし)。
上記のグラフに示されているように、Squeeze-and-Excitationモジュールを備えたネットワークは、一貫して改善された曲線を示し、これによりより良い一般化と高いパフォーマンスにつながります。
Places-365 データセットにおけるシーン分類タスク
| 建築 | トップ1エラー率 | トップ5エラーレート |
|---|---|---|
| プレース-365-CNN | 41.07 | 11.48 |
| ResNet-152 | 41.15 | 11.61 |
| SE-ResNet-152 | 40.37 | 11.01 |
Faster RCNNを使用したMS-COCOデータセットでの物体検出タスク
| バックボーン | AP@IoU=0.5 | AP |
|---|---|---|
| ResNet-50 | 57.9 | 38.0 |
| SE-ResNet-50 | 61.0 | 40.4 |
| ResNet-101 | 60.1 | 39.9 |
| SE-ResNet-101 | 62.7 | 41.9 |
短所
その論文は独自に革新的であるとはいえ、構造におけるいくつかの欠陥や、いくつかの結論に至らないデザイン戦略が示されています。
- この方法は非常に高価であり、基本モデルに対してかなりのパラメーターとFLOPSを追加します。全体的に見れば、このオーバーヘッドは非常に最小限かもしれませんが、非常に低コストでチャンネルアテンションを提供することを目的とした新しいアプローチが多数あり、例えばECANet(CVPR 2020で発表)がSENetよりも優れた性能を示しています。
- チャンネルアテンションはパラメータとFLOPsのオーバーヘッドの観点から効率的に見えるものの、主要な欠点の一つは、重み付けされたチャンネルベクトルがブロードキャストされて入力テンソルに対して要素ごとに適用または乗算されるスケーリング操作です。この中間的なブロードキャストされたテンソルは入力と同じ次元空間にあるため、メモリの複雑性が大幅に増加します。これにより、トレーニングプロセスは遅くなり、より多くのメモリを消費することになります。
- 計算の複雑さを削減するために、ブロックの励振モジュールのMLPにはボトルネック構造が存在し、チャネル数は指定された削減比率によって減少します。これにより情報の損失が発生し、最適ではありません。
- SENetは専用のグローバル機能記述子(この場合はグローバル平均プーリング(GAP))を使用してチャンネルアテンションを提供することにのみ注力しているため、情報の損失があり、提供されるアテンションはポイントワイズです。これは、すべてのピクセルが特徴マップの空間領域に均一にマッピングされ、重要なピクセルやクラス決定的なピクセルと、背景の一部や有用な情報を含まないピクセルの区別がされないことを意味します。したがって、チャンネルアテンションと結びつけるための空間的アテンションの重要性/必要性が正当化されます。同様の主要な例の一つがCBAM(ECCV 2018で発表)です。
- SENetに関する結論が出ていないデザイン戦略があります。著者たちは、これは論文の範囲を超えており、最適な設定が何であるかを理解することはできないと述べています。これには、SEモジュールのための位置統合戦略やMLPで使用する削減比が含まれます。
参考文献
- 絞り出しと励起ネットワーク、TPAMI 2018年。
- CBAM: 畳み込みブロック注意モジュール, ECCV 2018.
- ECA-Net: 深層畳み込みニューラルネットワークのための効率的なチャネルアテンション, CVPR 2020.
- SENetのオリジナルリポジトリ。







