LoginSignup
3
1

More than 5 years have passed since last update.

[Survey] Kaggle - Data Science Bowl 2017, 7位解法

Posted at

Kaggleの肺がん検出コンペData Science Bowl 20171(以下DSB2017と表記)の7位解法の調査です.

Name: Niklas Köhler
Title: 7th Place short overview.
URL: https://www.kaggle.com/c/data-science-bowl-2017/discussion/31576

環境

  • 32GB RAM
  • Core i7-4930K
  • GTX 1080
  • Ubuntu 14.04
  • Library: TensorFlow

外部データ・セット

  • LUNA162とLIDC3のアノテーションを利用
  • ただしLIDCの肺がんのアノテーションに気づかなかったため,肺結節情報のみ利用
  • その後,DSB2017の肺がんラベルを使用

アルゴリズム

流れ

  1. 肺結節領域の抽出
  2. 肺結節の候補点抽出
  3. 肺がんの検出

肺結節領域の抽出

  • LUNAとLIDCの腫瘍のアノテーションを使用
  • 腫瘍のあるスライスからランダムに128x128のスライス画像を切り取ってU-Net4で学習
  • 肺結節領域は楕円と仮定してマスクデータを作成.
  • Axialだけでなく,Sagital, Coronalも利用
  • 最終的には軸に沿ったスライスで予測し,3次元での各ボクセルごとの肺結節の存在確率を計算
    • 多分,各スライスを128x128になるように格子状に切り取ってU-Netで存在確率を算出.
    • 3軸で存在確率を求めることで,各ボクセルごとに3次元の確率が得られる.

肺結節の候補点抽出

  • 候補点(クラスタ)の数が数十に絞れるよう以下の手順で腫瘍の場所を特定
    • 小さい閾値を設定(0.2)
    • 閾値以上のpixelのクラスタを列挙(DBSCAN5)
    • クラスタ数が一定以上だった場合は閾値を上げて再実行
  • 腫瘍の中心から64x64x64の領域を切り取る.
  • LIDCの悪性腫瘍情報を使うべきだったと反省

肺がんの検出

  • 1サンプルとして同時に20個の候補点を突っ込むモデルを採用(Input Shape=(BatchSize, 20, 64, 64, 2))
  • 3D ResNetを使用
    • (20, 64, 64, 64, 2)の5次元テンソル
      • 注) 20はBatch Sizeではなくて,20個の候補点を1サンプルデータとして突っ込んでいる
      • 3D ResNet後は20個の予測が出揃い,そのmax値を取るのが最も性能が良かった.
    • 1チャネル: CTの信号値
    • 2チャネル: 腫瘍の存在確率(UNetで算出)
  • 確率MAPを組み込む意図
    • U-Netは128x128と3D-ResNetに比べて広範囲から怪しそうな領域を調べている.広範囲を調べることで分かる情報もあるので,そういう事も判断要素に組み込みたい.
    • U-Netで大局的な判断を行い,その大局的な判断を取り込んだ上で3D-ResNetで局所的な判断を行う2段構え

備考

  • 時間の都合上,ネットワークのオプティマイザやパラメータはチューニングしてない.
  • 前処理+ネットワークトレーニング+予測に72時間かかった
  • 確率MAPをチャネルとして追加することは学習時間の短縮に効果がある(これによって10時間の学習で済んだらしい)
  • 肺野の抽出処理6を計算量軽減のため実施

まとめ

  • U-Netによって算出された位置ごとの確率をResNetに組み込むことで性能改善を達成.
  • 入力に確率MAPを利用することで,コンピュータに注視すべき領域を伝えることは価値が高そう.

References

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1