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
外部データ・セット
アルゴリズム
流れ
- 肺結節領域の抽出
- 肺結節の候補点抽出
- 肺がんの検出
肺結節領域の抽出
- 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で算出)
- (20, 64, 64, 64, 2)の5次元テンソル
- 確率MAPを組み込む意図
- U-Netは128x128と3D-ResNetに比べて広範囲から怪しそうな領域を調べている.広範囲を調べることで分かる情報もあるので,そういう事も判断要素に組み込みたい.
- U-Netで大局的な判断を行い,その大局的な判断を取り込んだ上で3D-ResNetで局所的な判断を行う2段構え
備考
- 時間の都合上,ネットワークのオプティマイザやパラメータはチューニングしてない.
- 前処理+ネットワークトレーニング+予測に72時間かかった
- 確率MAPをチャネルとして追加することは学習時間の短縮に効果がある(これによって10時間の学習で済んだらしい)
- 肺野の抽出処理6を計算量軽減のため実施
まとめ
- U-Netによって算出された位置ごとの確率をResNetに組み込むことで性能改善を達成.
- 入力に確率MAPを利用することで,コンピュータに注視すべき領域を伝えることは価値が高そう.
References
-
Kaggle, Data Science Bowl 2017, 2017. ↩
-
Open Medical Image Computing, LUng Nodule Analysis 2016, 2016. ↩
-
Ronneberger et al., U-Net: Convolutional Networks for Biomedical Image Segmentation, 2015. ↩
-
Ester et al., A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise, 1996 ↩
-
Zuidhof, Full Preprocessing Tutorial, 2017. ↩