TensorFlow : 完全畳込みネットワークによるセグメンテーション
作成 : (株)クラスキャット セールスインフォメーション
日時 : 07/05/2017
セマンティック・セグメンテーションの実験が続いたので、基本的なセグメンテーション・モデルである完全畳み込みネットワーク FCN (Fully Convolutional Network) を定番のデータセット PASCAL VOC2012 上で試しておきます。
セグメンテーションは簡単に言えばピクセル単位の分類問題です。そして完全畳み込みネットワークはセグメンテーション・タスク用のモデルの一つで、畳み込み層中心で構成されスキップ・アーキテクチャが導入されています。最先端のセグメンテーション技術に比較すると少し精度が劣る印象ですが、基本となるモデルで完全畳み込みネットワークのバリエーションも多いです。
(補足: 完全畳み込みネットワークという訳語は定着していませんのでご注意ください。もっとも他に訳しようもないのですが。)
データセットは PASCAL VOC 2012 を使用します。このデータセットは物体検出やセグメンテーション目的で標準的に利用されるデータセットです。セグメンテーションについては訓練セットが 1464 画像、検証セットが 1449 画像用意されていて総計 2,913 枚あります。クラスは以下の 20 ありますが (背景をカウントすれば 21) :
1=aeroplane, 2=bicycle, 3=bird, 4=boat, 5=bottle, 6=bus, 7=car , 8=cat, 9=chair, 10=cow, 11=diningtable, 12=dog, 13=horse, 14=motorbike, 15=person, 16=potted plant, 17=sheep, 18=sofa, 19=train, 20=tv/monitor
クラスの詳細については以下を参照してください :
以下は訓練したモデルでセグメンテーションを行なったものです :
完全畳込みネットワーク (FCN, Fully Convolutional Networks)
完全畳み込みネットワークの基本は以下のペーパーを読めば十分で、(セグメンテーション、あるいは Auto-encoder を手がけたことがあれば) 特に難しい話しもありません。図を見るだけでもアーキテクチャの概要は掴めるかと思います :
- Fully Convolutional Networks for Semantic Segmentation
Evan Shelhamer, Jonathan Long, Trevor Darrell
(Submitted on 20 May 2016)
Abstract だけ翻訳しておきます :
畳み込みネットワークは特徴の階層を生むパワフルな視覚モデルです。end-to-end で、pixel-to-pixel に訓練された畳み込みネットワークはそれ自体でセマンティック・セグメンテーションにおいて以前のベストな結果を更新することを示します。キーとなる洞察は “完全畳み込み (fully convolutional)” ネットワークを構築することです、これは任意のサイズの入力を取り相当するサイズの出力を効率的な推論と学習で生成します。完全畳み込みネットワークの位相 (space) を定義して詳述し、空間的に密な予想タスク (訳注: ピクセル単位での予想タスク) へのそれらの適用を説明し、そして以前のモデルとの関連性をとらえます。現代的な分類ネットワーク (AlexNet、VGG と GoogLeNet) を完全畳み込みネットワークに適応させそれらが学習した表現を再調整してセグメンテーション・タスクに遷移しました。そしてスキップ・アーキテクチャを定義しました、これは正確で詳細なセグメンテーションを生成するために深い、粗い層からのセマンティック情報を浅い、完成度が高い (fine) 層からの外観 (appearance) 情報と結合します。この完全畳み込みネットワークは、推論に典型的な画像に対して 0.1 秒かかる一方で、PASCAL VOC (2012 上で 67.2% mean IU へと 30 % の相対的な改善)、NYUDv2、SIFT Flow、そして PASCAL-Context の改善されたセグメンテーションを獲得しました。
abstract は抽象的で少し分かりにくいかもしれませんが抑えたいポイントは :
- (完全結合層がないという意味で) 畳み込み層中心にモデルを構築し end-to-end, pixel-to-pixel にセグメンテーション・タスクを訓練/推論する。
- スキップ・アーキテクチャ – 通常の特徴出力に、より浅い層の出力を結合する。
- 分類ネットワークとしての AlexNet, VGG, GoogLeNet から遷移させている。
訓練モデル
モデルは VGG-16 ベースの FCN を実装した上で、(セールスポイントである) スキップ・アーキテクチャの有無で比較してみました。それからデータセットは train と val に分かれていますが、通常のように train のみで訓練したモデルと (ImageNet 画像で検証する目的で) 両者を合わせた trainval で訓練したモデルも用意しました。
具体的には以下の3種類です :
- スキップ・アーキテクチャなし / train データセットで訓練
- スキップ・アーキテクチャあり / train データセットで訓練
この 2. を軸としました。以下は訓練時の損失の推移を TensorBoard でグラフにしたものです :
- val データセットを加えた trainval データセットを使用して 2 を再調整
Val データセット画像で検証
最初にスキップ・アーキテクチャなし/ありの場合のそれぞれのモデルについて(訓練では使用していない) Val データセットの画像で検証してみます。もちろん全く同じ条件で訓練しています。
* 色分けは、乗り物 : 青系、生物: グリーン系、その他: 赤系としましたが、便宜上、人間だけ赤色にしてあります。
* また予想されたカテゴリーのピクセル数も併せて示します。
- 最初は aeroplane (飛行機) です。skip ありの方がより良い表現ですが、エンジン部は自動車と誤判定されています。
スキップ・アーキテクチャ なし | スキップ・アーキテクチャ あり | |
![]() |
![]() | ![]() |
1) aeroplane: 8691 2) car: 1650 3) boat: 173 |
1) aeroplane: 10543 2) car: 2867 3) chair: 29 4) sheep: 4 5) bus: 2 |
- 次に電車です。正面窓の赤い部分は TV モニタと誤判定されています。局所的にはやむを得ませんが、全体が掴めていないとも言えます。
![]() | ![]() | ![]() |
1) train: 22795 2) motorbike: 23 3) tv/monitor: 2 4) boat: 1, |
1) train: 19915, 2) tv/monitor: 554, 3) boat: 143, 4) bottle: 51, 5) potted plant: 18, |
- そしてボートです。人間の目で見ても少し分かりにくいですが、明るい青はモーターバイク、赤色は TV モニタと誤判定されています。
![]() | ![]() | ![]() |
1) motorbike: 1946 2) boat: 435 3) tv/monitor: 163 | 1) boat: 653, 2) tv/monitor: 246 3) train: 59 4) bottle: 58 5) car: 13 6) diningtable: 4 7) potted plant: 1 |
参考までに、以下は trainval データセットを利用して訓練したモデルを使用した結果です。つまり概ね正解の画像です :
![]() | ![]() | ![]() |
aeroplane: 15576 | train: 27851 | boat: 6558 |
ImageNet 画像で検証
最後に trainval で訓練したモデルを使用して、(クラスキャットのマスコット猫に続いて) 定番の ImageNet 画像でテストしてみます。
全体的に位置判定は悪くないのですが、部分的に分類ミスも起きています。
* ImageNet 画像の元画像の版権は所有者に帰属します。
- 概ね猫ですが、部分的に犬判定されています。
![]() | ![]() |
1) cat: 22245 2) dog: 5695 3) person: 675 |
- 正面はバスですが、側面は電車判定です。
![]() | ![]() |
1) bus: 13323 2) train: 9010 3) boat: 1276 4) car: 118 5) tv/monitor: 8 |
- 一見良さそうに見えますが、犬が馬と判定されています。
![]() | ![]() |
1) horse: 9419 2) person: 2046 3) car: 339 4) cow: 148 5) boat: 52 |
- これは比較的上手くいっています。強いて言えば、ソファの面積がもう少し欲しいところです。
![]() | ![]() |
1) dog: 14863 2) cat: 9956 3) sofa: 4422 |
以上