Это реализация модели, используемой для классификации рака молочной железы, как описано в нашей статье глубокие нейронные сети повышают эффективность рентгенологов в скрининге рака молочной железы. Реализация позволяет пользователям получать прогнозы рака молочной железы, применяя одну из наших предварительных моделей: модель, которая принимает изображения в качестве входных ( только изображения ) и модели, которая принимает изображения и тепловые карты в качестве входных ( изображения и удачи ).
left_benign , right_benign , left_malignant и right_malignant . Обе модели действуют на экзаменах маммографии с четырьмя стандартными представлениями (L-CC, R-CC, L-MLO, R-MLO). В рамках этого репозитория мы проводим 4 примеров экзаменов (в каталоге sample_data/images Directory и списке экзаменов, хранящиеся в sample_data/exam_list_before_cropping.pkl ). Модель генерации тепловой карты и модели классификации рака внедрены в Pytorch.
Обновление (2019/10/26) : наша статья будет опубликована в IEEE Transactions по медицинской визуализации!
Обновление (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 по умолчанию):
| индекс | левый_бенген | right_benign | левый | правый |
|---|---|---|---|---|
| 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 по умолчанию):
| индекс | левый_бенген | right_benign | левый | правый |
|---|---|---|---|---|
| 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 )]
}
}Метки для включенных экзаменов следующие:
| индекс | левый_бенген | right_benign | левый | правый |
|---|---|---|---|---|
| 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'
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 : путь, в котором сохраняются сохраненные веса для модели Image-and-Heatmaps .
CROPPED_IMAGE_PATH : каталог для экономии укороченных маммографических технологий.
CROPPED_EXAM_LIST_PATH : путь к сохранению нового списка экзаменов с метаданными Cropping.
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 Обучает маммограмму вокруг груди и отбрасывает фон, чтобы улучшить время загрузки изображения, чтобы запустить алгоритм сегментации и сохраняет каждое обрезанное изображение в $PATH_TO_SAVE_CROPPED_IMAGES/short_file_path.png с использованием h5py. Кроме того, он добавляет дополнительную информацию для каждого изображения и создает новый список изображений для $CROPPED_IMAGE_LIST_PATH , отбрасывая изображения, которые не могут обрезать. Необязательно -Averbose Argrege Распечатает информацию о каждом изображении. Дополнительная информация включает в себя следующее:
window_location : местоположение окна для обрезки wrt оригинальное изображение DICOM, так что карта сегментации может быть обрезана таким же образом для тренировок.rightmost_points : самые правые ненулевые пиксели после правильного переворачивания.bottommost_points : Bottomomost Ненулевые пиксели после правильного переворачивания.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 может быть «графическим процессором» или «ЦП». $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 ())Если вы нашли этот код полезным, пожалуйста, процитируйте нашу статью:
Глубокие нейронные сети улучшают эффективность рентгенологов в скрининге рака молочной железы
Нан Ву, Джейсон Пханг, Джунгку Парк, Икиу Шен, Чжэ Хуанг, Маша Зорин, Станислав Джастрцбки, Тибо Феври, Джо Катснельсон, Эрик Ким, Стейси Вольфсон, Уджас Парих, Сушма Гаддам, Ленг Ленг Ленг Линг Линг. Беатрий Рейг, Йиминг Гао, Хильдегард Тот, Кристин Писаренко, Алана Левин, Джион Ли, Кристал Аймола, Эральда Мема, Стефани Чунг, Эстер Хванг, Назия Самрин, С. Джин Ким, Лора Хикок, Линда Мой, Кьянгьян.
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}
}