นี่คือการใช้แบบจำลองที่ใช้สำหรับการจำแนกมะเร็งเต้านมตามที่อธิบายไว้ในเครือข่ายประสาทส่วนลึกของเราปรับปรุงประสิทธิภาพของนักรังสีวิทยาในการตรวจคัดกรองมะเร็งเต้านม การใช้งานช่วยให้ผู้ใช้ได้รับการคาดการณ์มะเร็งเต้านมโดยใช้หนึ่งในรุ่นที่ผ่านการฝึกฝนของเรา: โมเดลที่ถ่ายภาพเป็นอินพุต ( ภาพเท่านั้น ) และโมเดลที่ถ่ายภาพและความร้อนเป็นอินพุต ( ภาพและความร้อน )
left_benign , right_benign , left_malignant และ right_malignant ทั้งสองรุ่นทำหน้าที่ตรวจคัดกรองการตรวจเต้านมด้วยมุมมองมาตรฐานสี่มุมมอง (L-CC, R-CC, L-MLO, R-MLO) ในฐานะที่เป็นส่วนหนึ่งของที่เก็บนี้เรามีการสอบตัวอย่าง 4 ครั้ง (ในไดเรกทอรี sample_data/images และรายการสอบที่เก็บไว้ใน sample_data/exam_list_before_cropping.pkl ) แบบจำลองการสร้างความร้อนและแบบจำลองการจำแนกมะเร็งถูกนำมาใช้ใน Pytorch
UPDATE (2019/10/26) : บทความของเราจะเผยแพร่ในธุรกรรม IEEE เกี่ยวกับการถ่ายภาพทางการแพทย์!
อัปเดต (2019/08/26) : เราได้เพิ่มการใช้งาน TensorFlow ของโมเดล ภาพที่ชาญฉลาด ของเรา
UPDATE (2019/06/21) : เราได้รวมโมเดล ภาพที่ชาญฉลาด ตามที่อธิบายไว้ในกระดาษที่สร้างการทำนายตามภาพแมมโมแกรมเดียว รุ่นนี้มีประสิทธิภาพต่ำกว่ารูปแบบ มุมมอง ที่ใช้ด้านบนเล็กน้อย แต่สามารถใช้กับภาพแมมโมแกรมเดี่ยวได้เมื่อเทียบกับการสอบเต็มรูปแบบ
อัปเดต (2019/05/15) : แก้ไขข้อผิดพลาดเล็กน้อยที่ทำให้คอลัมน์ DataFrame เอาต์พุต ( left_malignant , right_benign ) จะเปลี่ยน โปรดทราบว่าสิ่งนี้ไม่ส่งผลกระทบต่อการทำงานของโมเดล
ที่เก็บนี้ได้รับใบอนุญาตภายใต้ข้อกำหนดของใบอนุญาต GNU AGPLV3
ที่นี่เราอธิบายวิธีการทำนายจากโมเดลมุม มองที่ชาญฉลาด ซึ่งเป็นรูปแบบที่ดีที่สุดของเรา โมเดลนี้ใช้ภาพ 4 ภาพจากแต่ละมุมมองเป็นอินพุตและการคาดการณ์เอาต์พุตสำหรับการสอบแต่ละครั้ง
bash run.shจะเรียกใช้ท่อทั้งหมดโดยอัตโนมัติและบันทึกผลลัพธ์การทำนายใน CSV
เราขอแนะนำให้เรียกใช้รหัสด้วย GPU (ตั้งค่าตามค่าเริ่มต้น) หากต้องการเรียกใช้รหัสด้วย CPU เท่านั้นโปรดเปลี่ยน DEVICE_TYPE ใน run.sh เป็น '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 จากโมเดล มุมมองที่ชาญฉลาด จะแตกต่างจากโมเดล ภาพที่ชาญฉลาด ในส่วนนี้ เนื่องจากโมเดลนี้มีประโยชน์ในการสร้างการคาดการณ์สำหรับแต่ละภาพแยกต่างหากเราจึงทำให้โมเดลนี้เป็นแบบสาธารณะเพื่ออำนวยความสะดวกในการเรียนรู้การถ่ายโอน
หากต้องการใช้โมเดล ภาพที่ชาญฉลาด ให้เรียกใช้คำสั่งเช่นต่อไปนี้:
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}
เราได้รวมสมุดบันทึกตัวอย่างที่มีรหัสสำหรับเรียกใช้ตัวแยกประเภทที่มีและไม่มีความร้อน (ไม่รวมการประมวลผลล่วงหน้า)
ในการใช้หนึ่งในรุ่นที่ผ่านการฝึกอบรมจำเป็นต้องมีอินพุตเพื่อประกอบด้วยภาพอย่างน้อยสี่ภาพอย่างน้อยหนึ่งภาพสำหรับแต่ละมุมมอง (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_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 : ไดเรกทอรีที่เก็บแมมโมแกรม
INITIAL_EXAM_LIST_PATH : เส้นทางที่รายการสอบครั้งแรกโดยไม่มีข้อมูลเมตาใด ๆ จะถูกเก็บไว้
PATCH_MODEL_PATH : เส้นทางที่บันทึกน้ำหนักที่บันทึกไว้สำหรับตัวจําแนกแพตช์จะถูกบันทึกไว้
IMAGE_MODEL_PATH : เส้นทางที่บันทึกน้ำหนักที่บันทึกไว้สำหรับโมเดล รูปภาพเท่านั้น
IMAGEHEATMAPS_MODEL_PATH : เส้นทางที่บันทึกน้ำหนักที่บันทึกไว้สำหรับโมเดล อิมเมจและความร้อน จะถูกบันทึกไว้
CROPPED_IMAGE_PATH : ไดเรกทอรีเพื่อบันทึก mammograms ที่ถูกครอบตัด
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 crops mammogram รอบเต้านมและทิ้งพื้นหลังเพื่อปรับปรุงเวลาในการโหลดภาพและเวลาในการเรียกใช้อัลกอริทึมการแบ่งส่วนและบันทึกภาพที่ถูกครอบตัดแต่ละภาพเป็น $PATH_TO_SAVE_CROPPED_IMAGES/short_file_path.png นอกจากนี้ยังเพิ่มข้อมูลเพิ่มเติมสำหรับแต่ละภาพและสร้างรายการภาพใหม่เป็น $CROPPED_IMAGE_LIST_PATH ในขณะที่ทิ้งรูปภาพซึ่งไม่สามารถครอบตัดได้ ตัวเลือก -อาร์กิวเมนต์แบบ Verbose พิมพ์ข้อมูลเกี่ยวกับแต่ละภาพ ข้อมูลเพิ่มเติมรวมถึงสิ่งต่อไปนี้:
window_location : ตำแหน่งของการครอบตัดหน้าต่าง WRT ภาพดั้งเดิม DICOM เพื่อให้แผนที่การแบ่งส่วนสามารถถูกครอบตัดในลักษณะเดียวกันสำหรับการฝึกอบรมrightmost_points : พิกเซลที่ไม่ใช่ศูนย์ขวาสุดหลังจากถูกพลิกอย่างถูกต้องbottommost_points : Botommost Nonzero Pixels หลังจากถูกพลิกอย่างถูกต้อง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 outputs รายการสอบใหม่พร้อมข้อมูลเมตาเพิ่มเติมถึง $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 สร้างความร้อนโดยการรวมการทำนายสำหรับแพตช์ของภาพและบันทึกเป็นรูปแบบ HDF5 ใน $HEATMAPS_PATH โดยใช้อุปกรณ์ $DEVICE_TYPE $DEVICE_TYPE อาจเป็น 'GPU' หรือ 'CPU' ควรปรับ $HEATMAP_BATCH_SIZE ขึ้นอยู่กับขนาดหน่วยความจำที่มีอยู่ อาร์กิวเมนต์เสริม --gpu-number สามารถใช้เพื่อระบุว่า GPU ใดที่จะใช้
src/modeling/run_model.py สามารถให้การคาดการณ์โดยใช้ภาพที่ถูกครอบตัดไม่ว่าจะมีหรือไม่มีความร้อน เมื่อใช้ HEATMAPS โปรดใช้ธง --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 คำสั่งนี้ทำให้การทำนายโดยใช้รูปภาพสำหรับ Epochs $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 คำสั่งนี้ทำให้การคาดการณ์โดยใช้รูปภาพและความร้อนสำหรับ Epochs $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ławJastrzębski, Thibault Févry, Joe Katsnelson, Eric Kim, Stacey Wolfson Beatriu Reig, Yiming Gao, Hildegard Toth, Kristine Pysarenko, Alana Lewin, Jiyon Lee, Krystal Airola, Eralda Mema, Stephanie Chung, Esther Hwang, Naziya Samreen
ธุรกรรม 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}
}