畳み込み層(Convolution Layer)とその発展型

1. 畳み込み層(Convolution Layer) とは [概要]

畳み込み層(Convolution Layer)とは,CNN(畳み込みニューラルネットワーク)などのディープニューラルネットワークにおいて,学習済みのフィルタバンクをもちいて畳み込みを行うである.入力特徴マップに対して,局所フィルタに近い特徴が出ている領域を抽出したのち,全フィルタの畳み込み結果を1つに集約したものを畳込み層は出力する.古典的な畳み込みにおいては,カーネルは手作業で設計するものであった.それに対して「フィルタをデータから学習するようにした版」が畳み込み層だと考えると理解しやすい.

信号処理と同様に,畳み込み層には,入出力信号の次元数(1D, 2D, 3D信号)に合わせて,以下の対応する次元の畳み込み層が用いられる:

次元数対象信号データ
1D 畳み込み層波形信号,系列データ(文,トークン列など)
2D 畳み込み層RGB 画像,デプス画像,スペクトル画像.
3D 畳み込み層3D点群,動画中のNフレーム画像をまとめた3Dテンソル.

これらのうち,本記事では2D畳み込み層にのみフォーカスして整理する.一方で,1D・3Dの畳み込み層については割愛する(別記事として,のちに書きたい).

2D畳み込み層では,入力の各チャンネル画像に対して,フィルタバンク(フィルタK個)による空間フィルタリングを行い,学習済みパターンが強く応答した箇所だけを,終盤の層へ繋げて残していく.CNNなどでは,この畳み込み層で「多段的なフィルタリング」を実施する.

1.1 記事の構成

この記事では,2D畳み込み層について,基本型(2節)と発展型(3,4節)に分類して,それぞれを紹介する.

まず2D畳み込み層の[基本型]について,「空間フィルタリングのループ操作版」とみなした説明を行うことで,簡潔にその処理手順を紹介する(2節).次に,物体認識CNN向け発展型(3節)と,画像Encoder-Decoder向け発展型(4節)について紹介する.この記事は,2017年ごろまでの,標準的な2D畳み込み層について整理するゆえ,それ以降の発展型(変形可能畳み込み層など)については,5節で概要だけ述べるのに留める.

2D畳み込み層(2節)は,CNNの一番根幹をなす部品である.したがって,現代の画像映像の認識・生成・変換において最も重要な処理であるので,この記事で紹介するような基本的事項には,習熟しておきたい (※ 1)

(※ 1 ) 2020年以降,Transformerを用いた(大規模)画像認識モデルの,ViT・NLP-Mixerも登場し,CNNや畳み込み層を使用しない画像認識ネットワークも,(研究では)多くなってきている.とはいえ,実応用の用途ではCNNの方が知見もたまっていて,まだまだ現役であるゆえ,2D畳み込み層は引き続き重要である.ビジョン向けのTransformerや,ViTについて日本語で知りたい方は,牛久さんのCV最前線 Winter 2021の解説や,SSII2022チュートリアルが参考になる.

1.2 畳み込み層(2D)の役割

最初に2D畳み込み層の概要を紹介する.LeNetで提案されたのち,AlexNetの成功をきっかけに,広く使われるようになったのが畳み込みニューラルネットワーク(CNN)である.CNN中で使われる2D畳み込み層は,ニューラルネットワーク内で,伝統的な空間フィルタリングとおなじ操作を行う.

i番目の各2D畳み込み層は,前の(i-1)層から出力された特徴マップの画像群Cチャンネル分を入力とする.そして,入力特徴マップの各チャンネル画像1枚に対して,「K個の2Dカーネル(=フィルタバンク)」により,画像フィルタリング(畳み込み)を,それぞれのk番目カーネルで独立に,合計K回行う(これは,各チャンネルcの入力画像に,テンプレートマッチングを行うことに相当している).

