Data  Science  Bowl  2017
  Winning  Solutions  Survey
Takami  Sato
17-4-18DSB2017  Solutions  Survey 1
Data  Science  Bowl  2017とは
17-4-18DSB2017  Solutions  Survey 2
CT画像(DICOM形式)からの肺がん検知
⼀一⼈人当たり200スライスぐらいの画像があり、学習データは1,500⼈人ほど
h"ps://docs.google.com/presenta3on/d/
1t40mZHzCdogvV3XeuK48SnKrA9tGK5eoaYoeBDYqoHs/edit#slide=id.g1cd534afe0_0_34	
  
有志が⾒見見つけた肺がんの例例
h"ps://www.kaggle.com/c/data-­‐science-­‐bowl-­‐2017	
  
注意
ある程度解釈を加えています
詳細は出典確認お願いします
17-4-18DSB2017  Solutions  Survey 3
2位の手法
17-4-18DSB2017  Solutions  Survey 4
環境
•  Keras  +  windows  64bit
•  ⾃自前の可視化のツール
概要
•  LIDCとLUNA16のデータを使⽤用
•  医者の診断とLUNA16のラベルを使⽤用
•  32*32*32の3d  convnetで学習
•  セグメント切切りはせず、画像全体を使⽤用
•  最⼤大腫瘍の場所から、癌がありそうなスライスを検知
•  疑わしいスライスを、U-‐‑‒Netで腫瘍の場所を検知
•  最後に当該スライスの疑わしい腫瘍の数と諸々特徴をxgboost
•  Public  LBを信⽤用しない
h"ps://www.kaggle.com/c/data-­‐science-­‐bowl-­‐2017/discussion/31551	
  
2位の手法
17-4-18DSB2017  Solutions  Survey 5
•  前処理理
•  全てを1x1x1  mmにスケーリング(恐らく1  pixcel)
•  LUNAとDSBデータを全て同じ向きに変換
•  LUNAとLIDCをあわせるために座標を全て0〜~1にスケール
•  教師ラベル
•  LIDCの医者の診断は全て正とした。(診断医師が⼀一⼈人でも)
•  LUNA16のラベルも正例例として追加
•  負例例を増やすために、肺以外の画像も追加
•  フォーラムの肺部分抽出⼿手法で、抽出されなかった部分を使⽤用
•  40,000データ
•  (100,000の肺以外画像、10,000の偽陽画像、2000のLIDC正例例)
•  偽陽データは、腫瘍だけど悪性でないもの
•  モデルが出来上がった後、⽬目検して癌と偽陽部分にアノテーションを追加
•  LUNA16では3cm以上の腫瘍が正例例になっていないので除外
2位の手法
17-4-18DSB2017  Solutions  Survey 6
•  3d  convnetでの肺腫瘍と癌のあるスライス検知
•  32x32x32  3D  convnetを使⽤用
•  バッチ版のC3Dの構成(VGGに似ている)
•  ネットワークのチューンには殆ど時間を使っていない
•  腫瘍かどうかと悪性かどうかを、同時にマルチタスク学習
•  この⽅方法は、Julianさんでは良良かったがDanielさんは2ステップ
•  データが不不均衡なので、1:20になるよう正例例をoversampling
•  少しの正例例しか必要なかったのには驚きとのこと
•  12m格⼦子のストライドと3種類のズームで癌の組織の場所を検知
•  最⼤大腫瘍とそのz座標(スライス位置)のみ後⼯工程で使⽤用
•  疑わしい腫瘍検知
•  LUNAや過去のDSBから肺がん腫瘍の画像を収集
•  ⼩小さいU-‐‑‒Netを使⽤用して、疑わしいスライスから怪しい腫瘍を抽出
•  全⾝身データや肺気腫のデータも⼊入れたが、⼤大きくは改善せず
2位の手法
17-4-18DSB2017  Solutions  Survey 7
•  最終モデル
•  xgboostで学習
•  ズームの種類、スライスの位置、怪しい組織の数をデータに学習
•  min_̲child_̲weightを60にして、過学習を抑制
•  ⼿手元CVスコアは0.39、最終スコアは0.40117
•  Danielsさんとのアンサンブル
•  彼は64x64x64のResnetライクなモデルを使⽤用
•  肺腫瘍検知と悪性腫瘍検知の2段階
•  LIDCの腫瘍情報も使⽤用
•  2⼈人の予測を平均して、最終submit
7位の手法
17-4-18DSB2017  Solutions  Survey 8
h"ps://www.kaggle.com/c/data-­‐science-­‐bowl-­‐2017/discussion/31576	
  
