Ini adalah implementasi model yang digunakan untuk klasifikasi kanker payudara seperti yang dijelaskan dalam makalah kami jaringan saraf dalam meningkatkan kinerja ahli radiologi dalam skrining kanker payudara. Implementasi ini memungkinkan pengguna untuk mendapatkan prediksi kanker payudara dengan menerapkan salah satu model pretrained kami: model yang menganggap gambar sebagai input ( hanya gambar ) dan model yang mengambil gambar dan heatmap sebagai input ( gambar dan pemanasan panas ).
left_benign , right_benign , left_malignant , dan right_malignant . Kedua model bertindak dalam ujian mamografi skrining dengan empat pandangan standar (L-CC, R-CC, L-MLO, R-MLO). Sebagai bagian dari repositori ini, kami menyediakan 4 ujian sampel (dalam sample_data/images direktori dan daftar ujian yang disimpan dalam sample_data/exam_list_before_cropping.pkl ). Model generasi HeatMap dan model klasifikasi kanker diimplementasikan di Pytorch.
UPDATE (2019/10/26) : Makalah kami akan diterbitkan dalam Transaksi IEEE tentang Pencitraan Medis!
UPDATE (2019/08/26) : Kami telah menambahkan implementasi TensorFlow dari model gambar-gambar kami.
UPDATE (2019/06/21) : Kami telah menyertakan model gambar-bijaksana seperti yang dijelaskan dalam makalah yang menghasilkan prediksi berdasarkan gambar mammogram tunggal. Model ini sedikit kurang kinerja model view-wise yang digunakan di atas, tetapi dapat digunakan pada gambar mammogram tunggal yang bertentangan dengan ujian penuh.
UPDATE (2019/05/15) : Memperbaiki bug minor yang menyebabkan kolom DataFrame output ( left_malignant , right_benign ) ditukar. Perhatikan bahwa ini tidak mempengaruhi pengoperasian model.
Repositori ini dilisensikan berdasarkan ketentuan lisensi GNU AGPLV3.
Di sini kami menggambarkan cara mendapatkan prediksi dari model view-wise , yang merupakan model kinerja terbaik kami. Model ini mengambil 4 gambar dari setiap tampilan sebagai input dan output prediksi untuk setiap ujian.
bash run.shakan secara otomatis menjalankan seluruh pipa dan menyimpan hasil prediksi dalam CSV.
Kami sarankan menjalankan kode dengan GPU (diatur secara default). Untuk menjalankan kode dengan CPU saja, harap ubah DEVICE_TYPE di run.sh ke 'CPU'.
Jika menjalankan skrip Python individual, harap sertakan jalur ke repositori ini di PYTHONPATH Anda.
Anda harus mendapatkan output berikut untuk ujian sampel yang disediakan dalam repositori.
Prediksi Menggunakan Model Hanya Gambar (Ditemukan di sample_output/image_predictions.csv Secara default):
| indeks | 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 |
Prediksi Menggunakan Model Image-and-HeatMaps (ditemukan dalam sample_output/imageheatmap_predictions.csv secara default):
| indeks | 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 |
Di sini kami juga mengunggah model bijaksana gambar , yang berbeda dari dan berkinerja lebih buruk dari model view-wise yang dijelaskan di atas. Output CSV dari model view-wise akan berbeda dari model gambar-bijaksana di bagian ini. Karena model ini memiliki manfaat membuat prediksi untuk setiap gambar secara terpisah, kami membuat model ini publik untuk memfasilitasi pembelajaran transfer.
Untuk menggunakan model gambar-bijaksana , jalankan perintah seperti berikut:
bash run_single.sh " sample_data/images/0_L_CC.png " " L-CC "Di mana argumen pertama adalah jalur ke gambar mammogram, dan argumen kedua adalah tampilan yang sesuai dengan gambar itu.
Anda harus mendapatkan output berikut berdasarkan perintah contoh di atas:
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}
Kami telah menyertakan buku catatan sampel yang berisi kode untuk menjalankan pengklasifikasi dengan dan tanpa heatmaps (tidak termasuk preprocessing).
Untuk menggunakan salah satu model pretrained, input diperlukan untuk terdiri dari setidaknya empat gambar, setidaknya satu untuk setiap tampilan (L-CC, L-MLO, R-CC, R-MLO).
Mammogram 12-bit asli disimpan sebagai gambar 16-bit yang disambungkan kembali untuk melestarikan granularitas intensitas piksel, sementara masih ditampilkan dengan benar pada pemirsa gambar.
sample_data/exam_list_before_cropping.pkl berisi daftar informasi ujian sebelum preprocessing. Setiap ujian direpresentasikan sebagai kamus dengan format berikut:
{
'horizontal_flip' : 'NO' ,
'L-CC' : [ '0_L_CC' ],
'R-CC' : [ '0_R_CC' ],
'L-MLO' : [ '0_L_MLO' ],
'R-MLO' : [ '0_R_MLO' ],
} Kami berharap gambar dari tampilan L-CC dan L-MLO menghadap ke arah yang benar, dan gambar dari tampilan R-CC dan R-MLO menghadap ke arah kiri. horizontal_flip menunjukkan apakah semua gambar dalam ujian dibalik secara horizontal dari yang diharapkan. Nilai untuk L-CC , R-CC , L-MLO , dan R-MLO adalah daftar nama file gambar tanpa ekstensi dan nama direktori.
Informasi tambahan untuk setiap gambar dimasukkan sebagai kamus. Kamus semacam itu memiliki semua 4 tampilan sebagai kunci, dan nilainya adalah informasi tambahan untuk kunci yang sesuai. Misalnya, window_location , yang menunjukkan tepi atas, bagian bawah, kiri dan kanan jendela pemangkasan, adalah kamus yang memiliki 4 kunci dan memiliki 4 daftar sebagai nilai yang berisi informasi yang sesuai untuk gambar. Selain itu, rightmost_pixels , bottommost_pixels , distance_from_starting_side dan best_center ditambahkan setelah preprocessing. Deskripsi untuk atribut ini dapat ditemukan di bagian preprocessing. Berikut ini adalah contoh informasi ujian setelah memangkas dan mengekstraksi pusat optimal:
{
'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 )]
}
}Label untuk ujian yang disertakan adalah sebagai berikut:
| indeks | 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 |
Pipa terdiri dari empat tahap.
Variabel berikut yang didefinisikan dalam run.sh dapat dimodifikasi sesuai kebutuhan:
NUM_PROCESSES : Jumlah proses yang akan digunakan dalam preprocessing ( src/cropping/crop_mammogram.py dan src/optimal_centers/get_optimal_centers.py ). Default: 10.
DEVICE_TYPE : Jenis perangkat untuk digunakan dalam pembuatan dan pengklasifikasi Heatmap, baik 'CPU' atau 'GPU'. Default: 'GPU'
NUM_EPOCHS : Jumlah zaman yang akan dirata -rata dalam output dari pengklasifikasi. Default: 10.
HEATMAP_BATCH_SIZE : Ukuran batch untuk digunakan dalam pembuatan panas. Default: 100.
GPU_NUMBER : Tentukan salah satu GPU yang akan digunakan ketika beberapa GPU tersedia. Default: 0.
DATA_FOLDER : Direktori tempat mammogram disimpan.
INITIAL_EXAM_LIST_PATH : Jalur di mana daftar ujian awal tanpa metadata disimpan.
PATCH_MODEL_PATH : Jalur di mana bobot yang disimpan untuk pengklasifikasi tambalan disimpan.
IMAGE_MODEL_PATH : Jalur di mana bobot yang disimpan untuk model hanya gambar disimpan.
IMAGEHEATMAPS_MODEL_PATH : Jalur di mana bobot yang disimpan untuk model gambar-dan-heatmaps disimpan.
CROPPED_IMAGE_PATH : Direktori untuk menyimpan mammogram yang dipotong.
CROPPED_EXAM_LIST_PATH : Jalan untuk menyimpan daftar ujian baru dengan metadata cropping.
EXAM_LIST_PATH : Jalur untuk menyimpan daftar ujian baru dengan metadata tengah terbaik.
HEATMAPS_PATH : Direktori untuk menyimpan peta panas.
IMAGE_PREDICTIONS_PATH : Jalur untuk menyimpan prediksi model gambar saja .
IMAGEHEATMAPS_PREDICTIONS_PATH : Jalan untuk menyimpan prediksi model gambar-dan-pemanas .
Jalankan perintah berikut untuk memotong mammogram dan menghitung informasi tentang augmentation windows.
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 di sekitar payudara dan membuang latar belakang untuk meningkatkan waktu pemuatan gambar dan waktu untuk menjalankan algoritma segmentasi dan menyimpan setiap gambar yang dipotong menjadi $PATH_TO_SAVE_CROPPED_IMAGES/short_file_path.png menggunakan h5py. Selain itu, ini menambahkan informasi tambahan untuk setiap gambar dan membuat daftar gambar baru ke $CROPPED_IMAGE_LIST_PATH sambil membuang gambar yang gagal dipotong. Argumen -Verbos Opsional mencetak informasi tentang setiap gambar. Informasi tambahan termasuk yang berikut:
window_location : Lokasi jendela pemangkasan WRT gambar dicom asli sehingga peta segmentasi dapat dipotong dengan cara yang sama untuk pelatihan.rightmost_points : piksel nol paling kanan setelah dibalik dengan benar.bottommost_points : Bottommost non nol piksel setelah dibalik dengan benar.distance_from_starting_side : Catatan Jika celah nol-nilai antara tepi gambar dan payudara ditemukan di sisi di mana payudara mulai muncul dan dengan demikian seharusnya tidak ada celah. Bergantung pada dataset, nilai ini dapat digunakan untuk menentukan nilai yang salah dari 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 output daftar ujian baru dengan metadata tambahan ke $EXAM_LIST_PATH . Informasi tambahan termasuk yang berikut:
best_center : Titik pusat optimal jendela untuk setiap gambar. Jendela augmentasi yang digambar dengan best_center sebagai titik tengah yang tepat dapat keluar dari batas gambar. Ini biasanya terjadi ketika gambar yang dipotong lebih kecil dari ukuran jendela. Dalam hal ini, kami menempatkan gambar dan menggeser jendela menjadi di dalam gambar empuk dalam augmentasi. Lihat laporan data untuk lebih jelasnya.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 menghasilkan heatmaps dengan menggabungkan prediksi untuk tambalan gambar dan menyimpannya sebagai format HDF5 di $HEATMAPS_PATH menggunakan $DEVICE_TYPE Device. $DEVICE_TYPE dapat menjadi 'GPU' atau 'CPU'. $HEATMAP_BATCH_SIZE harus disesuaikan tergantung pada ukuran memori yang tersedia. Argumen opsional --gpu-number dapat digunakan untuk menentukan GPU mana yang akan digunakan.
src/modeling/run_model.py dapat memberikan prediksi menggunakan gambar yang dipotong baik dengan atau tanpa heatmaps. Saat menggunakan heatmaps, silakan gunakan bendera --use-heatmaps dan berikan argumen --model-path dan --heatmaps-path yang sesuai. Bergantung pada memori yang tersedia, argumen opsional --batch-size dapat disediakan. Argumen opsional lainnya --gpu-number dapat digunakan untuk menentukan GPU mana yang akan digunakan.
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 Perintah ini membuat prediksi hanya menggunakan gambar untuk Epochs $NUM_EPOCHS dengan augmentasi acak dan output rata -rata prediksi per ujian hingga $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 Perintah ini membuat prediksi menggunakan gambar dan heatmaps untuk $NUM_EPOCHS zaman dengan augmentasi acak dan output rata -rata prediksi per ujian untuk $IMAGEHEATMAPS_PREDICTIONS_PATH .
File DICOM dapat dikonversi menjadi file PNG dengan fungsi berikut, yang kemudian dapat digunakan oleh kode di repositori kami (diperlukan pustaka PYPNG 0.0.19 dan 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 ())Jika Anda menemukan kode ini bermanfaat, silakan kutip makalah kami:
Jaringan saraf dalam meningkatkan kinerja ahli radiologi dalam skrining kanker payudara
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
Transaksi IEEE tentang Pencitraan Medis
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}
}