その後,K枚出力画像の平均をそのチャンネルcの画像の集約結果とし,これを入力Cチャンネル画像に対してそれぞれC回行う.よって,出力特徴マップには,「カーネルのパターンに類似した部分のみに,強い応答が出た特徴マップ群の平均集約結果」をC枚得る.

1.2.1 古典的な空間畳み込みとの違い

伝統的な画像フィルタリングによる画像の畳み込みとの違いは,各畳み込み層のフィルタ(=カーネル)が学習可能な点である.例えば,ImageNetをもちいて物体認識CNNスクラッチから学習すると,物体クラス識別性能が優れたフィルタ群を,各畳み込み層に学習することになる.

そしてCNNでは,階層的な画像カーネル群を,各2D畳み込み層で学習する.プーリング層を使用するごとに,特徴マップが空間的ダウンサイズされて集約されていく.つまり,各解像度の「畳み込み層 + ReLU」によって「画像解像度を変えながら,各スケールで画像フィルタリングを繰り返していく」という順伝搬を行うことで,最終層によい特徴マップが作られ,識別・予測を行うことができる

1.3 2D畳み込み層の発展の流れ

さて,2節以降の理解が深まるように「2D畳み込み層の発展の流れ(2~4節)の概要」について,先にこの1.3節で,その大まかな時系列的変遷をまとめて見ておきたい.

  • AlexNet登場(2012年)で,本格的な深層学習ブームに入りはじめた当初は,2D畳み込み層がImageNet向けの物体認識用のCNNバックボーンにおいて使用されはじめる(2節).
  • 次に,VGGNet, InceptionNetの提案時期 (2014頃) 以降に,基本型(2節)を発展させたものが,物体認識向けに提案されはいめ,性能・計算効率を向上させていく(3節).
  • また,画像Encoder-Decoder用途でも,2D畳み込み層が使用され・発展していく(4節).
  • [この記事の対象外の2017年頃以降]:
    • 系列対系列変換とアテンション機構のブームの影響により,画像認識やVision and Languageにおいて,画像の「空間アテンション」も発展していった .
    • また,アテンションがDNNの主要な道具になっていく中でも,アテンションと狙いが似た動的な畳み込みの路線も,よく研究されて広く使用されるようになる(※ 「変形可能畳み込み」など.5節).

※ 「フーリエ変換を用いた2D(巡回)畳み込み層による高速化」は,記事の対象外とする.

2. 2D畳み込み層の[基本型]

2.1節では,古典的な物体認識CNNにおける,2D畳み込み層の標準なパラメータ設定である「3 × 3畳み込み層,ゼロパディング,ストライド=1」での演算手順について,まずは詳細を理解しておきたい.

2.2節では,その基本型が,初期の物体認識CNNでどう発展して標準的なハイパーパラメータに到達したかの流れを紹介する.

2.1 2D畳み込み層 [基本型]の詳細

2.1.1 標準的なパラメータ値

直列構造のCNN(VGGNetResNet)では,各2D畳み込み層を「空間サイズ 3 x 3 のカーネル,ゼロパディング(2.2.2節),ストライド幅=1」に設定して畳込みを行うのが標準的である(※ このパラメータ設定が定番になった経緯は,2.2節で整理).

この設定だと,入出力両方とも画像が [W × H] の同サイズになり,畳み込み層を通過しても,空間サイズの低下が起きない.よって,畳込みではダウンサンプリングは行わず,CNNではプーリング層のみが,特徴マップの空間方向ダウンサンプリングを担当することになる.

また,後続にDecoderも追加して「画像Encoder-Decoder」を構成する場合は,Decoderでのアップサンプリングには転置畳み込み(4.1節)や膨張畳み込み(4.2節)などを用いる.

2.1.2 カーネルと入出力サイズ

畳み込み層(Convolution Layer)の概要
図1. 畳み込み層(Convolution Layer)の概要

2D畳み込み層(図1)では,K個のカーネルに対して,並列に畳み込み処理を行う.各カーネルはC枚から構成されるので,それら異なるカーネル群による各空間フィルタリング結果をまとめることで,(カーネルサイズと同じ)Kチャンネルの特徴マップをその層は最後に出力する.

