이것은 우리의 논문에 설명 된대로 유방암 분류에 사용되는 모델의 구현입니다. 심해 신경망은 유방암 검진에서 방사선 전문의의 성능을 향상시킵니다. 이 구현을 통해 사용자는 사전 처리 된 모델 중 하나를 적용하여 유방암 예측을 얻을 수 있습니다. 이미지를 입력 ( 이미지 전용 )으로 가져 오는 모델과 이미지와 열 맵을 입력 ( 이미지 및 하이트 맵 )으로 가져 오는 모델.
left_benign , right_benign , left_malignant 및 right_malignant . 두 모델 모두 4 가지 표준 뷰 (L-CC, R-CC, L-MLO, R-MLO)로 유방 조영술 검사를 선별하는 데 작용합니다. 이 저장소의 일부로, 우리는 4 개의 샘플 시험을 제공합니다 ( sample_data/images Directory 및 Exam List에서 sample_data/exam_list_before_cropping.pkl 에 저장). 열광 생성 모델 및 암 분류 모델은 Pytorch에서 구현됩니다.
업데이트 (2019/10/26) : 당사의 논문은 의료 이미징에 대한 IEEE 거래에 게시됩니다!
Update (2019/08/26) : 이미지 별 모델의 Tensorflow 구현을 추가했습니다.
Update (2019/06/21) : 단일 유방 촬영 사진 이미지를 기반으로 예측을 생성하는 논문에 설명 된 이미지 별 모델을 포함 시켰습니다. 이 모델은 위에서 사용 된 시야 모델을 약간 저조하지만 전체 시험과는 대조적으로 단일 유방 조영술 이미지에서 사용할 수 있습니다.
업데이트 (2019/05/15) : 출력 데이터 프레임 열 ( left_malignant , right_benign )이 바뀌는 사소한 버그를 수정했습니다. 이것은 모델의 작동에 영향을 미치지 않습니다.
이 저장소는 GNU AGPLV3 라이센스의 조건에 따라 라이센스가 부여됩니다.
여기서 우리는 가장 성능이 좋은 모델 인 View-Wise 모델에서 예측을 얻는 방법을 설명합니다. 이 모델은 각보기에서 각 뷰에서 4 개의 이미지를 입력하고 각 시험에 대한 예측을 출력합니다.
bash run.sh전체 파이프 라인을 자동으로 실행하고 예측 결과를 CSV로 저장합니다.
GPU로 코드를 실행하는 것이 좋습니다 (기본적으로 설정). CPU로만 코드를 실행하려면 run.sh 의 DEVICE_TYPE 'CPU'로 변경하십시오.
개별 Python 스크립트를 실행하는 경우 PYTHONPATH 에이 저장소의 경로를 포함하십시오.
저장소에 제공된 샘플 시험에 대한 다음 출력을 얻어야합니다.
이미지 전용 모델을 사용한 예측 ( sample_output/image_predictions.csv 에서 찾을 수 있음) :
| 색인 | LEFT_BENING | right_benign | LEFT_MALINGANT | 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_BENING | right_benign | LEFT_MALINGANT | 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 "첫 번째 인수는 유방 조영술 이미지의 경로이고 두 번째 인수는 해당 이미지에 해당하는 견해입니다.
위의 예제 명령에 따라 다음 출력을 얻어야합니다.
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}
히트 맵이 있거나없는 분류기를 실행하기위한 코드가 포함 된 샘플 노트북을 포함 시켰습니다 (전처리 제외).
사전 각인 모델 중 하나를 사용하려면 입력은 최소 4 개의 이미지로 구성되어야하며, 각 뷰에 대해 하나 이상 (L-CC, L-MLO, R-CC, R-MLO)으로 구성됩니다.
원래 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_BENING | right_benign | LEFT_MALINGANT | 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 : 이미지 및 하이트 맵 모델의 예측을 저장하는 경로.
자르기 유방 조영술을 위해 다음 명령을 실행하고 증강 창에 대한 정보를 계산하십시오.
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 crops 유방 주변의 유방 조영술은 세분화 알고리즘을 실행하기위한 이미지 로딩 시간과 시간을 개선하기 위해 배경을 버리고 각 자른 이미지를 $PATH_TO_SAVE_CROPPED_IMAGES/short_file_path.png 에 저장합니다. 또한 각 이미지에 대한 추가 정보를 추가하고 자르지 않은 이미지를 폐기하면서 $CROPPED_IMAGE_LIST_PATH 에 새 이미지 목록을 작성합니다. 선택 사항 -Verbose Argument는 각 이미지에 대한 정보를 인쇄합니다. 추가 정보에는 다음이 포함됩니다.
window_location : 자르기 창 WRT 원래 DICOM 이미지를 사용하여 세분화 맵을 훈련과 동일한 방식으로 잘라낼 수 있습니다.rightmost_points : 올바르게 뒤집힌 후 가장 오른쪽이 아닌 픽셀.bottommost_points : 올바르게 뒤집힌 후 Bottommost 비 0 인 픽셀.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 이 명령은 임의의 증강 및 출력이 $IMAGE_PREDICTIONS_PATH 에 대한 평균 예측을 가진 $NUM_EPOCHS 에포크에 이미지를 사용하는 예측을합니다.
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 이 명령은 임의의 증강 및 출력이 $IMAGEHEATMAPS_PREDICTIONS_PATH 에 대한 평균 예측을 가진 $NUM_EPOCHS 에포크에 이미지와 히트 맵을 사용하여 예측을합니다.
DICOM 파일은 다음 함수가있는 PNG 파일로 변환 할 수 있으며 저장소의 코드에서 사용할 수 있습니다 (PYPNG 0.0.19 및 PYDICOM 1.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 Jastzębski, Thibault Févry, Joe Katsnelson, Eric Kim, Stacey Wolfson, Ujas Parikh, Sushma Gaddam, Leng Ling, 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 Sameen, S. Gene Kim, Laura Heacock, Linda Moy, Kyunghyun Cho, Kyunghyun
의료 영상에 대한 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}
}