FCN(Fully Convolutional Networks): 線形層を全て畳み込み層にしたCNN

1. FCN(Fully Convolutional Networks) の概要

FCN(Fully Convolutional Networks)は,セグメンテーション画像などの他チャンネル画像を推測する際に,全結合層は使わないで,線形層は全て畳み込み層だけで構成されるCNN(畳み込みニューラルネットワーク)である [Long et al., 2015], [Long et al., 2016].日本語だと,Fully Convolutional Networksのことを完全畳み込みネットワークと呼べる.セマンティックセグメンテーション物体検出に,画像対画像変換などの「各画素や各領域ごとに画像データ的な予測を行いたい」場合や,「密な推定(Dense Prediction)」系の問題においてFCNが用いられることが多い.また,深層生成モデルを用いた画像生成モデル(DCGANなど)も,FCN構造の画像Encoder-Decoderを使用する.

この記事では,元のセマンティックセグメンテーション向け提案である FCN を元に,「CNNと比較したFCNの利点」(2節)の始点でFCNを紹介する.また,FCNがその他のタスクで使われる応用について,いくつか例示したい(3節).

1.1 FCN :「密な推定」向け畳み込みonlyネットワーク

FCN [Long et al., 2015] では,VGGNet [Simonyan et al., 2015] などの初期のCNNアーキテクチャを元に,出力付近の全結合層も含めて,(プーリング層ReLU活性化関数以外は) ,全ての層を畳み込み層(および転置畳み込み)で済ませる.これにより,出力画像の全ての画素位置で,クラス識別による複数チャンネルのラベル予測を行う「密な予測(dense prediction)」を行うことができる.

このような,全結合層を無くして「出力層付近(ヘッド)も,全て畳み込み層で済ませるCNN」を,全結合が終盤に備わっているCNNと区別する意味で,「Fully Convolutional なニューラルネットワーク」(あるいは「Fully convolutional な CNN = FCN」)と呼ぶ.

FCN (Fully Convolutional Network)([Long et al., 2015]から引用)
図1. FCN (Fully Convolutional Network) ([Long et al., 2015]から引用)

旧来のCNN (例えばVGGNet )は,序盤は畳み込み層で作成してきた特徴マップ ($C \times W \times W$) を,中盤でベクトルへとフラット化して変形させたのち,4096ニューロンの全結合層を2回実施したあと,最後に$N = 21$次元の全結合層と,softmax関数によって,$N$次元のクラス確率を最終的に出力していた.

一方,FCN [Long et al., 2015] では,それらVGGNetの終盤3つの全結合層は用いずに,代わりに畳み込み層$N$チャンネル分を$1 \times 1$で畳み込むことで同じ役割を代替させる.これにより,最終的に$N$次元のクラス確率出力用の特徴ベクトルを,出力画像の全画素位置で(畳み込みにより)クラス確率を個別に出力する (図1).

図1の例では 21クラス(Pascal VOC 20種の前景物体+背景)の識別を,画素ごとに個別に行う.その目的を達成するために,元のVGGの全結合層と出力層を1 x 1 畳み込み層で代替する
(それぞれ,[1 x 1] x 4096 ,[1 x 1] x 4096 ,[1 x 1] x 21 の畳み込み層).

1.2 スキップ接続の提案

また,FCN [Long et al., 2015] では,スキップ接続の使用も提案されている.FCNではPool3, Pool4層の特徴マップを,スキップ接続で終盤までもっていって合成し活用するネットワーク構造を,CNN・FCN向けに始めて提案した.

その後,ResNet, ResNeXtブロックなどの「スキップ接続ありブロック」や,U-NetFPNなどで用いられることになる.この記事は,詳しくは「完全畳み込み」設計についてフォーカスするので,スキップ接続について詳しくは,以下の親記事を参照のこと.

2. 過去のCNNの問題と,FCN を使うメリット

2.1 クラス識別CNN: 固定画像サイズ入出力の問題

FCN提案以前のセマンティックセグメンテーションは,まだCNNで解かれおらず,主に旧来の技術で研究されていた(MRF, CRFやsuperpixelの時代).それ以前のCNNが対象にしていた問題は,主に画像一枚の入力に対する物体クラス識別問題(ImageNetなど)であった.

しかし,LeNetVGGNetのように,画像クラス識別認識CNNのように.全画素位置で,個別に出力softmaxへ変換するための全結合層を用意すると,モデルサイズが莫大になり,End-to-End 学習を行うことが難しい.昔のSVM物体検出器のように,1つの全結合層をパラメータ共有して,出力直前の特徴マップ(3次元配列)の,全画素位置でスライディングウィンドウを行い,$w \times h$ 回の全結合層の計算でクラス出力の予測をおこうという案も考えられる.しかし,この案も(昔のように)識別器部分だけ分離し,End-to-End 学習ができなくなる欠点がある.

そこで,クラス数だけ重みを用意している(例えば40クラスの)全結合層と,同じ次元数のチャンネルネル数を用意した 1 x 1 畳み込み層を,各画素でのクラス識別に直接用いることを著者らは考えた (図1).

このように発想を転換したことにより,畳み込み層(1 × 1 × 4096チャンネル)の畳み込みが,変換前の全結合層(4096ニューロン)識別器と全く同じ操作を実行していることに相当するように,再パラメータ化することができた.こうして「出力の全画素で個別に,畳み込み演算でクラス識別を実施する」ことがFCNの論文 [Long et al., 2014]で提案された.

今考えると単純な発想で,実現にも何の難しさも無いわけだが, [Long et al., 2014]の提案まで誰も思いついてなかったので非常に論文である.このFCN以降,「全画素で個別に識別を行いたい」問題では,FCNにならって「畳み込み層を,画素ごとの出力識別器として用いる」ということが定番化していった(3節でより詳しく).

