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

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

畳み込み層(Convolution Layer)とは,学習済みのK個の畳み込みカーネル群により,畳み込み操作を行い,その合成和を出力する,ディープニューラルネットワーク(特にCNN)向けの層である.

この用語記事では,畳み込み層のうち,画像認識向けの2D畳み込み層の紹介に注力する.まず2節では「2D畳み込み層基本型」を紹介する.その後,3,4節では,2世代に分けて発展型について列挙していき整理したい.2017年ごろまでの畳み込み層を紹介し,それ以降の発展は5節で概要だけ述べる.

一方,2D畳込み以外の, NLPや音響・音声処理等で用いる「1D畳み込み層」や,動画処理や点群処理等で用いる「3D畳み込み層」についてはこの記事では割愛し,別記事としてつくりたい.

CNNは,検出した小パターン・中パターン・大パターンの応答のみを,順に次の層へ残していくことで,予測対処の識別や点座標の予測を行う.そのCNN内での段階的な局所パターンフィルタリング・Suppressionにおいて,「2D畳み込み層による画像フィルタリング(前処理)」と「ReLU型の活性化関数(後処理)」の組み合わせが,主に用いられる (全体的な処理は,CNNの記事を参照).

1.1 記事の構成

2節以降では,以下の内容を各節で紹介する:

3節以降では「畳み込み層」の発展型 と,その登場経緯と関係性を述べることに注力するので,各発展型の詳細な説明は,各子記事を参照にして頂きたい

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

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

1.2 畳み込み層(2D)の発展の流れ

「2D畳み込み層の発展の流れ(2~4節)の概要」について,先にこの節で大まかな流れを見ておく.それにより2節以降の理解が深まるようにしておきたい.

まず2D畳み込み層は,ImageNet向けの物体認識認識用のCNNバックボーンにおいて使用され発展していく(2節).その後,VGGNet, InceptionNetの提案時期 (2014頃)以降に,基本型(2節)を発展させた発展型が物体認識向けに使用されはじめ(3節),性能と計算効率を,向上させていく.

また,物体認識以外の画像認識タスク向け用途でも,2D畳み込み層が発展していく(4節).FCNの登場以降,セマンティックセグメンテーション問題のFCN型のEncoder-Decoderにおいて,転置畳み込み(4.1)が用いられるようになる.並行して,深層生成モデルの登場で,画像生成ネットワークや画像対画像変換でもDecoderで用いられていく.また,膨張畳み込み層(4.2)も,それらの「密な推定」タスク全般で,よく使われるようになる.

[現状この記事の対象外の話]:2017年頃以降は,系列対系列変換とアテンション機構のブームの影響で,画像認識やVision and Languageにおいて,「画像の空間アテンション」が発展していった .アテンションがDNNの主要な道具になっていく中でも,アテンション同様に動的な畳み込みの路線も,研究されていく(※まとめの5節で少しだけ述べる).

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

2. 画像むけ2D畳み込み層の「基本型」

2D畳み込み (convolution) 層の概要
図1 2D畳み込み(convolution)層の概要

2.1節では,画像認識CNNでの標準的な2D畳み込み層の使われ方のパラメータ設定である「3 × 3畳み込み層,ゼロパディング,ストライド=1」の設定による,演算内容についてまずおさえたい.2.2節では,その基本型が,初期の物体認識CNNでどう発展して標準的なハイパーパラメータに到達したかの流れを紹介する.

2.1 「基本型」の Convolution 操作の詳細

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 カーネルと入出力のサイズ

図1のように,スタンダードな2D畳み込み層では,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枚」

(※ 深層学習(改訂版)の5.3節/図5.6での $u_{i,j,k},z_{i,j,k}$の表記と見くらべやすいように,中間出力をU, 出力をZとしている).

(1) 内側のループ:各畳み込みカーネルとの処理.

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

$$\bar{U}^k(i,j) = \sum_c^C \left(X^c * W_k^c \right)\tag{2.1}$$

(2)外側のループ: 全カーネルによる処理

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

\begin{equation}Z^k = \bar{U}^k \tag{2.2}\end{equation}

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

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

主要な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の発展に伴う基本型の発展

初期の物体認識向けCNNバックボーンが改良されていくにつれ,「3 × 3 畳み込み,ゼロパディング」のパラメータ設定での使用が,標準的になる.2.2節では,そこまでの経緯からみておきたい.

