目次
1. FCN の概要
FCN (Fully Convolutional Networks, 完全畳み込みネットワーク) は,セグメンテーション画像などの他チャンネル画像を推測するための,全結合層を使わないで,線形層は全て畳み込み層だけで構成されるCNN(畳み込みニューラルネットワーク)である [Long et al., 2014].セマンティックセグメンテーションや物体検出 に画像対画像変換などの,「各画素や各領域ごとに画像データ的な予測を行いたい」場合や密な推定問題(Dense Predicition)系の問題には,FCNが用いられることが多い.また,深層生成モデルを用いた画像生成モデル(DCGANなど)も,FCNであると言える.
この記事では,元のセマンティックセグメンテーション向け提案である FCN [Long et al., 2014] を元に,「CNNと比較したFCNの利点」(2節)の始点でFCNを紹介する.また,FCNがその他のタスクで使われる応用について,いくつか例示したい(3節).
FCN [Long et al., 2014] では,VGGNet [Simonyan et al., 2015] などの初期のCNNアーキテクチャを元に,出力付近の全結合層も含めて,(pooling層や非線形関数など以外は) 全てを畳み込み層(および転置畳み込み層)で済ませる.全結合がないことにより,出力画像の全ての画素位置で,クラス識別による複数チャンネルのラベル予測を行う,密な予測を行うことができる.
このような,全結合層を無くして出力層付近(ヘッド)も,全て畳み込み層で済ませるCNNである完全畳み込みネットワークを,全結合が終盤に備わっているCNNと比較する意味で,「Fully Convolutionalなニューラルネットワーク」(あるいは「Fully convolutional な CNN」)と呼ぶ.

