這是用於乳腺癌分類模型的實施,如我們論文深度神經網絡所述,可以改善放射科醫生在乳腺癌篩查中的表現。該實現使用戶可以通過應用我們驗證的模型之一來獲得乳腺癌的預測:一種將圖像作為輸入(僅圖像)和將圖像和熱圖作為輸入(圖像和熱圖)的模型。
left_benign , right_benign , left_malignant和right_malignant 。這兩種模型都在篩選乳房X線攝影檢查方面具有四種標準視圖(L-CC,R-CC,L-MLO,R-MLO)。作為此存儲庫的一部分,我們提供4個示例考試(在sample_data/images目錄中存儲在sample_data/exam_list_before_cropping.pkl中)。熱圖生成模型和癌症分類模型在Pytorch中實現。
更新(2019/10/26) :我們的論文將發表在有關醫學成像的IEEE交易中!
Update(2019/08/26) :我們添加了圖像模型的TensorFlow實現。
UPDATE(2019/06/21) :我們已經包括了基於單個乳房X線圖圖像生成預測的論文中所述的圖像智能模型。該模型的表現略低於上面使用的視圖模型,但可以在單乳房X線照片圖像上使用,而不是全面考試。
更新(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 |
在這裡,我們還上傳了圖像模型,該模型與上述模型不同,並且性能差。來自視圖模型的CSV輸出將與本節中圖像模型的CSV輸出不同。因為該模型具有分別為每個圖像創建預測的好處,所以我們使該模型公開以促進轉移學習。
要使用圖像模型,請運行以下命令:
bash run_single.sh " sample_data/images/0_L_CC.png " " L-CC "第一個參數是通往乳房X線圖圖像的路徑,第二個參數是與該圖像相對應的視圖。
您應該根據上述示例命令獲得以下輸出:
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}
我們包括了一個示例筆記本,該筆記本包含用於運行有或沒有熱圖的分類器的代碼(不包括預處理)。
要使用一個預驗證的模型,需要輸入至少四個圖像,每種視圖至少一個圖像(L-CC,L-MLO,R-CC,R-MLO)。
原始的12位乳房X線照片被保存為重新縮放的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 |
管道由四個階段組成。
可以根據需要對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 :存儲乳房X線照片的目錄。
INITIAL_EXAM_LIST_PATH :存儲任何元數據的初始考試列表的路徑。
PATCH_MODEL_PATH :保存補丁分類器的保存權重的路徑。
IMAGE_MODEL_PATH :保存僅保存僅圖像模型的保存權重的路徑。
IMAGEHEATMAPS_MODEL_PATH :保存圖像和熱圖模型的保存權重的路徑。
CROPPED_IMAGE_PATH :保存裁剪乳房X線照片的目錄。
CROPPED_EXAM_LIST_PATH :用裁剪元數據保存新考試列表的路徑。
EXAM_LIST_PATH :使用最佳中心元數據保存新考試列表的路徑。
HEATMAPS_PATH :保存熱圖的目錄。
IMAGE_PREDICTIONS_PATH :保存僅圖像模型預測的路徑。
IMAGEHEATMAPS_PREDICTIONS_PATH :保存圖像和熱圖模型預測的路徑。
運行以下命令以裁剪乳房X線照片併計算有關增強窗口的信息。
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作物乳房周圍的乳房X線照片並丟棄背景,以提高圖像加載時間和時間以運行分割算法,並將每個裁剪的圖像保存到$PATH_TO_SAVE_CROPPED_IMAGES/short_file_path.png 。此外,它為每個圖像添加了其他信息,並在丟棄未能裁剪的圖像時為$CROPPED_IMAGE_LIST_PATH創建一個新的圖像列表。可選 - Verbose參數打印出有關每個圖像的信息。其他信息包括以下內容:
window_location :裁剪窗口WRT原始DICOM圖像的位置,以便可以以相同的方式進行分割圖。rightmost_points :正確翻轉後,最右的非零像素。bottommost_points :正確翻轉後Bottommost非零像素。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中,從而生成熱圖。 $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 ())如果您發現此代碼有用,請引用我們的論文:
深度神經網絡改善了放射科醫生在乳腺癌篩查中的表現
Nan Wu, Jason Phang, Jungkyu Park, Yiqiu Shen, Zhe Huang, Masha Zorin, Stanisław Jastrzębski, Thibault Févry, Joe Katsnelson, Eric Kim, Stacey Wolfson, Ujas Parikh, Sushma Gaddam, Leng Leng Young Lin, Kara Ho, Joshua D. Weinstein, Beatriu Reig, Yiming Gao, Hildegard Toth, Kristine Pysarenko, Alana Lewin, Jiyon Lee, Krystal Airola, Eralda Mema, Stephanie Chung, Esther Hwang, Naziya Samreen, S. Gene Kim, Laura Heacock, Linda Moy, Kyunghyun Cho, Krzysztof J. Geras
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}
}