2.2 画像対画像変換にもよく用いられる FCN

FCN 登場以前の,VGGNet [Simonyan et al., 2015] などの物体画像をクラス識別するCNNでは,出力手前の全結合層の次元数に合わせるように畳み込み + プーリングの操作を行なっていく.AlexNetやVGGNetでは,入力画像サイズも224 × 224画素に固定されているので,入力画像を[224 x 224] にリサイズしてから入力する必要があった.

一方,Fully ConvolutionalなCNN(=FCN)では,入出力画像サイズを固定サイズに統一する前処理が不必要となった.そのおかげで,様々な画像サイズが混ざったデータセットから,セグメンテーションや画像変換,物体検出などのEncoder-Decoderネットワークを,「元の画像のサイズ感のまま」畳み込み層カーネルを用いて学習できるようになった.

U-Net [3] などのEncoder-Decoder構造のセマンティックセグメンテーションネットワークでは,後半のDecoderは転置畳み込み層(Up-Convolution)となり,学習可能な層ともなった.これらのU-Net型構造のの砂時計型画像向けEncoder-Decoderでも,畳み込み層+転置畳み込み層で,畳み込みばかりで全結合層を除いた構成であれば「Fully Convolutionalなネットワーク」と呼べる.

3. FCN の応用先

FCN の提案はセマンティックセグメンテーション向けであったので,その後はセマンティックセグメンテーション全般で,完全畳み込みネットワークが用いられている.

また,セマンティックセグメンテーションと似た問題である「入出力の両方が可変のサイズ画像の変換問題」でも,FCNが用いられるようになる.つまりは画像対画像変換(Image-to-Image Translation)系のタスク全般においても,U-NetのようなFully Convolutional なEncoder-Decoderネットワークがよく用いられる (例 pix2pix, スタイル変換, 画像補間・画像の超解像など).

3.1 物体検出での使用

物体検出においても,SSD [Liu et al., 2016] の登場以降,FCNがよく物体検出CNNのバックボーン+ヘッドの全体に用いられるようになった.ただし,物体検出の場合だと,Mask R-CNN 登場以降は,前半のCNNバックボーン部分は畳み込み層のみでも,後半にある出力ヘッドは Mask R-CNN等のように「複数ヘッド設計」となっていることも多い.

Faster R-CNN やMask R-CNNなどの「2ステージR-CNN型ネットワーク」は,ROI pooling / ROI Alignを実施した後に,最後の回帰ヘッド側では全結合層(や,最近はReLU層も加えてMLP化)を使用するゆえ,全体をFCNとは呼びきれない(※ ほとんどが畳み込み層の構成ではあるが).

3.2 キーポイント推定での使用

一方,キーポイント推定(顔ランドマーク検出や人物姿勢推定など)や,CenterNet・CornerNetなどの,「アンカフリーの1ステージ物体検出手法(Keypointベース)」は,最初からずっと最後の層まで畳み込み層だけで線形層部分を構成することが多く,そのまま出力まで全結合層を1度も使わないFCN構成であることは多い.

3.3 入力画像と同じサイズの画像を出力する問題での使用

FCN型ネットワークは,セマンティックセグメンテーションや,画像対画像変換でも,よく用いられる.ただし,それらの多くはU-NetのようなEncoder-Decoder構造である.よって,まず前半Encoder部分では,畳み込み層プーリングで空間方向にダウンサイズしていき,逆に後半Decoder部分では 畳み込み層転置畳み込み層を用いて入力画像サイズへ戻していく.

よって,畳み込み層だけが線形層ではなく転置畳み込みも含むゆえ,これらを完全畳み込みネットワークとは呼ばない人もいる(※ 管理人はこの「画像Encoder-Decoder」もFCNと呼ぶ派である).

4. まとめ

FCN [Long et al., 2015] で提案された「出力まで畳込み層のみを学習可能層として用い,全結合層を使わないようにしたCNN」のことを,それ以降は「Fully Convolutional」なネットワーク,すなわちFCNと呼ぶようになった.

初期の物体認識むけCNNバックボーンにおいて,全結合層部分を畳み込み層で代替するという発想から考案されたのがFCNである.FCNの導入により,固定入力画像サイズであったCNNが,任意の入力サイズで済むようにもなった.

また,FCNは,U-Net構造の砂時計型Encoder-Deoderネットワークでよく用いられるようになった.画像を入力として画像を出力とする密な推定タスク全般でFCNが用いられる.また,物体検出ネットワークもFCN構造になっていることが多い.

References

  • [Long et al., 2015] Long, J., Shelhamer, E.; Darrell, T. “Fully convolutional networks for semantic segmentation. In CVPR, 2015
  • [Long et al., 2016] Long, J., Shelhamer, E., Darrell, T. “Fully convolutional networks for semantic segmentation”. IEEE Transactions on Pattern Analysis and Machine Intelligence. 2016, 39 (4): 640–651.
  • [Simonyan et al., 2015] K. Simonyan, A. Zisserman Very Deep Convolutional Networks for Large-Scale Image Recognition In ICLR, 2015
  • [3] Ronneberger, Olaf; Fischer, Philipp; Brox, Thomas (2015). “U-Net: Convolutional Networks for Biomedical Image Segmentation”
  • [Liu et al., 2016] W. Liu, D. Anguelov, D. Erhan, C. Szegedy, S. Reed, Cheng-Yang Fu, and A. C. Berg. Ssd: Single shot multibox detector. In ECCV, 2016

外部参照リンク