畳み込み層処理の詳細を,次節(2.1.3)で見ていく前に,まずここでは入出力とカーネルの「サイズ」関係について,以下の表で確認しておきたい:

画像変数 × 個数画像サイズ全体のサイズ
入力特徴マップ$X^{c}\times C$$(w \times h)$$(w \times h) \times C$
カーネル$[W_k^{c} \times C]$ × K個$(3 \times 3)$$(3 \times 3 \times C) \times K$
出力特徴マップ$Z = Z_{k}(=\bar{U}_k) \times K$ $(w \times h)$$(w \times h) \times K$
表1 2D畳み込み層のカーネルと,入出力のサイズ

まずおさえておきたい点は,「入力特徴マップ(画像群)と各カーネルは,両方ともC枚の画像で構成される」点である.たとえば,ある2D畳み込み層が,入力がC = 4チャンネル,畳み込むカーネルの数がK = 8個である場合,出力はK = 8チャンネルの特徴マップとなる (図1).

また,$\bar{U}_k$は,C枚の各畳み込み結果(中間出力)$U_k^1, U_k^2, \ldots,U_k^C$を,画素ごとの和で合成した,カーネル単位の畳み込み結果の和である.次節で,図2-aと式(2-2)で紹介する.和であり,平均ではないが,「画素ごとの和」であることをわかりやすくするために,バーを上につけて$\bar{U}_k$とした.

学習時には,各層のカーネルK枚 $W_k^{c}$を,SGDで一括に学習する.

2.1.3 演算内容

2D畳み込み層(convolution layer)の処理の詳細
図2. 2D畳み込み層の処理の詳細.
(a) 各カーネルKによる処理 (for C ループ) (b) 全体の処理 (for K ループ)

ここでは,2D畳み込み層の処理をより詳しく分解して見ていく (※ 簡単のため,バイアス項は全て省略する).

2D畳み込み層の処理は,以下の2重ループによる疑似コード的処理で表わすことができる:

  • [for k = 1,…, K] $k$個目のカーネルによる処理:
    • [for c = 1, …, C] 入力$X$とカーネル$W_k$を,チャンネル$c$同士で畳み込み:
    • Cチャンネル分の畳み込み結果が合成され$Z^k$が完成.
  • 出力:「$Z^k(i,j)$× K枚」

深層学習[改訂2版]の 5.3節 図5.6 $u_{i,j,k},z_{i,j,k}$ の表記と見くらべやすいように,中間出力をU, 出力をZとした.

(1)内側 の[for c]ループ.

内側の [for c] ループ内では(図1-a),入力の各チャンネル$c$に対して,1つのカーネルの各カーネル画像$W_c$との2D畳み込みを$C$回行う.そして,それらの畳込み結果画像 $C$個を,画素ごとに和を計算して1つに合成する:

\begin{equation}\bar{U}^k (i,j)=\sum_c^C (X^c * W_k^c) \tag{2.1}\end{equation}

(2)外側の [for K]ループ

(1)の処理(図1-a)を外側 [for k]ループで全カーネルについて行うのが,全体の処理である (図1-b).(2.1)式の処理を,K個のカーネルだけ並列に実施する.そして,それらの結果画像Kチャンネル枚を,チャンネル方向に並べて最終出力特徴マップ$Z$をつくる:

\[
Z^k = \bar{U}^k \tag{2.2}
\]

以上の2ループが,2D畳み込み層の処理の全容である.

2.1.4「相互相関」を代わりに使用

主要なDeep Learning系のフレームワークでは,(2.1)式の畳み込みの代わりに,相互相関を用いて実装されるのが標準的である:

\begin{equation}\bar{U}^k(i,j) = \sum_c^C \left(X^c \otimes W_k^c \right)\tag{2.3}\end{equation}

実装上の有利性などから,CNNでは畳み込みの部分を,代わりに相互相関で実装することが標準的である(詳しくは別途Q&A記事に書くかも).

