Kaggleの肺がん検出コンペData Science Bowl 20171(以下DSB2017と表記)の2位解法の調査です.
- Names: Julian & Daniel
- Title: Very quick 1st summary of julian's part of 2nd place solution.
- URL: https://www.kaggle.com/c/data-science-bowl-2017/discussion/31551
DSB2017とは
- 肺がんの検出コンテスト
- 症例ごとの有無の検出のみで可(位置を特定する必要はない)
検出の流れとしてはCT画像には肺結節2と呼ばれる白っぽい塊があって,悪性だったりすると肺がんがあったりします.
そのため,コンピュータに肺がんを検出させるためには,
- 結節影を検出する
- 肺がんかどうかを判定する
という二段階の判定で検出するアプローチを取る方式が多いみたいです.
外部データセット
LUNA16
- 肺結節のデータセット(悪性腫瘍かどうかは不明)
- 888件のCTデータ
- 肺結節に対して,「なし」,「3mm以下」,「3mm以上」の3パターンでラベル付け
- スライス厚が2.mm以上のCTは除外
- LIDCやIDRIといった大規模データセットに対する肺結節の自動検出が課題
- 4名の放射線科医の診断結果が記載されている.
LIDC-IDRI
- 肺画像のデータセット
- 1018件のCTデータ
- 肺結節については「なし」,「3mm以下」,「3mm以上」の3パターンでラベル付け
- 悪性腫瘍に関する情報もある.
Julian
- Code: https://github.com/juliandewit/kaggle_ndsb2017/
- Paper: http://juliandewit.github.io/kaggle-ndsb2017/
環境
- GTX-980
- Keras
- Windows(64bit)
アプローチ
- LIDCの医師のラベル付きの悪性腫瘍を利用
- LUNA16の陰性ラベル(正常な患者)を利用(LUNA16は肺結節情報のみで悪性かどうかのデータセットはないため,正例データは今回のコンテストには使えない.)
- 1ボクセル1mmに等方位ボクセル変換
- 境界部分にある肺結節も見逃さないようにするために,肺野のみ抽出したデータではなく元の画像で学習
- 座標が0〜1に収まるようスケール変換
- 正例と負例が,本当に正しいか自作ビューワーで確認
ラベル
- 医師の誰か一人でもpositiveと判定した箇所は全てpositive扱いにした(4人の放射線技師での判定をLUNA16では行っている)
- LUNA16では3cm以上の肺結節はラベル付(セグメンテーション?)されていなかったため,LUNA16の3cm以上の結節があるデータは除外.
モデル
- 32x32x32の3D ConvNetで肺結節の検出と悪性かどうかの判断を同時に行う.(Danielは2段階に分けた)
- VGG風のC3D5構造
- ネットワークのパラメータ最適化には時間を使っていない.
- positive:negative = 1:20になるようpositiveをアップサンプリング(元々はpositive:negative = 1:200)
- 大きな結節を検出できるようにするため,3種類のズームレベル(1.0, 1.5, 2.0mm/voxel)を使用
- LUNA16利用データ:
- 候補点数: 400,000
- 非肺組織: 100,000
- 偽陽性: 10,000(肺結節だが悪性ではない)
- LIDC陽性: 2,000
- 候補点数: 400,000
- NDSBには悪性腫瘍の場所が記載されていないので,自分で該当箇所にマーク付けを行った.
- LUNA16には3cm以上の肺結節は取り扱っていなかったため,ネットワークが混乱することを割けるためにデータセットから除外
- 12mm間隔にCT画像を区切って悪性腫瘍がないか判定.
- 悪性腫瘍度の最大値とz座標のみを最終予測の特徴量として利用
- つまり240x240x240のCTデータだと20x20x20=8000件の予測
- 3段階のズームレベル(1.0, 1.5mm, 2.0mm/voxel)で大きな肺結節も検出できるようにした
変な組織(strange tissue)検出
- 3D ConvNetでの判定とは別に変な組織の検出も試みる.
- 訓練データに10箇所ぐらい変な組織があって,その半分が悪性腫瘍だったため.
- どういう定義で"strange tissue"といっているのかは不明.
最終的な判定
- Xgboost6
- 3段階のズームレベルでの悪性腫瘍度の最大値
- z座標
- min_child_weight: 60 (過学習を防ぐため)
- Danielsの解との平均で提出
Daniels
- Code: https://github.com/dhammack/DSB2017/
- Paper: https://github.com/dhammack/DSB2017/blob/master/dsb_2017_daniel_hammack.pdf
アプローチ
- 64x64x64のResNet風の3D ConvNetを使用
- LIDCの悪性腫瘍と結節情報を使用
- 疑わしい領域の抽出にU-Net7を利用
References
-
Kaggle, Data Science Bowl 2017, 2017. ↩
-
NCCN.org, 小細胞肺がん Small Cell Lung Cancer, 2014. ↩
-
Tran et al., Learning Spatiotemporal Features with 3D Convolutional Networks, 2015. ↩
-
Ronneberger et al., U-Net: Convolutional Networks for Biomedical Image Segmentation, 2015. ↩