هذا تطبيق للنموذج المستخدم لتصنيف سرطان الثدي كما هو موضح في شبكاتنا العصبية العميقة الورقية تعمل على تحسين أداء أخصائيي الأشعة في فحص سرطان الثدي. يتيح التنفيذ للمستخدمين الحصول على تنبؤات لسرطان الثدي من خلال تطبيق أحد نماذجنا المسبقة: نموذج يأخذ الصور كمدخلات ( صورة فقط ) ونموذج يلتقط الصور والخرائط الحرارية كمدخلات ( خلفات الصورة والحرارة ).
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.
تحديث (2019/10/26) : سيتم نشر ورقتنا في معاملات IEEE على التصوير الطبي!
تحديث (2019/08/26) : لقد أضفنا تنفيذ TensorFlow لنموذج الصورة لدينا.
تحديث (2019/06/21) : قمنا بتضمين نموذج الصورة كما هو موضح في الورقة التي تنشئ تنبؤات بناءً على صورة تصوير الثدي بالأشعة السينية. هذا النموذج يقل عن الأداء قليلاً في نموذج العرض المستخدم أعلاه ، ولكن يمكن استخدامه على صور تصوير الثدي بالأشعة السينية المفردة بدلاً من الامتحانات الكاملة.
تحديث (2019/05/15) : تم إصلاح خلل بسيط تسبب في تبديل أعمدة DataFrame للإخراج ( left_malignant ، right_benign ). لاحظ أن هذا لا يؤثر على تشغيل النموذج.
تم ترخيص هذا المستودع بموجب شروط ترخيص GNU Agplv3.
هنا نصف كيفية الحصول على تنبؤات من نموذج العرض ، وهو نموذج أفضل أداء لدينا. يأخذ هذا النموذج 4 صور من كل طريقة عرض كتوقعات إدخال وتخرج لكل امتحان.
bash run.shسيقوم تلقائيًا بتشغيل خط الأنابيب بأكمله وحفظ نتائج التنبؤ في CSV.
نوصي بتشغيل الرمز باستخدام وحدة معالجة الرسومات (تعيين افتراضيًا). لتشغيل الرمز باستخدام وحدة المعالجة المركزية فقط ، يرجى تغيير DEVICE_TYPE في run.sh إلى "وحدة المعالجة المركزية".
في حالة تشغيل البرامج النصية الفردية 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 |
التنبؤات باستخدام نموذج الصور والحرارة (موجودة في 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 هي قائمة بأسماء ملفات الصور بدون تمديد واسم الدليل.
يتم تضمين معلومات إضافية لكل صورة كقاموس. يحتوي هذا القاموس على جميع المشاهدات الأربعة كمفاتيح ، والقيم هي المعلومات الإضافية للمفتاح المقابل. على سبيل المثال ، 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 : نوع الجهاز الذي يجب استخدامه في توليد خريطة الحرارة والمصنفات ، إما "وحدة المعالجة المركزية" أو "GPU". الافتراضي: "GPU"
NUM_EPOCHS : عدد الحقائب التي سيتم حساب متوسطها في إخراج المصنفات. الافتراضي: 10.
HEATMAP_BATCH_SIZE : حجم الدُفعة لاستخدامه في توليد خريطة الحرارة. الافتراضي: 100.
GPU_NUMBER : حدد أي من وحدات معالجة الرسومات التي يجب استخدامها عند توفر وحدات معالجة الرسومات المتعددة. الافتراضي: 0.
DATA_FOLDER : الدليل حيث يتم تخزين تصوير الثدي بالأشعة السينية.
INITIAL_EXAM_LIST_PATH : المسار الذي يتم فيه تخزين قائمة الامتحانات الأولية بدون أي بيانات تعريف.
PATCH_MODEL_PATH : المسار حيث يتم حفظ الأوزان المحفوظة لمصنف التصحيح.
IMAGE_MODEL_PATH : المسار الذي يتم فيه حفظ الأوزان المحفوظة لنموذج الصورة فقط .
IMAGEHEATMAPS_MODEL_PATH : المسار الذي يتم فيه حفظ الأوزان المحفوظة لنموذج الصور والحرارة .
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 محاصيل تصوير الثدي بالأشعة السينية حول الثدي وتجاهل الخلفية من أجل تحسين وقت تحميل الصورة ووقت تشغيل خوارزمية التجزئة وحفظ كل صورة محصورة إلى $PATH_TO_SAVE_CROPPED_IMAGES/short_file_path.png باستخدام H5py. بالإضافة إلى ذلك ، يضيف معلومات إضافية لكل صورة ويقوم بإنشاء قائمة صور جديدة إلى $CROPPED_IMAGE_LIST_PATH أثناء التخلص من الصور التي تفشل في قصتها. اختياري -الوسيطة Verbose تطبع معلومات حول كل صورة. تتضمن المعلومات الإضافية ما يلي:
window_location : موقع نافذة زراعة WRT صورة DICOM الأصلية بحيث يمكن اقتصاص خريطة التجزئة بنفس الطريقة للتدريب.rightmost_points : أقصى اليمين غير صفري بعد انقلب بشكل صحيح.bottommost_points : bottommost pixels 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 بإنشاء خرائط الحرارة عن طريق الجمع بين تنبؤات لبقع الصور وحفظها كتنسيق HDF5 في $HEATMAPS_PATH باستخدام جهاز $DEVICE_TYPE . يمكن أن يكون $DEVICE_TYPE إما "GPU" أو "وحدة المعالجة المركزية". يجب ضبط $HEATMAP_BATCH_SIZE اعتمادًا على حجم الذاكرة المتاح. وسيطة اختيارية --gpu-number لتحديد وحدة معالجة الرسومات التي يجب استخدامها.
يمكن أن يوفر src/modeling/run_model.py تنبؤات باستخدام الصور المزروعة إما مع أو بدون خريطة حرارة. عند استخدام خرائط الحرارة ، يرجى استخدام علامة --use-heatmaps وتقديم حجج --model-path المناسبة و-- --heatmaps-path . اعتمادًا على الذاكرة المتاحة ، يمكن توفير الوسيطة الاختيارية --batch-size . وسيطة اختيارية أخرى --gpu-number لتحديد وحدة معالجة الرسومات التي يجب استخدامها.
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 Beatriu Reig ، Yiming Gao ، Hildgard Toth ، Kristine Pysarenko ، Alana Lewin ، Jiyon Lee ، Krystal Airola ، Eralda Mema ، Stephanie Chung ، Esther Hwang ، Naziya Sammeren ، S. Gene Kim ، Laura hecock ، Linda Moy.
معاملات 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}
}