2.2 「CNNの進展」に伴う発展

2.1節で見た「3 × 3 畳み込み,ゼロパディング」の標準的パラメータ設定にたどり着くまでの経緯を,2.2節ではみておきたい.

2.2.1 最初のAlexNetスタイル

AlexNet (2011) は,畳み込み層のカーネルサイズが「[11 × 11] (Conv1) → [5 × 5] (Conv2),[3 × 3] (Conv3以降)」の設計であった.しかし,最初の設計でナイーヴであり,学習の収束も不安定であったので,業界にはAlexNetの設計が定着しなかった.

2.2.2 空間サイズが [3 × 3] に.

2014年,VGGNetInecptionNetが登場し,画像認識CNNを「20層程度の深さ」まで,初めて学習できるようになった.特に,VGGNetでは,それまで使用されていた[5 × 5] 以上のサイズの畳み込みの使用はやめ,代わりに [3 x 3] 畳み込み層を多層化することで,受容野の広さを確保することになる(3.2.1節).

これにより,特にVGGNetのような直列式設計CNNでは,[3 × 3] 畳み込み層のみを用いる設計が,以後の定番となる (VGGNetの記事の3.1節も参照.ただし2020年代以降は,大きなカーネルを用いる路線に回帰しつつもある).

同じく,直列設計で極端に総数を増やしたResNetでも,畳み込み層のカーネルサイズは [3 × 3] である.一方で,並列ブロック設計InceptionNet v1, v3などでは,グループ化畳み込み層や,1 × 1 畳み込み層(3.1節)も使用する.

VGGNetResNetは,物体検出セマンティックセグメンテーションなどの「物体認識以外のタスク」でも使用され,それらのタスク向けのCNNでも,[3 x 3] が基本となった

InceptionNet v1 以降,物体認識CNNの終盤層に,全結合層の代わりに [7 × 7] の グローバル平均プーリング が使われ始めたのも,同じ時期である.

3. 発展型1:画像認識CNN向け

3節では,「発展的な2D畳み込み層」について紹介する.

3.1 1 × 1 畳み込み

1 x 1 畳み込み層 (1 x 1 Convolution)
図3. 1 x 1 畳み込み層

2.1節の基本型と同じ定式化でありながら,そのうち空間サイズが [1 x 1]にの場合だけを,1 x 1 畳み込みと,通常の畳込み層とは区別して呼ぶ.分離可能畳み込み層(3.2節)や,SE-Netで新潮流となった「畳み込み層カーネルの分離」の文脈では,点単位畳み込み層(point-wise convolution)とも呼ばれる.

シンプルな話ながら,深層学習流行初期には,誰も思いつかなかったのもあり「1 x 1 畳み込み層」と別途名前をつけて区別することとなった.「1.画素単位の識別器」「2.チャンネル方向の次元削減」の2つの用途で用いられる(詳しくは子記事を参照).

3.2 分離可能畳み込み

分離可能畳み込み層(separable convolutional layer)は,効率的な設計のCNNバックボーンを実現するために,2D畳み込み層カーネルを複数に分離する.基本形(2節)の演算を分離してフィルタリング計算を軽量化する路線として,以下の3つのカテゴリーに分類し,紹介したい:

  • (3.2.1節) 空間方向で,2つに分離
  • (3.2.2節)「空間カーネル × チャンネル方向カーネル」に分離
  • (3.2.3節) チャンネル方向に,K個のグループへ分離

いずれも,画像処理の「分離可能フィルタ(separable filter) (Wikipedia)」のCNN版であるとみなせる (特に3.2.1).よって,名前も「~ separable ~」と,命名されている.

3.2.1 空間方向の分離可能畳み込み

2.2.2 節でも述べたが,VGGNetで [5 x 5]カーネルの畳み込み1層を,[3 x 3]カーネル2層へ分離したのが,「空間方向の分離畳み込み」のさきがけである.