2.2.1 物体認識向け:LeNetスタイル2D畳み込み層

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

2.2.2 空間サイズが「3 × 3」となる (2014年頃).

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

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

VGGNetResNetは,物体検出セマンティックセグメンテーションなどの「物体認識以外のタスク」でも使用され,それらのタスク向けのCNNでも,3 x 3 が基本となった(※ InceptionNet v1 以降,物体認識CNNの終盤層に,7 × 7 の グローバル平均プーリング が使われ始めたのも,同時期である).

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

3節では,2.2節を基本型と見なした際に,それ以降に提案された「発展的な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 x 1 畳み込み層」と別途名前をつけて区別することとなった.「1.画素単位の識別器」「2.チャンネル方向の次元削減」の2つの用途で用いられる(詳しくは子記事を参照).

3.2 分離可能畳み込み層

分離可能畳み込み層(separable convolutional layer)は,効率的な設計のCNNバックボーンを実現するために,2D畳み込み層カーネルを,複数に分離(separate)する.

この3.2節では,基本形(2節)の演算を分離して,フィルタリング計算を軽くする路線として,以下の3つのカテゴリーに分類して紹介したい:

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

ここで紹介するものは,画像処理の分離可能フィルタ(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(縦長)の 2つの畳み込み層に分離する.これにより,等価な計算でありながらも,2つのカーネルに分けて畳み込むことで,全体のパラメータ数削減を達成している (※ ただし,この縦 × 横の2つに分離する路線は,いまひとつ性能が向上せず,その後はあまり応用されていない).

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

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

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

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

3.2.3 グループ化畳み込み層

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

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

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

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

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

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

4.1 転置畳み込み層

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

転置畳み込み層(Transposed Convolution)は,(ストライドありの)逆畳み込み操作により,「効率的なアップサンプリング」を行う層である.画像生成Decoderや,画像変換向けEncoder-Decoderデコーダにおいて,Decoder側においてプーリング層と逆の役割として用いられる.バイリニア線形補間でのアップサンプリングは,画素ごとに補間値を計算するゆえ計算コストが高いが,学習済みの転置畳み込みで大アップサンプリングすると,計算負荷の少ない畳み込み計算で,アップサンプリングを行える利点がある.

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

4.2 膨張畳み込み層

膨張畳み込み(Dilated Convolution))
図7 膨張畳み込み(Dilated Convolution)

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

膨張畳み込み(Dilated Convolution)は,カーネルを畳み込む中心位置を膨張させる,発展型の畳み込み層である.畳み込む空間範囲が広いので,普通の畳み込み層よりも,効率的に少ない層数だけで,広範囲コンテキストを畳み込むことが可能になる.各出力画素で,広範囲コンテキストが必要な,セマンティックセグメンテーションなどの画像Encoder-Decoderによる「密な推定」タスクでよく用いられる.

まずDilatedNet [Yu et al., 2016] ではは,膨張畳み込み層がセマンティックセグメンテーション目的で提案された.その同時研究であったDeepLab v1でも,膨張畳み込み層が提案された.DeepLabチームは「atrous convolution」とも読んでいたが,のちにビジョン業界としては「dilated convolution」の呼びかたに統一される.また,DeepMind の WaveNet [Oord et al., 2016] でも,1D膨張畳み込み層が用いられ,音響系列データ界隈の変換・生成問題(ボコーダやTTSなど)においても,膨張畳み込み層が使用されていく.

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

5. まとめ

この記事では,2章で,基本的な2D畳み込み層の処理についてまず確認したのち,3章,4章では,2017年あたりまでの2D畳み込み層発展型を紹介した.この記事では触れなかった,NLP・音声・音響などむけの1D畳み込みや,動画アクション・イベント認識や点群処理など向けの3D畳み込みについては,今後少しずつ記事を書いていきたい.

ちなみに,その後2017年後半以降,コンピュータビジョン業界界隈では,次のような畳込み技術が登場が新たに研究されている:

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

2017, 2018以降は,コンピュータビジョンでも,Vision and Languageのようなマルチモーダル認識でも,各種のアテンションが隆盛である.それと並行して,畳み込み層でも同じ目的(=どの特徴にだけフォーカスを定めるか)で畳み込み層の発展型が提案され続けている(が,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.

参照外部リンク