これは、私たちの論文で説明されているように、乳がんの分類に使用されるモデルの実装です。この実装により、ユーザーは、事前に処理されたモデルのいずれかを適用することにより、乳がんの予測を取得できます。イメージを入力(画像のみ)として採用するモデルと、イメージとヒートマップを入力(画像とヒートマップ)として使用するモデルです。
left_benign 、 right_benign 、 left_malignant 、およびright_malignant 。両方のモデルは、4つの標準ビュー(L-CC、R-CC、L-MLO、R-MLO)でマンモグラフィ試験のスクリーニングに作用します。このリポジトリの一部として、4つのサンプル試験( sample_data/imagesディレクトリとsample_data/exam_list_before_cropping.pklに保存されている試験リスト)を提供します。ヒートマップ生成モデルとがん分類モデルは、Pytorchで実装されています。
更新(2019/10/26) :私たちの論文は、医療イメージングに関するIEEEトランザクションに掲載されます!
更新(2019/08/26) :画像ごとのモデルのTensorflow実装を追加しました。
更新(2019/06/21) :単一のマンモグラム画像に基づいて予測を生成するペーパーで説明されている画像ごとのモデルを含めました。このモデルは、上記で使用されているビューワイズモデルをわずかに実行していませんが、完全な試験とは対照的に、単一のマンモグラム画像で使用できます。
更新(2019/05/15) :出力データフレーム列( left_malignant 、 right_benign )をスワップしたマイナーなバグを修正しました。これはモデルの動作に影響しないことに注意してください。
このリポジトリは、GNU AGPLV3ライセンスの条件に基づいてライセンスされています。
ここでは、私たちの最高のパフォーマンスモデルであるビューワイズモデルから予測を取得する方法について説明します。このモデルは、各ビューから入力として4つの画像を撮影し、各試験の予測を出力します。
bash run.shパイプライン全体を自動的に実行し、CSVで予測結果を保存します。
GPUでコードを実行することをお勧めします(デフォルトで設定)。 CPUのみでコードを実行するには、 run.shのDEVICE_TYPEを 'cpu'に変更してください。
個々のPythonスクリプトを実行している場合は、 PYTHONPATHにこのリポジトリへのパスを含めてください。
リポジトリで提供されるサンプル試験のために、次の出力を取得する必要があります。
画像のみのモデルを使用した予測( sample_output/image_predictions.csvでデフォルトで見つかります):
| 索引 | left_benign | right_benign | left_malignant | right_malignant |
|---|---|---|---|---|
| 0 | 0.0580 | 0.0754 | 0.0091 | 0.0179 |
| 1 | 0.0646 | 0.9536 | 0.0012 | 0.7258 |
| 2 | 0.4388 | 0.3526 | 0.2325 | 0.1061 |
| 3 | 0.3765 | 0.6483 | 0.0909 | 0.2579 |
Image-and-heatmapsモデルを使用した予測( sample_output/imageheatmap_predictions.csvでデフォルトで見つかった):
| 索引 | left_benign | right_benign | left_malignant | right_malignant |
|---|---|---|---|---|
| 0 | 0.0612 | 0.0555 | 0.0099 | 0.0063 |
| 1 | 0.0507 | 0.8025 | 0.0009 | 0.9000 |
| 2 | 0.2877 | 0.2286 | 0.2524 | 0.0461 |
| 3 | 0.4181 | 0.3172 | 0.3174 | 0.0485 |
ここでは、画像ごとのモデルもアップロードします。これは、上記のビューごとのモデルとは異なり、パフォーマンスが低下します。このセクションでは、View-WiseモデルからのCSV出力は、画像ごとのモデルの出力とは異なります。このモデルには各画像の予測を個別に作成する利点があるため、このモデルを公開して転送学習を促進します。
画像ごとのモデルを使用するには、次のようなコマンドを実行します。
bash run_single.sh " sample_data/images/0_L_CC.png " " L-CC "最初の引数はマンモグラム画像へのパスであり、2番目の引数はその画像に対応するビューです。
上記の例コマンドに基づいて、次の出力を取得する必要があります。
Stage 1: Crop Mammograms
Stage 2: Extract Centers
Stage 3: Generate Heatmaps
Stage 4a: Run Classifier (Image)
{"benign": 0.040191903710365295, "malignant": 0.008045293390750885}
Stage 4b: Run Classifier (Image+Heatmaps)
{"benign": 0.052365876734256744, "malignant": 0.005510155577212572}
ヒートマップの有無にかかわらず分類子を実行するためのコードを含むサンプルノートブックを含めました(プレの前処理を除く)。
事前に抑制されたモデルの1つを使用するには、入力は少なくとも4つの画像で構成され、各ビュー(L-CC、L-MLO、R-CC、R-MLO)に少なくとも1つあります。
元の12ビットマンモグラムは、画像視聴者に正しく表示されている間、ピクセル強度の粒度を維持するために、16ビット画像を再スケーリングした画像として保存されます。
sample_data/exam_list_before_cropping.pklには、前処理前に試験情報のリストが含まれています。各試験は、次の形式の辞書として表されます。
{
'horizontal_flip' : 'NO' ,
'L-CC' : [ '0_L_CC' ],
'R-CC' : [ '0_R_CC' ],
'L-MLO' : [ '0_L_MLO' ],
'R-MLO' : [ '0_R_MLO' ],
} L-CCおよびL-MLOビューの画像が正しい方向に向いていると予想され、 R-CCおよびR-MLOビューの画像が左方向に直面しています。 horizontal_flip 、試験内のすべての画像が予想から水平に反転しているかどうかを示します。 L-CC 、 R-CC 、 L-MLO 、およびR-MLOの値は、拡張機能とディレクトリ名のない画像ファイル名のリストです。
各画像の追加情報は辞書として含まれます。このような辞書には、キーとして4つのビューすべてがあり、値は対応するキーの追加情報です。たとえば、トリッピングウィンドウの上部、下、左、右のエッジを示すwindow_locationは、4つのキーを備えた辞書で、画像に対応する情報を含む値として4つのリストを備えています。さらに、 rightmost_pixels 、 bottommost_pixels 、 distance_from_starting_side 、およびbest_centerがプリプロシング後に追加されます。これらの属性の説明は、前処理セクションにあります。以下は、最適な中心を収集して抽出した後の試験情報の例です。
{
'horizontal_flip' : 'NO' ,
'L-CC' : [ '0_L_CC' ],
'R-CC' : [ '0_R_CC' ],
'L-MLO' : [ '0_L_MLO' ],
'R-MLO' : [ '0_R_MLO' ],
'window_location' : {
'L-CC' : [( 353 , 4009 , 0 , 2440 )],
'R-CC' : [( 71 , 3771 , 952 , 3328 )],
'L-MLO' : [( 0 , 3818 , 0 , 2607 )],
'R-MLO' : [( 0 , 3724 , 848 , 3328 )]
},
'rightmost_points' : {
'L-CC' : [(( 1879 , 1958 ), 2389 )],
'R-CC' : [(( 2207 , 2287 ), 2326 )],
'L-MLO' : [(( 2493 , 2548 ), 2556 )],
'R-MLO' : [(( 2492 , 2523 ), 2430 )]
},
'bottommost_points' : {
'L-CC' : [( 3605 , ( 100 , 100 ))],
'R-CC' : [( 3649 , ( 101 , 106 ))],
'L-MLO' : [( 3767 , ( 1456 , 1524 ))],
'R-MLO' : [( 3673 , ( 1164 , 1184 ))]
},
'distance_from_starting_side' : {
'L-CC' : [ 0 ],
'R-CC' : [ 0 ],
'L-MLO' : [ 0 ],
'R-MLO' : [ 0 ]
},
'best_center' : {
'L-CC' : [( 1850 , 1417 )],
'R-CC' : [( 2173 , 1354 )],
'L-MLO' : [( 2279 , 1681 )],
'R-MLO' : [( 2185 , 1555 )]
}
}含まれている試験のラベルは次のとおりです。
| 索引 | left_benign | right_benign | left_malignant | right_malignant |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 2 | 1 | 0 | 0 | 0 |
| 3 | 1 | 1 | 1 | 1 |
パイプラインは4つのステージで構成されています。
run.shで定義された次の変数は、必要に応じて変更できます。
NUM_PROCESSES :前処理で使用するプロセスの数( src/cropping/crop_mammogram.pyおよびsrc/optimal_centers/get_optimal_centers.py )。デフォルト:10。
DEVICE_TYPE :「CPU」または「GPU」のいずれかのヒートマップ生成および分類器で使用するデバイスタイプ。デフォルト:「GPU」
NUM_EPOCHS :分類子の出力で平均化されるエポックの数。デフォルト:10。
HEATMAP_BATCH_SIZE :ヒートマップ生成で使用するバッチサイズ。デフォルト:100。
GPU_NUMBER :複数のGPUが利用可能な場合に使用するGPUのどれを指定します。デフォルト:0。
DATA_FOLDER :マンモグラムが保存されるディレクトリ。
INITIAL_EXAM_LIST_PATH :メタデータのない最初の試験リストが保存されるパス。
PATCH_MODEL_PATH :パッチ分類器の保存されたウェイトが保存されるパス。
IMAGE_MODEL_PATH :画像のみのモデルの保存されたウェイトが保存されるパス。
IMAGEHEATMAPS_MODEL_PATH : Image-and-HeatMapsモデルの保存されたウェイトが保存されるパス。
CROPPED_IMAGE_PATH :クロップドマンモグラムを保存するディレクトリ。
CROPPED_EXAM_LIST_PATH :メタデータのトリミングで新しい試験リストを保存するためのパス。
EXAM_LIST_PATH :ベストセンターメタデータを使用して新しい試験リストを保存するためのパス。
HEATMAPS_PATH :ヒートマップを保存するディレクトリ。
IMAGE_PREDICTIONS_PATH :画像のみのモデルの予測を保存するパス。
IMAGEHEATMAPS_PREDICTIONS_PATH : Image-and-HeatMapsモデルの予測を保存するパス。
マンモグラムを収穫し、増強窓に関する情報を計算するために、次のコマンドを実行します。
python3 src/cropping/crop_mammogram.py
--input-data-folder $DATA_FOLDER
--output-data-folder $CROPPED_IMAGE_PATH
--exam-list-path $INITIAL_EXAM_LIST_PATH
--cropped-exam-list-path $CROPPED_EXAM_LIST_PATH
--num-processes $NUM_PROCESSES src/import_data/crop_mammogram.pyクロップ胸の周りのマンモグラムを作ると、画像の読み込み時間を改善してセグメンテーションアルゴリズムを実行し、各トリミングされた画像を$PATH_TO_SAVE_CROPPED_IMAGES/short_file_path.pngに保存します。さらに、各画像の追加情報を追加し、 $CROPPED_IMAGE_LIST_PATHに新しい画像リストを作成しながら、トリミングに失敗した画像を破棄します。オプション--verbose引数は、各画像に関する情報を印刷します。追加情報には以下が含まれます。
window_location :トレーニングのためにセグメンテーションマップを同じ方法でトリミングできるように、トリミングウィンドウWRTオリジナルDICOM画像の場所。rightmost_points :正しく反転した後の右端の非ゼロピクセル。bottommost_points :正しく反転した後、Bottommost Non Zeroピクセル。distance_from_starting_side :画像の端と胸の間のゼロ値のギャップが、胸が現れ始め、したがってギャップがないはずの側面に記録されている場合。データセットに応じて、この値を使用してhorizontal_flipの間違った値を決定できます。 python3 src/optimal_centers/get_optimal_centers.py
--cropped-exam-list-path $CROPPED_EXAM_LIST_PATH
--data-prefix $CROPPED_IMAGE_PATH
--output-exam-list-path $EXAM_LIST_PATH
--num-processes $NUM_PROCESSES src/optimal_centers/get_optimal_centers.py $EXAM_LIST_PATHに追加のメタデータを使用して新しい試験リストを出力します。追加情報には以下が含まれます。
best_center :各画像のウィンドウの最適な中心点。正確な中心点としてbest_centerを使用して描かれた増強窓は、画像の境界の外に出る可能性があります。これは通常、トリミングされた画像がウィンドウサイズよりも小さい場合に発生します。この場合、画像をパッドし、窓を補強された画像の内側にシフトします。詳細については、データレポートを参照してください。python3 src/heatmaps/run_producer.py
--model-path $PATCH_MODEL_PATH
--data-path $EXAM_LIST_PATH
--image-path $CROPPED_IMAGE_PATH
--batch-size $HEATMAP_BATCH_SIZE
--output-heatmap-path $HEATMAPS_PATH
--device-type $DEVICE_TYPE
--gpu-number $GPU_NUMBER src/heatmaps/run_producer.py $DEVICE_TYPEを使用して$HEATMAPS_PATHのHDF5形式として画像のパッチの予測を組み合わせて保存します。 $DEVICE_TYPE 「GPU」または「CPU」のいずれかです。 $HEATMAP_BATCH_SIZE 、使用可能なメモリサイズに応じて調整する必要があります。オプションの引数--gpu-numberを使用して、使用するGPUを指定できます。
src/modeling/run_model.pyヒートマップの有無にかかわらず、トリミングされた画像を使用して予測を提供できます。ヒートマップを使用する場合は、 --use-heatmapsフラグを使用して、 --model-pathおよび--heatmaps-path引数を適切に提供してください。使用可能なメモリに応じて、オプションの引数--batch-size提供できます。別のオプションの引数--gpu-numberを使用して、使用するGPUを指定できます。
python3 src/modeling/run_model.py
--model-path $IMAGE_MODEL_PATH
--data-path $EXAM_LIST_PATH
--image-path $CROPPED_IMAGE_PATH
--output-path $IMAGE_PREDICTIONS_PATH
--use-augmentation
--num-epochs $NUM_EPOCHS
--device-type $DEVICE_TYPE
--gpu-number $GPU_NUMBERこのコマンドは、ランダムな増強と出力を備えた$NUM_EPOCHSエポックの画像のみを使用して予測を行います。試験ごとの平均予測は$IMAGE_PREDICTIONS_PATHになります。
python3 src/modeling/run_model.py
--model-path $IMAGEHEATMAPS_MODEL_PATH
--data-path $EXAM_LIST_PATH
--image-path $CROPPED_IMAGE_PATH
--output-path $IMAGEHEATMAPS_PREDICTIONS_PATH
--use-heatmaps
--heatmaps-path $HEATMAPS_PATH
--use-augmentation
--num-epochs $NUM_EPOCHS
--device-type $DEVICE_TYPE
--gpu-number $GPU_NUMBERこのコマンドは、ランダムな増強と$NUM_EPOCHSの画像とヒートマップを使用して予測を行い、試験ごとの平均予測を$IMAGEHEATMAPS_PREDICTIONS_PATHに出力します。
DICOMファイルは、次の関数を使用してPNGファイルに変換できます。これは、リポジトリのコードで使用できます(Pypng 0.0.19およびPydicom 1.2.2ライブラリが必要です)。
import png
import pydicom
def save_dicom_image_as_png ( dicom_filename , png_filename , bitdepth = 12 ):
"""
Save 12-bit mammogram from dicom as rescaled 16-bit png file.
:param dicom_filename: path to input dicom file.
:param png_filename: path to output png file.
:param bitdepth: bit depth of the input image. Set it to 12 for 12-bit mammograms.
"""
image = pydicom . read_file ( dicom_filename ). pixel_array
with open ( png_filename , 'wb' ) as f :
writer = png . Writer ( height = image . shape [ 0 ], width = image . shape [ 1 ], bitdepth = bitdepth , greyscale = True )
writer . write ( f , image . tolist ())このコードが便利だと思ったら、私たちの論文を引用してください。
深いニューラルネットワークは、乳がんスクリーニングにおける放射線科医のパフォーマンスを向上させる
ナン・ウー、ジェイソン・ファン、ジョングキー・パーク、Yiqiu Shen、Zhe Huang、Masha Zorin、StanisławJastrzski、ThibaultFévry、Joe Katsnelson、Eric Kim、Stacey Wolfson、Ujas Parikh、Sushma Young Young Young Lin、kaddam Beatriu Reig、Yiming Gao、Hildegard Toth、Kristine Pysarenko、Alana Lewin、Jiyon Lee、Krystal Airola、Moralda Mema、Stephanie Chung、Esther Hwang、Naziya Samreen、S。
医療画像に関するIEEEトランザクション
2019年
@article{wu2019breastcancer,
title = {Deep Neural Networks Improve Radiologists' Performance in Breast Cancer Screening},
author = {Nan Wu and Jason Phang and Jungkyu Park and Yiqiu Shen and Zhe Huang and Masha Zorin and Stanisl{}aw Jastrzk{e}bski and Thibault F'{e}vry and Joe Katsnelson and Eric Kim and Stacey Wolfson and Ujas Parikh and Sushma Gaddam and Leng Leng Young Lin and Kara Ho and Joshua D. Weinstein and Beatriu Reig and Yiming Gao and Hildegard Toth and Kristine Pysarenko and Alana Lewin and Jiyon Lee and Krystal Airola and Eralda Mema and Stephanie Chung and Esther Hwang and Naziya Samreen and S. Gene Kim and Laura Heacock and Linda Moy and Kyunghyun Cho and Krzysztof J. Geras},
journal = {IEEE Transactions on Medical Imaging},
year = {2019}
}