深層学習

深さ方向と点ごとの畳み込み

畳み込みをチャネルごとの空間処理と1×1のチャネル混合に分け、計算量とモデルサイズを大きく削減する構成です。

  • B|標準
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

分離畳み込みは、標準畳み込みが一度に行う「空間方向の特徴抽出」と「チャネル方向の混合」を2段に分ける方法です。depthwise convolution(深さ方向)は入力チャネルごとに空間フィルタを1枚ずつ適用し、pointwise convolution(点ごと)は1×1畳み込みでチャネルを混ぜます。

画像の各色を別々に調べ、その後に各結果を1画素ずつ混ぜる分業です。標準畳み込みより軽い一方、同じ計算ではありません。

なぜ必要か

標準畳み込みでは、K×KK \times K のカーネルが入力チャネル MM 全てを見て、出力チャネル NN を作ります。入出力チャネルの積が計算量に効くため、モバイルでは遅延とサイズが制約になります。

分離すると、depthwise側はチャネルごとの空間処理、pointwise側は1×1でのチャネル混合を担当します。計算量とパラメータ数を削れる一方、標準畳み込みと同じ結合ではありません。MobileNetは幅や入力解像度の係数で遅延と精度も調整します。

観点標準畳み込み分離畳み込み
空間処理チャネル混合と同時depthwiseが担当
チャネル混合K×KK×Kカーネル内で同時pointwiseが担当
主な狙い結合を保った表現計算量・サイズの削減

仕組み

入力を F∈RH×W×M\mathbf{F} \in \mathbb{R}^{H \times W \times M}、出力を G∈RH×W×N\mathbf{G} \in \mathbb{R}^{H \times W \times N}、空間カーネルの幅を KK とします。標準畳み込みの計算量は

Cstd=K2MNHWC_{\mathrm{std}} = K^2 M N H W

です。M,NM,Nは入力・出力チャネル数、H,WH,Wは空間サイズです。

depthwiseでは入力チャネルmmごとにK×KK \times Kのフィルタを1枚だけ適用し、計算量は K2MHWK^2 M H W です。pointwiseが各画素位置でMMチャネルをNNチャネルへ混ぜ、計算量は MNHWM N H W です。

Csep=K2MHW+MNHW=MHW(K2+N)C_{\mathrm{sep}} = K^2 M H W + M N H W = M H W(K^2+N)

したがって標準畳み込みに対する割合は

CsepCstd=1N+1K2\frac{C_{\mathrm{sep}}}{C_{\mathrm{std}}} = \frac{1}{N} + \frac{1}{K^2}

です。K=3K=3ならNNが大きい場合に1/91/9へ近づきますが、実際の割合はNNでも変わります。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
2段の役割を問うdepthwiseはチャネルごとの空間処理、pointwiseは1×1のチャネル混合depthwiseだけでチャネルを混ぜる
計算量の比を問う1/N+1/K21/N+1/K^2 として、M,H,WM,H,Wが約分される常に1/K21/K^2と断定する
軽量モデルとの関係MobileNetは分離畳み込みを使い、遅延と精度を係数で調整する計算量削減が精度無償で得られる
用語を切り分ける深さ方向はチャネル方向、pointwiseは空間1×1pointwiseを空間方向の分離と呼ぶ

実装で確かめる

NumPyで標準畳み込みと分離畳み込みの乗算回数を比較します。

K, M, N, H, W = 3, 32, 64, 28, 28
standard = K**2 * M * N * H * W
depthwise = K**2 * M * H * W
pointwise = M * N * H * W
separable = depthwise + pointwise
print(standard, separable, separable / standard)

出力は 45158400 5050368 0.1111111111111111 です。N=64N=64では1/64+1/91/64+1/9となります。レイテンシは実装にも左右されます。

取り違えやすいもの

用語分離畳み込みとの切り分け
標準畳み込み空間処理とチャネル混合を1つのK×KK×Kカーネルで同時に行う
depthwise convolution入力チャネルごとに独立した空間フィルタを適用する前半
pointwise convolution1×1畳み込みでチャネルを別の数へ射影する後半
spatially separable convolutionK×KK×KをK×1K×1と1×K1×Kへ分ける別の分解。depthwiseとは軸が違う
Xception分離畳み込みを積み重ねる設計を提案し、Inceptionとの関係と実験を論じたモデル

想起チェック

depthwiseとpointwiseは、それぞれ何を担当するか

depthwiseはチャネルごとの空間処理、pointwiseは1×1によるチャネル混合です。

標準畳み込みに対する計算量の割合は何か

Csep/Cstd=1/N+1/K2C_{\mathrm{sep}}/C_{\mathrm{std}}=1/N+1/K^2 です。NNにも依存します。

分離畳み込みの軽量化で何を交換しているか

計算量とサイズを抑える代わりに、標準畳み込みと同じ結合ではなくなります。MobileNetは係数で遅延と精度を調整します。

出典