FCN (Fully Convolutional Networks)

1. FCN の概要

FCN (Fully Convolutional Networks, 完全畳み込みネットワーク) は,セグメンテーション画像などの他チャンネル画像を推測するための,全結合層を使わないで,線形層は全て畳み込み層だけで構成される畳み込みニューラルネットワーク(CNN)である [Long et al., 2014].セマンティックセグメンテーション物体検出に,よく用いられる.

FCNでは,VGG [Simonyan et al., 2015] などの初期のCNNアーキテクチャを元に,出力付近の全結合層も含めて,(pooling層や非線形関数など以外は) 全てを畳み込み層 (あるいはアップ畳み込み層) で済ませる.すなわち,「全結合層無しの,畳み込み計算にのみ重みとバイアスが割り当てられているネットワークのことをFCN,完全畳み込みネットワークと呼ぶ.これにより,出力画像の全ての画素位置で,クラス識別による複数チャンネルラベル予測を行うことができる.

このような,全結合層を無くして出力層付近(ヘッド)も,全て畳み込み層で済ませるCNNである完全畳み込みネットワークを,俗に「Fully Convolutionalなニューラルネットワーク」(あるいは「Fully convolutional な CNN」)と,論文中で呼ぶことが多い.

FCN (Fully Convolutional Network)
図1 FCN (Fully Convolutional Network) ([Long et al., 2014]から引用).
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-NetResNetでの使用例を見てもらったほうが,どのようにスキップ接続を活用するのが良いのかのイメージがわかりやすい(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, スタイル変換, 画像補間など).

また,物体検出においても,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という用語に出てくることとなる.

一方,キーポイント推定(顔ランドマーク検出や人物姿勢推定など)や,CenterNetなどの「キーポイントベースの物体検出手法」は,1ステージ型の物体検出ネットワークであり,最初からずっと最後の層まで畳み込み層だけで線形層を構成し,全結合を最後まで使わないのでFCNである.

また,FCN型ネットワークは,セマンティックセグメンテーションや,画像対画像変換でも,よく使われる.ただし,それらの多くは,Encoder-Decoder構造であるゆえ,後半はup-convolution(deconvolution, 転置畳み込み)で解像度を入力画像サイズに戻していく.よって,convoutionだけが線形層ではなくup-convolutionも含むゆえ,これらは完全畳み込みとは呼ばない人も多い(※ 管理人は,deconvolutionも用いる画像Encoder-Decoderも,FCNと呼ぶ派である.deconvolutionも畳み込みの一種であるからである).

4. FCN のまとめ

FCN [Long et al., 2014] で提案された全結合層を最後まで使わないで出力を行うCNNのことを,それ以降は「Fully Convolutional」なネットワークと呼ぶ.AlexNet や 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

外部参照リンク

↓ ためになった方は,記事をSNSでシェアをしてくださると,管理人の記事執筆モチベーションが上がります