環境 •  TensorFlow  +  Ubuntu  14.04
概要
•  LUNAとLIDCの腫瘍アノテーションを信頼
•  その後、DSBの悪性腫瘍ラベルを使⽤用
•  以下の3ステップで予測を実施
•  ピクセル毎の腫瘍の存在確率率率計算
•  腫瘍領領域の検知
•  悪性腫瘍の検知
•  モデルチューニングには多くの時間を割いていない
7位の手法
•  ピクセル毎の腫瘍の存在確率率率計算
–  128x128のU-‐‑‒Netを使⽤用
–  LUNAとLIDCの腫瘍のアノテーションを使⽤用
–  ランダムなスライスを作って学習
–  最終的には軸に沿ったスライスに予測し、3次元腫瘍存在確率率率テンソルを計算
•  各ピクセル3回計算されるので平均する
•  腫瘍領領域の検知
–  以下の⼿手順で腫瘍の場所を特定
•  ⼩小さい閾値を設定(0.2)
•  閾値以上のpixcelの塊を列列挙
•  塊のサイズが⼀一定以上だった場合は、閾値を上げて再実⾏行行
–  腫瘍の中⼼心から64x64x64の領領域を切切り取る
–  領領域の腫瘍存在確率率率の和が⼤大きい順に20領領域を選択
–  LIDCの悪性腫瘍情報を使うべきだったとの事
17-4-18DSB2017  Solutions  Survey 9
7位の手法
•  悪性腫瘍の検知
–  ⼀一⼈人当たり、20個の64x64x64のデータが存在
–  3D  resnetを使⽤用
–  1チャネル⽬目にピクセルの値を⼊入れて、2チャネル⽬目に腫瘍存在確率率率を⼊入れた
–  (20,  64,  64,  64,  2)の5次元テンソルがラベルに紐紐づく
–  3D  resnet後は20個の予測が出揃い、そのmax値を取るのが最も良良かった
•  Noisy-‐‑‒ANDやNoisy-‐‑‒ORなども試したらしい
•  解釈としても妥当
–  ここに機械学習⼿手法を⽤用いたが、改善せず
•  腫瘍存在確率率率の並び順は間違ってる家の姓があり、並び順に依存しないmax等が良良いとのこと
17-4-18DSB2017  Solutions  Survey 10
9位の手法
17-4-18DSB2017  Solutions  Survey 11
h"ps://www.kaggle.com/c/data-­‐science-­‐bowl-­‐2017/discussion/31548	
  