InceptionNet v3, v4などでは,[3 x 3] x C の畳み込み層を,[3 x 1] x C (横長) [1 x 3] x C (縦長)の X,Y,2方向の1D畳み込み層に分離すことで,全体のパラメータ数削減を達成している (※ ただし,この 「縦 × 横 2つに分離する路線」は,いまひとつ性能が向上せず,その後あまり応用されていない).

3.2.2 デプス単位分離可能畳み込み

深さ単位分離可能畳み込み (Depthwise Separable Convolution)
図4. 深さ単位分離可能畳み込み (Depthwise Separable Convolution)

Xception では,デプス単位分離可能畳み込み(Depthwise Separable Convolution)を,畳み込み層として用いることが提案された.これは,元の2D畳み込み層(全体では3D演算)を,「デプス単位畳み込み(2D)」と「点単位畳み込み(1D)」の2つに分離した処理に替えることにより,パラメータ数も演算量も少なくする「軽量ネットワーク化」を目的とした提案であった.

MobileNetでも使用され,パラメータ数を9分の1程度に落としながらも,物体認識性能を同等レベルに保持することに成功した.これは,スマートフォンや組み込みデバイス上でもCNNを活用できる可能性を初めて示し,軽量ネットワーク化の路線にパラダイムシフトを起こし,これ以後,軽量化路線の研究が大量に発生することになった.

3.2.3 グループ化畳み込み層

グループ化畳み込み層(Grouped Convolution Layer )
図5. グループ化畳み込み層(Grouped Convolution Layer )

グループ化畳み込み層(Grouped Convolution Layer)は,分割した各グループ内のチャンネル内でのみ,それぞれ異なるカーネルで畳み込みを並列に行う層である.計算速度向上およびワイド化による表現力向上が狙える.

グループ化畳み込み層は,入力CチャンネルをK個のサブグループに分割し,C/Kチャンネルだけに対して,畳み込みを(並行に)行う.3.2.2節の「細かな各チャンネルごとへの処理に分離」と比べると,中程度のチャンネルグループごとへの処理に分離」するものだと考えると,対比して理解しておきやすい.

ResNeXtにおいて「残差ブロックを効率的にワイド化する目的」で使用されたことで,グループ化畳み込み層の本格的活用が始まった.また,軽量CNN路線のShuffleNet [Zhang et al., 2017]でも用いられた.

4. 発展型2:画像Encoder-Decoder向け

2, 3節は画像認識向けCNN向けの,2D畳込み層の話であった.4節では,入力出力も同じ画像サイズの,画像間Encoder-Decoder向けに登場した,転置畳み込み(4.1節)と,膨張畳み込み(4.2節)について紹介する.

4.1 転置畳み込み層

転置畳み込み(Transposed Convolution, Deconvolution)
図6. 転置畳み込み層(Transposed Convolution Layer )

転置畳み込み層(Transposed Convolution Layer)は,(ストライドありの)逆畳み込み操作により,効率的なアップサンプリングを実施する層である.画像生成モデルのDecoderや,画像変換向けEncoder-DecoderのDecoder側で,アップサンプリング役に用いられる.

従来の生成Decoderではバイリニア線形補間でのアップサンプリングが行われていたが,これは画素ごとに補間値を計算するゆえ計算コストが高い難点があった.それが,学習済みの転置畳み込みだと,計算負荷の少ない畳み込み計算のよってアップサンプリングを行える利点がある.

FCN (2014)の提案により,転置畳み込みは当初セマンティックセグメンテーション向けに提案され,画像変換Encoder-Decoder構造で解く問題全般で,転置畳み込みがよく用いられることになった(画像対画像変換や人物姿勢推定など).また当時同時研究されていた画像の深層生成モデル(DC-GANなど)でも,転置畳み込みをアップサンプリング目的で使用するのが普通になっていった.

4.2 膨張畳み込み層

子記事:膨張畳み込み(Dilated Convolution)

膨張畳み込み層(Dilated Convolution Layer)
図7. 膨張畳み込み層(Dilated Convolution Layer)

