完全畳込みネットワーク(FCN)

1. FCN の概要

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

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

FCN
図1 Fully Convolutional Network ([1]から引用). 21クラス(20種の物体+背景)の識別を,画素ごとに個別に行う.その目的を達成するために,元のVGGの全結合層と出力層を,$1 \times 1 $の畳み込み層で代替させている(それぞれ,1x1x4096チャンネル,1x1x4096チャンネル,1x1x21チャンネルの畳み込み層).

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

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

ちなみに,[1]では,画素毎のクラス識別を行うために必要な初期の層のLow-level特徴を終盤の層にそのまま伝えて特徴量として用いるスキップ接続も提案されている.しかし,スキップ接続については,その後の発展や,その後のセマンティックセグメンテーション用ネットワーク構造との比較を論じた方が,その目的や用途が理解やすい.従って,スキップ接続の詳細については本記事では省略するので,以下のセマンティックセグメンテーション記事の方でご覧になっていただきたい.

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

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

FCN [1] 提案以前は,セマンティックセグメンテーションはCNNで解かれていなかった.それ以前のCNNが対象にしていた問題は,主に画像一枚の入力に対する物体クラス識別問題(ImageNetなど)であった.

しかし,LeNetやVGGNetのように,画像クラス識別認識CNNのように全ての画素位置で,個別に全結合層を用意するとEnd-to-End学習が難しい.1つの全結合層を,出力直前の特徴マップテンソルの各画素位置でにスライディングウィンドウを行うことで,全画素位置でクラス出力をしても良いが,これも画像全体に対するEnd-to-End学習ができなくなる欠点がある.このままだと画像全体のコンテキストを学習できない.

そこで,クラス数だけ重みを用意している(例えば40クラスの)全結合層と,同じ次元数のチャンネルネル数を用意した 1×1 カーネルサイズの畳み込み層を,各画素でのクラス識別に直接用いることを考える (図1).FCNではこのよう発想を変えたことで,畳み込み層(1x1x4096チャンネル)が元の全結合層(4096ニューロン)と全く同じ操作を実行していることに相当するようにreparametrizeすることができた.こうして「出力の全画素で個別に,畳み込み演算でクラス識別を実施する」ことがFCN[1]の論文では提案された (※ 今考えると単純な発想で,実現にも何の難しさも無いわけだが,[1]の提案まで誰も思いついてなかった).

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

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

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

U-Net [3] などのEncoder-Decoder構造のセマンティックセグメンテーションネットワークでは,後半のDecoderはUpConvolution層 (学習可能)となったが,これらも「Fully Convolutionalなネットワーク」である.

3. FCN の応用先

FCN [1] の提案はセマンティックセグメンテーション向けであったので,その後はセマンティックセグメンテーション全般で,完全畳み込みネットワークが用いられている.また,セマンティックセグメンテーション同様の,「入出力の両方が可変のサイズ画像の変換問題」でも用いられ,各種の画像対画像変換(Image-to-Image Translation)においても,Fully Convolutional なネットワークがよく用いられる (例 pix2pix, スタイル変換, 画像補間など).

また,物体検出においても (SSD [4] など以降),Fully Convolutionalなネットワーク構造が用いられるようになっている.ただし,物体検出の場合だと,バックボーンCNNは畳み込み層のみでも,最後の出力ヘッドが Mask R-CNNのように「複数ヘッド」のマルチタスク設計となっていることが最近は多い.そして,こうした「マルチタスクヘッド付きネットワーク」をFully Convolutional であるとはあまり言わらない.理由は,Mask R-CNN系だと,ROIAlignした後に,回帰ヘッド側には全結合層を使用するからであるが,それ以外のバックボーン側(ResNetなど)はずっと畳み込みが主のではある.ただROI Align後に用いる2ステージ目以降は別ネットワークでもあるので,2ステージ型の物体検出ネットワークの全体をfully convolutional とは呼ばない).

人物姿勢キーポイント推定や,CenterNetなどの最近の「キーポイントベースの物体検出手法」も,1ステージ型物体検出ネットワークであり,最初からずっと最後の層まで畳み込み層だけがメインで最後まで処理するアーキテクチャが多く,明示的に論文中に書かれていなくとも,これらは Fully Convolutionalなネットワークである.

4 まとめ

FCN [1] で提案された全結合層を最後まで使わないで出力を行うCNNのことを,それ以降は「Fully Convolutional」なネットワークと呼ぶ.

AlexNetやVGGNetの構造をもとにして,その全結合層部分を畳み込み層で代替することで,画像入出力が任意のサイズで済むようになった.これによりセマンティックセグメンテーションのみならず,多くの画像変換系問題で完全畳み込みなネットワーク構造が使用されている.

References

  • [1] 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.
  • [2] 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”
  • [4] 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

外部参照リンク

関連記事