h"ps://eliasvansteenkiste.github.io/machine%20learning/lung-­‐cancer-­‐pred/	
  
	
環境 •  不不明
概要
•  ブログ記事が詳細に書かれている
•  予測は以下のステップで構成
•  腫瘍検知
•  良良性腫瘍の除外
•  悪性腫瘍確率率率の付与
•  最終モデル
•  LBがハックされて使い物にならず、モチベ低下した
9位の手法
17-4-18DSB2017  Solutions  Survey 12
•  腫瘍検知
–  LUNAデータのアノテーションで腫瘍の位置を学習
–  1  voxcelが1x1x1  mm  cubeになるようにスケーリング
–  学習にはU-‐‑‒Netベースのネットワークを使⽤用
–  ⽬目的関数は、Dice類似度度を使⽤用
–  LUNAのアノテーションは32x32x32だが、⼊入⼒力力は64x64x64にして
内部のアノテーションを回転したり歪ませたりして、データを増加
–  検知された領領域からDifference  of  Gaussian法で腫瘍を検知
–  このままだと、⾮非常に多くの腫瘍が検知されるので、次に良良性腫瘍を除外する
9位の手法
17-4-18DSB2017  Solutions  Survey 13
•  良良性腫瘍の除外
–  肺領領域の検知
•  肺領領域以外の腫瘍は、肺がんではないので除外
•  肺領領域の検知⽅方法は、カーネル上で議論論しているのを参考にした
•  最終的には3Dで肺を含む凸包から、肺以外っぽい領領域を除外するアプローチ
–  3D  Resnetベースモデルでの良良性腫瘍の除外
•  LUNAの偽陽性判定トラックのラベルを使⽤用
•  48x48x48サイズの⼊入⼒力力のネットワークを作成
•  詳細はブログを参照
•  悪性腫瘍の予測
–  LIDCデータに腫瘍の悪性度度のデータがあることを、終了了2週前に発⾒見見
–  FPRネットワークベースのモデルで各腫瘍に悪性度度を付与
9位の手法
17-4-18DSB2017  Solutions  Survey 14
•  最終モデル
–  腫瘍の悪性度度を、患者の癌ラベルに変換する
–  2つのアプローチを使⽤用
•  P(患者が肺がん)  =  1  –                (腫瘍iが良良性)
–  直感的だが、ある腫瘍が悪性だとモデルが確信している場合、それ以上学習が進まない
•  Log  Mean  Exponet
–  ログをとって、⼩小さい確率率率は超⼩小さくした状態で平均取って戻すので、
ソフトバージョンのmax関数的に動く
–  モデルと共にFine-‐‑‒tuneできる
–  上記⼿手法で30予測を作成し、アンサンブルして最終スコアを作成
•  最終の2  submitを以下で構成
•  Defensive  Ensemble
–  各モデルの混合⽐比率率率をCVで決定
–  ただし、結果的に最良良モデルの予測1つだけが選択された
•  Aggressive  Ensemble
–  どのモデルを使うかをCVで学習して、選ばれたモデルの単純平均で構成
意見募集中
スピード重視で資料を作ったので
おかしな点がありましたら、
Twitterの@tkm2261までメンション頂けると助かります
17-4-18DSB2017  Solutions  Survey 15

