ホーム » FCN

FCN」カテゴリーアーカイブ

TensorFlow : 完全畳込みネットワークによるセグメンテーション


TensorFlow : 完全畳込みネットワークによるセグメンテーション

作成 : (株)クラスキャット セールスインフォメーション
日時 : 07/05/2017

 

セグメンテーションとデータセット PASCAL VOC2012

セマンティック・セグメンテーションの実験が続いたので、基本的なセグメンテーション・モデルである完全畳み込みネットワーク 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 を手がけたことがあれば) 特に難しい話しもありません。図を見るだけでもアーキテクチャの概要は掴めるかと思います :

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 は抽象的で少し分かりにくいかもしれませんが抑えたいポイントは :

  1. (完全結合層がないという意味で) 畳み込み層中心にモデルを構築し end-to-end, pixel-to-pixel にセグメンテーション・タスクを訓練/推論する。
  2. スキップ・アーキテクチャ – 通常の特徴出力に、より浅い層の出力を結合する。
  3. 分類ネットワークとしての AlexNet, VGG, GoogLeNet から遷移させている。

 

訓練モデル

モデルは VGG-16 ベースの FCN を実装した上で、(セールスポイントである) スキップ・アーキテクチャの有無で比較してみました。それからデータセットは train と val に分かれていますが、通常のように train のみで訓練したモデルと (ImageNet 画像で検証する目的で) 両者を合わせた trainval で訓練したモデルも用意しました。

具体的には以下の3種類です :

  1. スキップ・アーキテクチャなし / train データセットで訓練
  2. スキップ・アーキテクチャあり / train データセットで訓練

    この 2. を軸としました。以下は訓練時の損失の推移を TensorBoard でグラフにしたものです :

  3. 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

 
以上

TensorFlow : 超音波画像の神経構造セグメンテーション


TenosorFlow : 超音波画像の神経構造セグメンテーション

作成 : (株)クラスキャット セールスインフォメーション
日時 : 06/13/2017

 

概要

今回は超音波画像セグメンテーションを TensorFlow で実装してみます。
題材は前回に続いて Kaggle の出題からで、超音波画像のデータセット上で神経構造を識別可能なモデルの構築が求められています :

具体的には以下のサンプル画像のような首の超音波画像の BP セグメンテーションを行ないます。BP は Brachial Plexus, 腕神経叢 (わんしんけいそう) を意味します :

実際に実験してみると、目標が訓練しやすい形式に設定されていることもあってこの課題自体はさほど難しいわけではありませんが、セグメンテーションは医療分野に限らず応用範囲が広い技術です。

 

データセットの概要

訓練用データセットには、腕神経叢の超音波画像とそのセグメンテーション・マップ i.e. セグメンテーションを表わすマスク画像が対になって含まれています。患者毎に 120 枚の超音波画像が含まれ、超音波画像は shape 580 x 420 x 1 のグレースケール画像です。それぞれの超音波画像に対応したマスク画像も併せて用意されています。約 50 人の患者分が用意されていて、つまり約 12,000 (= 120*2*50) 枚の画像が含まれています。

今回はマスク画像が用意されている訓練用データセットを分割して、訓練・検証・テスト用として利用しました。

以下は最初の患者の 1 枚目の超音波画像とそのマスク画像です :

そして以下は最初の患者の (120 枚ある) 超音波画像群のサブセットです :

以下は上の超音波画像のそれぞれに対して対(つい)になっているマスク画像です :

 

モデル

課題はセグメンテーションですが、このケースでは要するにマスク画像を教師信号とする教師あり学習です。

セグメンテーションを行なうモデルは定石としては FCN (Fully Convolutional Network) あるいはその改良版の U-Net が考えられます。U-NET は生物医学でのセグメンテーションに良く利用されるようです。

基本的には Convolutional Auto-encoder の一種と考えられますので、先に VGG-16 による Auto-encoder でも試してみます。入出力が異なるので厳密には Auto-encoder ではありませんが、ここでは便宜上 Auto-encoder と呼称します。

なお参考まで、FCN の元ペーパーは以下です :

そして U-Net :

 

訓練

損失関数は基本的には類似度が測れれば良いのですが、ここでは ダイス係数 を用いました (MSE では上手くいきません)。
ダイス係数は自然言語処理で良く用いられます :

[Auto-encoder 損失]

[U-Net 損失]

 

予測

さて予測結果です。概ね位置特定については上手くいっているようですが、その範囲については正確性を欠いています。
また、(意外なことに) 普通の Auto-encoder でも U-Net でも予測結果に殆ど違いは見られませんでした。これは課題のセグメンテーションが比較的単純な構造であるためかもしれません。

● 以下の5例は比較的上手くいっている例です。
Auto-encoder による予測、U-Net による予測、そしてマスク画像の正答の順に示します :

患者 1 : 予測 (Auto-encoder)

患者 1 : 予測 (U-Net)

患者 1 : 正答

患者 2 : 予測 (Auto-encoder)

患者 2 : 予測 (U-Net)

患者 2 : 正答

患者 3 : 予測 (Auto-encoder)

患者 3 : 予測 (U-Net)

患者 3 : 正答

患者 4 : 予測 (Auto-encoder)

患者 4 : 予測 (U-Net)

患者 4 : 正答

患者 5 : 予測 (Auto-encoder)

患者 5 : 予測 (U-Net)

患者 5 : 正答

● 以下の2例は上手くいってない例です :

患者 6 : 予測 (Auto-encoder)

患者 6 : 予測 (U-Net)

患者 6 : 正答

患者 7 : 予測 (Auto-encoder)

患者 7 : 予測 (U-Net)

患者 7 : 正答

 
以上

AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com