膨張畳み込み層は,カーネルを畳み込む中心位置を膨張させる形式の, 2D畳み込み層である.畳み込む空間範囲が広くなるので,効率的に少ない層数だけで,広範囲コンテキストを畳み込むことが可能になるので,それが有利に働く密な推定タスクでよく用いられる.DilatedNet [Yu et al., 2016] では,膨張畳み込み層がセマンティックセグメンテーション目的で提案された.その同時研究であるDeepLab v1でも,膨張畳み込み層が提案された.また WaveNet [Oord et al., 2016] でも,1D膨張畳み込み層が用いられ,音響系列データ界隈の変換・生成問題(ボコーダやTTSなど)においても,使用されていく.

(膨張)畳み込み層側でもコンテキスト拡大はできるのだが,PSPNetで提案されたピラミッド式のグローバル平均プーリングのように,「プーリング層側でコンテキスト拡大を担当する」ことも可能である.例えば DeepLab v3 [Chen et al., 2017]では,空間ピラミッドプーリングに膨張操作を応用した「Atrous Spatial Pyramid Pooling(ASPP)」が提案された.

5. まとめ

まず基本の2D畳み込み層(2章)について,畳み込みとチャンネルの2重ループという説明方法によってまとめた.3章, 4章では,2017年あたりまでの2D畳み込み層発展型を紹介した.

5.1 2017以降の発展

2017年後半以降,CV業界界隈では,次のような畳み込み技術が新たに研究されている:

  • 変形可能畳み込み(Deformable Convolution):学習時に,カーネルがアクセスする画素位置もパラメータとして学習する.空間アテンションと,こちらのどちらを使うか・双方使うかで迷う技術である (※ かなり強力な技術).
  • 動画認識を効率化するための動的畳み込み(Dynamic Convolution):シーケンス(時刻)が進むに従って,適応的に畳み込む箇所を変化させる(Adaptiveともよく言う).3D畳み込みの計算コストが高くてつらい動画認識系において適応的な畳込みがよく研究されている.
  • 点群向け畳み込み層:3D点群を整理して保持しておく近傍探索用構造や,点群のサーフェス情報・微分幾何情報を,Encodeして予測・識別に用いたい.そこで,画像向けとは異なる,それらを入力とした特殊な畳み込み層が研究されている.

2017, 2018年以降は,コンピュータビジョンでも,Vision and Languageのようなマルチモーダル認識でも,各種のアテンションが隆盛である.それと並行して,畳み込み層でも同じ目的意識で(=どの特徴にだけフォーカスを定めるか),畳み込み層の発展型が提案され続けている.一方で,2019以降はTransformerが大流行しているので,自己アテンションやマルチヘッドアテンション技術がかなり優勢ではある.

関連書籍

References

  • [Chen et al., 2017] Chen, L.C., Papandreou, G., Schroff, F., Adam, H.: Rethinking atrous convolution for semantic image segmentation. arXiv:1706.05587 (2017)
  • [Lin et al., 2013] Min Lin, Qiang Chen, and Shuicheng Yan. 2013. Network in Network. arXiv preprint arXiv:1312.4400 (2013).
  • [Khan et al., 2020] Khan, A., Sohail, A., Zahoora, U., & Qureshi, A. S. (2020). A survey of the recent architectures of deep convolutional neural networks. Artificial intelligence review, 53(8), 5455-5516.
  • [Oord et al., 2016] Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, and Koray Kavukcuoglu, “Wavenet: A generative model for raw audio,” arXiv preprint arXiv:1609.03499, 2016.
  • [Yu et al., 2015] F. Yu and V. Koltun. Multi-scale context aggregation by dilated convolutions. In ICLR, 2016.
  • [Zhang et al., 2017] Xiangyu Zhang, Xinyu Zhou, Mengxiao Lin, and Jian Sun. Shufflenet: An extremely efficient convolutional neural network for mobile devices. CoRR, abs/1707.01083, 2017.

参照外部リンク