Data Science Bowl 2017 Winning Solutions Survey

  • 1.
    Data  Science  Bowl 2017  Winning  Solutions  Survey Takami  Sato 17-4-18DSB2017  Solutions  Survey 1
  • 2.
    Data  Science  Bowl 2017とは 17-4-18DSB2017  Solutions  Survey 2 CT画像(DICOM形式)からの肺がん検知 ⼀一⼈人当たり200スライスぐらいの画像があり、学習データは1,500⼈人ほど h"ps://docs.google.com/presenta3on/d/ 1t40mZHzCdogvV3XeuK48SnKrA9tGK5eoaYoeBDYqoHs/edit#slide=id.g1cd534afe0_0_34   有志が⾒見見つけた肺がんの例例 h"ps://www.kaggle.com/c/data-­‐science-­‐bowl-­‐2017  
  • 3.
  • 4.
    2位の手法 17-4-18DSB2017  Solutions  Survey4 環境 •  Keras  +  windows  64bit •  ⾃自前の可視化のツール 概要 •  LIDCとLUNA16のデータを使⽤用 •  医者の診断とLUNA16のラベルを使⽤用 •  32*32*32の3d  convnetで学習 •  セグメント切切りはせず、画像全体を使⽤用 •  最⼤大腫瘍の場所から、癌がありそうなスライスを検知 •  疑わしいスライスを、U-‐‑‒Netで腫瘍の場所を検知 •  最後に当該スライスの疑わしい腫瘍の数と諸々特徴をxgboost •  Public  LBを信⽤用しない h"ps://www.kaggle.com/c/data-­‐science-­‐bowl-­‐2017/discussion/31551  
  • 5.
    2位の手法 17-4-18DSB2017  Solutions  Survey5 •  前処理理 •  全てを1x1x1  mmにスケーリング(恐らく1  pixcel) •  LUNAとDSBデータを全て同じ向きに変換 •  LUNAとLIDCをあわせるために座標を全て0〜~1にスケール •  教師ラベル •  LIDCの医者の診断は全て正とした。(診断医師が⼀一⼈人でも) •  LUNA16のラベルも正例例として追加 •  負例例を増やすために、肺以外の画像も追加 •  フォーラムの肺部分抽出⼿手法で、抽出されなかった部分を使⽤用 •  40,000データ •  (100,000の肺以外画像、10,000の偽陽画像、2000のLIDC正例例) •  偽陽データは、腫瘍だけど悪性でないもの •  モデルが出来上がった後、⽬目検して癌と偽陽部分にアノテーションを追加 •  LUNA16では3cm以上の腫瘍が正例例になっていないので除外
  • 6.
    2位の手法 17-4-18DSB2017  Solutions  Survey6 •  3d  convnetでの肺腫瘍と癌のあるスライス検知 •  32x32x32  3D  convnetを使⽤用 •  バッチ版のC3Dの構成(VGGに似ている) •  ネットワークのチューンには殆ど時間を使っていない •  腫瘍かどうかと悪性かどうかを、同時にマルチタスク学習 •  この⽅方法は、Julianさんでは良良かったがDanielさんは2ステップ •  データが不不均衡なので、1:20になるよう正例例をoversampling •  少しの正例例しか必要なかったのには驚きとのこと •  12m格⼦子のストライドと3種類のズームで癌の組織の場所を検知 •  最⼤大腫瘍とそのz座標(スライス位置)のみ後⼯工程で使⽤用 •  疑わしい腫瘍検知 •  LUNAや過去のDSBから肺がん腫瘍の画像を収集 •  ⼩小さいU-‐‑‒Netを使⽤用して、疑わしいスライスから怪しい腫瘍を抽出 •  全⾝身データや肺気腫のデータも⼊入れたが、⼤大きくは改善せず
  • 7.
    2位の手法 17-4-18DSB2017  Solutions  Survey7 •  最終モデル •  xgboostで学習 •  ズームの種類、スライスの位置、怪しい組織の数をデータに学習 •  min_̲child_̲weightを60にして、過学習を抑制 •  ⼿手元CVスコアは0.39、最終スコアは0.40117 •  Danielsさんとのアンサンブル •  彼は64x64x64のResnetライクなモデルを使⽤用 •  肺腫瘍検知と悪性腫瘍検知の2段階 •  LIDCの腫瘍情報も使⽤用 •  2⼈人の予測を平均して、最終submit
  • 8.
    7位の手法 17-4-18DSB2017  Solutions  Survey8 h"ps://www.kaggle.com/c/data-­‐science-­‐bowl-­‐2017/discussion/31576   環境 •  TensorFlow  +  Ubuntu  14.04 概要 •  LUNAとLIDCの腫瘍アノテーションを信頼 •  その後、DSBの悪性腫瘍ラベルを使⽤用 •  以下の3ステップで予測を実施 •  ピクセル毎の腫瘍の存在確率率率計算 •  腫瘍領領域の検知 •  悪性腫瘍の検知 •  モデルチューニングには多くの時間を割いていない
  • 9.
    7位の手法 •  ピクセル毎の腫瘍の存在確率率率計算 –  128x128のU-‐‑‒Netを使⽤用 – LUNAとLIDCの腫瘍のアノテーションを使⽤用 –  ランダムなスライスを作って学習 –  最終的には軸に沿ったスライスに予測し、3次元腫瘍存在確率率率テンソルを計算 •  各ピクセル3回計算されるので平均する •  腫瘍領領域の検知 –  以下の⼿手順で腫瘍の場所を特定 •  ⼩小さい閾値を設定(0.2) •  閾値以上のpixcelの塊を列列挙 •  塊のサイズが⼀一定以上だった場合は、閾値を上げて再実⾏行行 –  腫瘍の中⼼心から64x64x64の領領域を切切り取る –  領領域の腫瘍存在確率率率の和が⼤大きい順に20領領域を選択 –  LIDCの悪性腫瘍情報を使うべきだったとの事 17-4-18DSB2017  Solutions  Survey 9
  • 10.
    7位の手法 •  悪性腫瘍の検知 –  ⼀一⼈人当たり、20個の64x64x64のデータが存在 – 3D  resnetを使⽤用 –  1チャネル⽬目にピクセルの値を⼊入れて、2チャネル⽬目に腫瘍存在確率率率を⼊入れた –  (20,  64,  64,  64,  2)の5次元テンソルがラベルに紐紐づく –  3D  resnet後は20個の予測が出揃い、そのmax値を取るのが最も良良かった •  Noisy-‐‑‒ANDやNoisy-‐‑‒ORなども試したらしい •  解釈としても妥当 –  ここに機械学習⼿手法を⽤用いたが、改善せず •  腫瘍存在確率率率の並び順は間違ってる家の姓があり、並び順に依存しないmax等が良良いとのこと 17-4-18DSB2017  Solutions  Survey 10
  • 11.
    9位の手法 17-4-18DSB2017  Solutions  Survey11 h"ps://www.kaggle.com/c/data-­‐science-­‐bowl-­‐2017/discussion/31548   h"ps://eliasvansteenkiste.github.io/machine%20learning/lung-­‐cancer-­‐pred/   環境 •  不不明 概要 •  ブログ記事が詳細に書かれている •  予測は以下のステップで構成 •  腫瘍検知 •  良良性腫瘍の除外 •  悪性腫瘍確率率率の付与 •  最終モデル •  LBがハックされて使い物にならず、モチベ低下した
  • 12.
    9位の手法 17-4-18DSB2017  Solutions  Survey12 •  腫瘍検知 –  LUNAデータのアノテーションで腫瘍の位置を学習 –  1  voxcelが1x1x1  mm  cubeになるようにスケーリング –  学習にはU-‐‑‒Netベースのネットワークを使⽤用 –  ⽬目的関数は、Dice類似度度を使⽤用 –  LUNAのアノテーションは32x32x32だが、⼊入⼒力力は64x64x64にして 内部のアノテーションを回転したり歪ませたりして、データを増加 –  検知された領領域からDifference  of  Gaussian法で腫瘍を検知 –  このままだと、⾮非常に多くの腫瘍が検知されるので、次に良良性腫瘍を除外する
  • 13.
    9位の手法 17-4-18DSB2017  Solutions  Survey13 •  良良性腫瘍の除外 –  肺領領域の検知 •  肺領領域以外の腫瘍は、肺がんではないので除外 •  肺領領域の検知⽅方法は、カーネル上で議論論しているのを参考にした •  最終的には3Dで肺を含む凸包から、肺以外っぽい領領域を除外するアプローチ –  3D  Resnetベースモデルでの良良性腫瘍の除外 •  LUNAの偽陽性判定トラックのラベルを使⽤用 •  48x48x48サイズの⼊入⼒力力のネットワークを作成 •  詳細はブログを参照 •  悪性腫瘍の予測 –  LIDCデータに腫瘍の悪性度度のデータがあることを、終了了2週前に発⾒見見 –  FPRネットワークベースのモデルで各腫瘍に悪性度度を付与
  • 14.
    9位の手法 17-4-18DSB2017  Solutions  Survey14 •  最終モデル –  腫瘍の悪性度度を、患者の癌ラベルに変換する –  2つのアプローチを使⽤用 •  P(患者が肺がん)  =  1  –                (腫瘍iが良良性) –  直感的だが、ある腫瘍が悪性だとモデルが確信している場合、それ以上学習が進まない •  Log  Mean  Exponet –  ログをとって、⼩小さい確率率率は超⼩小さくした状態で平均取って戻すので、 ソフトバージョンのmax関数的に動く –  モデルと共にFine-‐‑‒tuneできる –  上記⼿手法で30予測を作成し、アンサンブルして最終スコアを作成 •  最終の2  submitを以下で構成 •  Defensive  Ensemble –  各モデルの混合⽐比率率率をCVで決定 –  ただし、結果的に最良良モデルの予測1つだけが選択された •  Aggressive  Ensemble –  どのモデルを使うかをCVで学習して、選ばれたモデルの単純平均で構成
  • 15.