这是用于乳腺癌分类模型的实施,如我们论文深度神经网络所述,可以改善放射科医生在乳腺癌筛查中的表现。该实现使用户可以通过应用我们验证的模型之一来获得乳腺癌的预测:一种将图像作为输入(仅图像)和将图像和热图作为输入(图像和热图)的模型。
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}
}