Dies ist eine Implementierung des Modells, das für die Klassifizierung von Brustkrebs verwendet wird, wie in unserer Arbeit beschrieben, dass tiefe neuronale Netze die Leistung der Radiologen beim Brustkrebs -Screening verbessern. Mit der Implementierung können Benutzer Brustkrebsvorhersagen erhalten, indem sie eines unserer vorgezogenen Modelle anwenden: ein Modell, das Bilder als Eingabe ( nur Bild ) und ein Modell aufnimmt, das Bilder und Wärme als Eingabe ( Bild- und Heatmaps ) aufnimmt.
left_benign , right_benign , left_malignant und right_malignant . Beide Modelle wirken auf das Screening von Mammographieprüfungen mit vier Standardansichten (L-CC, R-CC, L-MLO, R-MLO). Als Teil dieses Repositorys geben wir 4 Beispielprüfungen an (in sample_data/images -Verzeichnis und Prüfungsliste, die in sample_data/exam_list_before_cropping.pkl gespeichert sind). Modelle zur Erzeugung von Heatmap -Generationen und Krebsklassifizierung werden in Pytorch implementiert.
Update (2019/10/26) : Unser Papier wird in den IEEE -Transaktionen zur medizinischen Bildgebung veröffentlicht!
Update (2019/08/26) : Wir haben eine Tensorflow-Implementierung unseres Bildmodells hinzugefügt.
UPDATE (2019/06/21) : Wir haben das Bildmodell aufgenommen, wie in dem Papier beschrieben, das Vorhersagen basierend auf einem einzelnen Mammogrammbild erzeugt. Dieses Modell unterliegt das oben verwendete Ansichtsmodell leicht, kann jedoch für einzelne Mammogrammbilder im Gegensatz zu vollständigen Prüfungen verwendet werden.
UPDATE (2019/05/15) : Ein kleiner Fehler behoben, der die Spalten der Ausgabedaten ( left_malignant , right_benign ) ausgetauscht hat. Beachten Sie, dass dies den Betrieb des Modells nicht beeinflusst.
Dieses Repository ist gemäß den Bestimmungen der GNU AGPLV3 -Lizenz lizenziert.
Hier beschreiben wir, wie Sie Vorhersagen vom Sichtmodell erhalten, was unser bestes Leistungsmodell ist. Dieses Modell nimmt 4 Bilder aus jeder Ansicht als Eingabe- und Ausgabevorhersagen für jede Prüfung auf.
bash run.shFährt automatisch die gesamte Pipeline aus und speichert die Vorhersageergebnisse in CSV.
Wir empfehlen, den Code mit einer GPU auszuführen (standardmäßig festgelegt). Um den Code nur mit CPU auszuführen, ändern Sie bitte DEVICE_TYPE in run.sh in 'cpu'.
Wenn Sie die einzelnen Python -Skripte ausführen, fügen Sie bitte den Pfad zu diesem Repository in Ihren PYTHONPATH auf.
Sie sollten die folgenden Ausgänge für die im Repository bereitgestellten Beispielprüfungen erhalten.
Vorhersagen unter Verwendung von Bild-Nur-Bild -Modell (gefunden in sample_output/image_predictions.csv standardmäßig):
| Index | links_benign | Right_Benign | links_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 |
Vorhersagen mit Bild- und Heatmaps -Modell (gefunden in sample_output/imageheatmap_predictions.csv standardmäßig):
| Index | links_benign | Right_Benign | links_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 |
Hier laden wir auch das Bild-Weise hoch, das sich von der oben beschriebenen Ansichtsmodell unterscheidet und schlechter wird. Die CSV-Ausgabe vom Ansichtsmodell unterscheidet sich von dem des Bildmodells in diesem Abschnitt. Da dieses Modell den Vorteil hat, Vorhersagen für jedes Bild getrennt zu erstellen, machen wir dieses Modell öffentlich, um das Lernen von Transfer zu erleichtern.
Führen Sie einen Befehl wie folgt aus, um das bildbezogene Modell zu verwenden:
bash run_single.sh " sample_data/images/0_L_CC.png " " L-CC "Wenn das erste Argument Pfad zu einem Mammogrammbild ist und das zweite Argument die Ansicht ist, die diesem Bild entspricht.
Sie sollten die folgende Ausgabe basierend auf dem obigen Beispielbefehl erhalten:
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}
Wir haben ein Beispiel -Notizbuch aufgenommen, das Code zum Ausführen der Klassifizierer mit und ohne Wärme enthält (ausgenommen die Vorverarbeitung).
Um eines der vorbereiteten Modelle zu verwenden, muss der Eingang aus mindestens vier Bildern bestehen, mindestens eines für jede Ansicht (L-CC, L-MLO, R-CC, R-MLO).
Die ursprünglichen 12-Bit-Mammogramme werden als skalierte 16-Bit-Bilder gespeichert, um die Granularität der Pixelintensitäten zu bewahren, während sie in den Bildbetrieben korrekt angezeigt werden.
sample_data/exam_list_before_cropping.pkl enthält eine Liste von Prüfungsinformationen vor der Vorverarbeitung. Jede Prüfung wird als Wörterbuch mit dem folgenden Format dargestellt:
{
'horizontal_flip' : 'NO' ,
'L-CC' : [ '0_L_CC' ],
'R-CC' : [ '0_R_CC' ],
'L-MLO' : [ '0_L_MLO' ],
'R-MLO' : [ '0_R_MLO' ],
} Wir erwarten, dass Bilder von L-CC und L-MLO Ansichten der rechten Richtung gegenüberstehen, und Bilder von R-CC und R-MLO Ansichten richten sich nach links. horizontal_flip gibt an, ob alle Bilder in der Untersuchung horizontal von den Erwartungen umgedreht werden. Die Werte für L-CC , R-CC , L-MLO und R-MLO sind Liste der Bilddateinamen ohne Erweiterung und Verzeichnisnamen.
Zusätzliche Informationen für jedes Bild werden als Wörterbuch enthalten. Ein solches Wörterbuch hat alle 4 Ansichten als Schlüssel, und die Werte sind die zusätzlichen Informationen für den entsprechenden Schlüssel. Zum Beispiel ist window_location , das die oberen, unten, linken und rechten Kanten des Schnittfensters angibt, ein Wörterbuch mit 4 Tasten und 4 Listen als Werte, die die entsprechenden Informationen für die Bilder enthalten. Zusätzlich werden nach der Vorverarbeitung rightmost_pixels , bottommost_pixels , distance_from_starting_side und best_center hinzugefügt. Beschreibung für diese Attribute finden Sie im Abschnitt Vorverarbeitungsabschnitt. Das Folgende ist ein Beispiel für Prüfungsinformationen nach dem Anschneiden und Extrahieren optimaler Zentren:
{
'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 )]
}
}Die Etiketten für die enthaltenen Prüfungen sind wie folgt:
| Index | links_benign | Right_Benign | links_malignant | Right_Malignant |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 2 | 1 | 0 | 0 | 0 |
| 3 | 1 | 1 | 1 | 1 |
Die Pipeline besteht aus vier Stufen.
Die folgenden Variablen, die in run.sh definiert wurden, können nach Bedarf geändert werden:
NUM_PROCESSES : Die Anzahl der Prozesse, die in der Vorverarbeitung verwendet werden sollen ( src/cropping/crop_mammogram.py und src/optimal_centers/get_optimal_centers.py ). Standard: 10.
DEVICE_TYPE : Gerätetyp für die Erzeugung und Klassifikatoren von Heatmap, entweder 'CPU' oder 'GPU'. Standard: 'GPU'
NUM_EPOCHS : Die Anzahl der Epochen, die bei der Ausgabe der Klassifizierer gemittelt werden sollen. Standard: 10.
HEATMAP_BATCH_SIZE : Die Stapelgröße für die Wärmeerzeugung. Standard: 100.
GPU_NUMBER : Geben Sie an, welche GPUs zu verwenden sind, wenn mehrere GPUs verfügbar sind. Standard: 0.
DATA_FOLDER : Das Verzeichnis, in dem das Mammogramm gespeichert wird.
INITIAL_EXAM_LIST_PATH : Der Pfad, in dem die erste Prüfungsliste ohne Metadaten gespeichert ist.
PATCH_MODEL_PATH : Der Pfad, in dem die gespeicherten Gewichte für den Patch -Klassifizierer gespeichert werden.
IMAGE_MODEL_PATH : Der Pfad, in dem die gespeicherten Gewichte für das nur Bild- Modell gespeichert sind.
IMAGEHEATMAPS_MODEL_PATH : Der Pfad, in dem das Modell des Bild- und Heatmaps gespeichert ist, wird gespeichert.
CROPPED_IMAGE_PATH : Das Verzeichnis zum Speichern von Mammogrammen der Kälte.
CROPPED_EXAM_LIST_PATH : Der Pfad zum Speichern der neuen Prüfungsliste mit Anbausmetadaten.
EXAM_LIST_PATH : Der Pfad zum Speichern der neuen Prüfungsliste mit den besten Center -Metadaten.
HEATMAPS_PATH : Das Verzeichnis zum Speichern von Heatmaps.
IMAGE_PREDICTIONS_PATH : Der Pfad zum Speichern von Vorhersagen des nur Bildmodells .
IMAGEHEATMAPS_PREDICTIONS_PATH : Der Pfad zum Speichern von Vorhersagen von Bild- und Heatmaps- Modell.
Führen Sie die folgenden Befehle aus, um Mammogramme zu ernte und Informationen zu Augmentationsfenstern berechnen.
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 Ernte Die Mammographie um die Brust und verwirft den Hintergrund, um die Bild- und Zeit -Zeit -Zeit zu verbessern, um den Segmentierungsalgorithmus auszuführen, und speichert jedes verkündete Bild auf $PATH_TO_SAVE_CROPPED_IMAGES/short_file_path.png unter Verwendung von H5Py. Zusätzlich werden zusätzliche Informationen für jedes Bild hinzugefügt und eine neue Bildliste zu $CROPPED_IMAGE_LIST_PATH erstellt, während sie Bilder abwerfen, die es nicht ernte. Optional --Verbose Argument druckt Informationen zu jedem Bild aus. Die zusätzlichen Informationen enthalten die folgenden:
window_location : Speicherort des Schnittfensters.rightmost_points : Nach rechts ungleich Null Pixel nach korrekter Umdrehung.bottommost_points : Bottommost -Pixel von ungleich Null, nachdem sie korrekt gedreht wurden.distance_from_starting_side : Aufzeichnungen, wenn der Nullwert zwischen der Bildkante und der Brust in der Seite gefunden wird, an der die Brust angezeigt wird, und somit keine Lücke gewesen sein sollte. Abhängig vom Datensatz kann dieser Wert verwendet werden, um den falschen Wert von horizontal_flip zu bestimmen. 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 gibt eine neue Prüfungsliste mit zusätzlichen Metadaten auf $EXAM_LIST_PATH aus. Die zusätzlichen Informationen enthalten die folgenden:
best_center : Optimaler Mittelpunkt des Fensters für jedes Bild. Die mit best_center als exakten Mittelpunkt gezogenen Augmentationsfenster können außerhalb der Grenze des Bildes gehen. Dies geschieht normalerweise, wenn das verkaufte Bild kleiner als die Fenstergröße ist. In diesem Fall padeln wir das Bild und verschieben das Fenster in das gepolsterte Bild in Augmentation. Weitere Informationen finden Sie im Datenbericht.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 erzeugt Wärme, indem Vorhersagen für Bilderflächen kombiniert und als HDF5 -Format in $HEATMAPS_PATH unter Verwendung von $DEVICE_TYPE -Gerät gespeichert werden. $DEVICE_TYPE kann entweder 'GPU' oder 'CPU' sein. $HEATMAP_BATCH_SIZE sollte je nach verfügbarer Speichergröße angepasst werden. Ein optionales Argument --gpu-number kann verwendet werden, um anzugeben, welche GPU verwendet werden soll.
src/modeling/run_model.py kann Vorhersagen unter Verwendung von Kaufbildern entweder mit oder ohne Wärmemaps liefern. Verwenden Sie bei der Verwendung von Heatmaps das Flag --use-heatmaps Flag und geben Sie die Argumente --model-path und --heatmaps-path an. Abhängig vom verfügbaren Speicher kann das optionale Argument --batch-size bereitgestellt werden. Ein weiteres optionales Argument --gpu-number kann verwendet werden, um anzugeben, welche GPU verwendet werden soll.
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 Dieser Befehl macht Vorhersagen nur mit Bildern für $NUM_EPOCHS epochs mit zufälliger Augmentation und Ausgängen gemittelte Vorhersagen pro Prüfung an $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 Dieser Befehl macht Vorhersagen unter Verwendung von Bildern und Wärme für $NUM_EPOCHS epochs mit zufälliger Augmentation und Ausgängen gemittelte Vorhersagen pro Prüfung an $IMAGEHEATMAPS_PREDICTIONS_PATH .
DICOM -Dateien können mit der folgenden Funktion in PNG -Dateien konvertiert werden, die dann vom Code in unserem Repository verwendet werden können (PYPNG 0.0.19 und Pydicom 1.2.2 Bibliotheken sind erforderlich).
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 ())Wenn Sie diesen Code nützlich fanden, zitieren Sie bitte unser Papier:
Tiefe neuronale Netze verbessern die Leistung der Radiologen beim Brustkrebs -Screening
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 Gaden, L L. 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 Heaccock, Linda Moy, Kyunghya, Krzysztof.
IEEE -Transaktionen zur medizinischen Bildgebung
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}
}