平均プーリング(Average Pooling)

記事を共有する:

1. 平均プーリング(Average Pooling) とは

平均プーリング(Average Pooling) とは,CNN(畳み込みニューラルネットワーク)で用いられる,中間層むけの局所プーリング層である.スライディングウィンドウ処理を行い,各位置のカーネル窓内で,平均値のみを残すダウンサンプリングを行う.

平均プーリングは,最大値プーリング(Max Pooling)とともに,CNNの最も基本的な「隠れ層向けのプーリング層」として用いられる(1.1節).

また,グローバル平均プーリング(Global Average Pooling)は,物体画像認識CNNの終盤層に用いられる,平均プーリングである(1.2節).

1.1 平均プーリングの定義

平均プーリング(average pooling)
図1. 平均プーリング(average pooling)

図1は,大きさ[2 x 2]のカーネルで,ストライド幅=2画素の,平均プーリングの例である(1.1.2節).(局所)平均プーリング層では,入力の特徴マップ上の各チャンネルk(の画像)において(図1-左),チャンネルごとに独立に,カーネル窓のスライディングウィンドウにより,局所ごとに平均値を出力する(図1-右).出力のチャンネルkの画像の位置(i,j)に対応する,カーネル$ \mathcal{R}_{(i,j)}$(=図1の黄,緑,赤,青の範囲)の中において,それぞれ平均値を出力する .

1.1.1 数式による定義

平均プーリングの演算を,数式でも定義しておく.

CNNにおいて,$l$層目の特徴マップのチャンネル画像(活性化出力)$Z(x,y)_k^{(l)}$ を,プーリング層によって,空間方向にダウンサンプリングされた$Z(i,j)_k^{(l+1)}$へと変換する.

平均プーリングの操作は,各カーネル位置(x,y)における「カーネル内平均の計算」として,以下のように表すことができる:

\[
Z(i,j)_k^{(l+1)} =\frac{1}{W_f,H_f}\sum_{(x,y) \in \mathcal{R}_{(i,j)}} Z(x,y)_k^{(l)} \tag{1.1}
\]

ここで,$(W_f,H_f)$は,それぞれプーリング層のカーネルサイズの幅と高さである.

1.1.2 標準的に使われるカーネルサイズとストライド

多くのCNNバックボーンでは,縦・横のストライド幅をともに2画素とし,カーネルサイズを [2 × 2]にして「重なり無しプーリング」を行うのが典型的である(図1).この場合,カーネルサイズは$(W_f,H_f )= (2,2)$であり,元の特徴マップを,1/2の空間サイズへダウンサンプリングできる.

1.2 グローバル平均プーリング(終盤層向け)

グローバル平均プーリング(Global Average Pooling,全体平均プーリング)は,1.1節で紹介した(局所)平均プーリングの全体版である.CNNの特徴マップ上で,全空間範囲において一括の全体平均を計算し,空間サイズを [1 x 1]に集約する.具体的には,終盤で空間サイズが [7 x 7] になった時点の層で,その次にグローバル平均プーリングを用いて,出力特徴マップの空間サイズを [1 x 1] に集約する.

Inception v3において,全結合層の代替の役割の層として用いられて以降,CNNバックボーンの終盤層に広く使用されるようになった.

また,DeepLabシリーズやPSPNetの提案以降,セマンティックセグメンテーションにおいても,空間ピラミッドプーリング型のグローバル平均プーリングがよく用いられる.

参考書籍