21クラス(20種の物体+背景)の識別を,画素ごとに個別に行う.その目的を達成するために,元のVGGの全結合層と出力層を,1x 1 畳み込み層で代替させている
(それぞれ,1 x 1 x 4096 chan, 1 x 1 x 4096 chan,1 x 1 x 21 chanの畳み込み層).
旧来のCNN (例えばVGGNet [Simonyan])は,序盤は畳み込み層で作成してきた特徴マップ ($C \times W \times W$) を,中盤でベクトルへとフラット化して変形させたのち,4096ニューロンの全結合層を2回実施したあと,最後に$N = 21$次元の全結合層と,softmax関数によって,$N$次元のクラス確率を最終的に出力していた.
一方,FCN [Long et al., 2014] では,それらVGGNetの終盤3つの全結合層は用いずに,代わりに畳み込み層$N$チャンネル分を$1 \times 1$で畳み込むことで同じ役割を代替させる.これにより,最終的に$N$次元のクラス確率出力用の特徴ベクトルを,出力画像の全画素位置で(畳み込みにより)クラス確率を個別に出力する (図1).
また,[Long et al., 2014] では,スキップ接続も提案されている.スキップ接続は,画素毎のクラス識別を行うために必要な,初期の層のLow-level特徴を,そのままショートカットして,終盤の層にそのまま伝えてチャンネル方向に特徴マップへ合成し,用いることができるというものである.これにより,FCNでは,細かい画素ごとの情報を終盤の識別畳み込み層までもっていって活用できるようになった.
ただ,スキップ接続については,初期モデルであるFCNで考えるよりは,U-NetやResNetでの使用例を見てもらったほうが,どのようにスキップ接続を活用するのが良いのかのイメージがわかりやすい(FCNでの使い方だけでは,応用のイメージがわかない).よって,詳しくは以下の親記事やResNetの記事などにて,スキップ接続の「その後のネットワークでの発展的な使用」についてご覧になっていただきたい.
2. 過去のCNNの問題と,FCN を使うメリット
2.1 クラス識別CNN: 固定画像サイズ入出力の問題
FCN [Long et al., 2014] 提案以前は,セマンティックセグメンテーションは,まだCNNで解かれおらず,主に旧来の技術で研究されていた(MRF, CRFやsuperpixelの時代).それ以前のCNNが対象にしていた問題は,主に画像一枚の入力に対する物体クラス識別問題(ImageNetなど)であった.
しかし,LeNetやVGGNetのように,画像クラス識別認識CNNのように.全画素位置で,個別に出力softmaxへ変換するための全結合層を用意すると,モデルサイズが莫大になり,End-to-End学習を行うことが難しい.昔のSVM物体検出器のように,1つの全結合層をパラメータ共有して,出力直前の特徴マップ(テンソル)の全画素位置でスライディングウィンドウをおこない,$w \times h$ 回の全結合層の計算でクラス出力の予測をおこうという案も考えられる.しかし,この案も(昔のように)識別器部分だけ分離し,End-to-End学習ができなくなる欠点がある.
そこで,クラス数だけ重みを用意している(例えば40クラスの)全結合層と,同じ次元数のチャンネルネル数を用意した 1×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なネットワークでは,入出力画像サイズを固定サイズに統一する前処理が不必要となった.そのおかげで,様々な画像サイズが混ざったデータセットから,セグメンテーションや画像変換,物体検出などのEncoder-Decoderネットワークを,「元の画像のサイズ感のまま」畳み込み層カーネルを用いて学習できるようになった.
U-Net [3] などのEncoder-Decoder構造のセマンティックセグメンテーションネットワークでは,後半のDecoderはUpConvolution層 (学習可能)となったが,これらも「Fully Convolutionalなネットワーク」である.
3. FCN の応用先
FCN の提案はセマンティックセグメンテーション向けであったので,その後はセマンティックセグメンテーション全般で,完全畳み込みネットワークが用いられている.また,セマンティックセグメンテーション同様の,「入出力の両方が可変のサイズ画像の変換問題」でも用いられ,各種の画像対画像変換(Image-to-Image Translation)においても,Fully Convolutional なネットワークがよく用いられる (例 pix2pix, スタイル変換, 画像補間など).
3.1 物体検出での使用
また,物体検出においても,SSD [Liu et al., 2016] の登場以降,FCNがよく物体検出CNNのバックボーン+ヘッドの全体に用いられるようになった.ただし,物体検出の場合だと,Mask R-CNN 登場以降は,前半のCNNバックボーン部分は畳み込み層のみでも,後半にある出力ヘッドは Mask R-CNN等のように「複数ヘッド設計」となっていることも多い.Mask R-CNN系は,ROI Alignを実施した後に,最後の回帰ヘッド側には全結合層を使用するゆえ,全体をFCNとは呼べない,そもそも2ステージ型であるので,ROI Align 後に用いる2ステージ目ネットワークはFCNとは呼べない.よって,物体検出では,1ステージ型構造のネットワーク構造で,主にFCNという用語に出てくることとなる.
3.2 Keypoint推定での使用
一方,キーポイント推定(顔ランドマーク検出や人物姿勢推定など)や,CenterNetなどの「アンカフリーの①ステージ物体検出手法(Keypointベース)」は,最初からずっと最後の層まで畳み込み層だけで線形層を構成し,全結合を最後まで使わないので,FCNである.
3.3 入力画像と同じサイズの画像を出力する問題での使用
また,FCN型ネットワークは,セマンティックセグメンテーションや,画像対画像変換でも,よく用いられる.ただし,それらの多くはU-NetのようなEncoder-Decoder構造である.よって,まず前半で畳み込み層とプーリングで空間方向にダウンサイズしていったのち,逆に後半層では 畳み込み層と「転置畳み込み層」を用いて,解像度をアップサイズして入力画像サイズへとに戻していく.よって,畳み込み層だけが線形層ではなく転置畳み込み層も含むゆえ,これらは,完全畳み込みとは呼ばない人もいる(※ 管理人はこの「画像Encoder-Decoder」もFCNと呼ぶ派である).
4. FCN のまとめ
FCN [Long et al., 2014] で提案された全結合層を最後まで使わないで出力を行うCNNのことを,それ以降は「Fully Convolutional」なネットワークと呼ぶ.初期の物体認識むけCNNバックボーン(VGGNetなど)の,全結合層部分を畳み込み層で代替するという構成から始まったのがFCNあるが,それにより画像入出力が任意のサイズで済むようになった.
References
- [Long et al., 2014] Long, J.; Shelhamer, E.; Darrell, T. (2014). “Fully convolutional networks for semantic segmentation”. IEEE Transactions on Pattern Analysis and Machine Intelligence. 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
外部参照リンク
- https://ai.stackexchange.com/questions/21810/what-is-a-fully-convolution-network
- オタクの情弱日記:Fully-CNNがもたらしてくれたもの