Добро пожаловать на трек 1 челленджа Смены! Как участник, вам нужно будет выполнить несколько шагов, чтобы подготовить заявку, которую мы описываем в этом посте. Если вы еще не зарегистрировались на челлендж, вы можете сделать это, перейдя по этой ссылке.

Направление 1 сосредоточено на задаче семантической сегментации сканов магнитно-резонансной томографии (МРТ) 3D FLAIR для обнаружения и точного определения областей воспаления внутри белого вещества, так называемых поражений белого вещества (WML), у пациентов с рассеянным склерозом. WML является одним из основных биомаркеров рассеянного склероза, который используется как для диагностики, так и для прогноза заболевания. Ручная аннотация МРТ, сделанная обученными специалистами, требует много времени. Поэтому разработка автоматизированного алгоритма аннотации является важной задачей. Несмотря на перспективу, которую дают модели на основе ИИ, таким решениям не хватает надежности, что является одним из препятствий для их интеграции в клинический рабочий процесс. Мы предлагаем вам решить эти проблемы во время Shifts Challenge, разработав (i) алгоритм сегментации WML и (ii) меру неопределенности для количественной оценки неопределенности в каждом вокселе прогноза модели.

Вариант 1 состоит из двух этапов: фаза разработки (этап 1) и этап тестирования (этап 2). Цель этапа разработки — познакомить всех с процессом оценки и дать возможность разработать наилучшие из возможных решений. Производительность на этапе разработки оценивается по данным разработки, dev_out, которые смещаются из данных, которые вы будете использовать для обучения своих моделей. Эти данные разработки доступны и вам. На этапе тестирования ваши модели будут оцениваться на дополнительном сдвинутом наборе данных, eval_out, который будет недоступен. Вы должны рассматривать этап разработки как возможность поэкспериментировать, а этап тестирования — как окончательную оценку ваших моделей. Официальные рейтинги основаны исключительно на результатах Фазы 2. Ознакомиться с хронологией испытания можно на странице Shifts Grand Challenge.

Текущее руководство поможет вам начать работу с треком 1 конкурса «Смены 2022», обсудив несколько тем:

  1. Загрузка данных
  2. Работа с форматом данных МРТ
  3. Запуск базового кода
  4. Представление ваших моделей

Загрузка данных

Чтобы приступить к выполнению задания, вам необходимо сначала загрузить данные из zenodo. Для этого вам нужно будет запросить доступ на веб-странице zenodo и подписать соглашение об использовании данных (DUA).

⚠️ Если в вашей команде несколько человек, каждый человек должен запросить доступ отдельно и подписать DUA. Согласно соглашению, вы не можете делиться доступом к данным с другими людьми.

После загрузки данных вы можете увидеть следующую структуру:

Здесь «best/», «ljubljana/» и «msseg/» обозначают разные местоположения медицинских центров.

Следующий уровень каталогов определяет различные разбиения данных:

  • `train/` — тренировочный набор
  • `dev_in/` — набор для разработки в домене
  • `eval_in/` — набор оценок внутри домена
  • `dev_out/` — набор для разработки вне домена
  • `unsupervised/` — немаркированные изображения FLAIR.

Примечание. Чтобы составить полные наборы для обучения, разработки и оценки, вам потребуется объединить данные из разных мест.

Третий уровень каталогов содержит различные модальности, среди которых вы можете увидеть:

  • «чутье» — 3D-сканы FLAIR, которые должны служить исходными данными для ваших моделей.
  • «gt» — трехмерные наземные двоичные маски WML.
  • «fg_mask» — трехмерные бинарные маски мозга (также известные как передний план), которые определяют область мозга и используются во время процедур оценки.
  • «t1», «t1ce», «t2» — T1w, сканы T1w с контрастным усилением и сканы T2w, зарегистрированные в пространстве FLAIR.

Примечание. FLAIR — это единственная модальность, которая принимается в качестве логического вывода. Однако вы можете использовать предоставленные T1w, T2w и немаркированные сканы FLAIR для разработки модели.

Все данные сохраняются в нейровизуализирующем формате NIfTI (с расширениями .nii/.nii.gz). Если вы не знакомы с этим форматом, не волнуйтесь! В следующем разделе мы более подробно рассмотрим, как работать с этим форматом и как конвертировать более распространенные.

Обработка снимков МРТ

NIfTI — это формат нейровизуализации, в котором хранятся не только значения контраста в каждом вокселе, но и некоторые метаданные, такие как положение изображения в мировых координатах в матрице, называемой аффинной, и некоторые сведения о сборе/сканировании. параметры в так называемом заголовке.

Давайте сначала посмотрим, как вы можете визуализировать данные. Я бы сказал, что для текущей задачи есть два способа визуализации, которые следует учитывать:

  1. Простая визуализация 3D-изображения, будь то МРТ-скан, маска сегментации WML или карта неопределенности.
  2. Визуализация 3D-изображения с наложением, например. для случаев, когда вы хотите наложить предсказанную двоичную маску WML на соответствующее сканирование FLAIR.

Для обоих типов визуализации вы можете использовать один из этих инструментов:

  1. Бесплатное программное обеспечение ITK-SNAP для отображения трехмерных медицинских изображений, которое также позволяет перемещаться по сканам и легко отображать любые нужные срезы.
  2. Библиотека python nilearn, которая использует библиотеку python matplotlib для отображения нужных фрагментов медицинского изображения.

Если вы предпочитаете использовать ITK-SNAP, сначала загрузите соответствующую версию для вашей машины. Откройте ITK-SNAP, перетащите файл .nii / .nii.gz, который вы хотите отобразить. Среди других функций вы можете рассмотреть следующие:

  • Чтобы автоматически настроить контрастность изображения для лучшей видимости изображения, найдите панель «Инспектор курсора» справа, в разделе «Интенсивность под курсором:» найдите имя файла и щелкните его правой кнопкой мыши и, наконец, нажмите «Автоматическая настройка контрастности».
  • Чтобы добавить наложение поверх загруженного изображения, перетащите двоичную или помеченную маску сегментации в текущее окно ITK-SNAP и нажмите «Загрузить как сегментацию» во всплывающем окне.
  • Чтобы настроить прозрачность наложения, посмотрите на панель «Метки сегментации» справа и отрегулируйте положение ползунка в разделе «Общая непрозрачность метки».

Пожалуйста, обратитесь к документации ITK-SNAP, чтобы узнать о других функциях, там же вы можете найти краткие руководства.

Например, чтобы отобразить изображение Nifti в блокноте Jupyter, вы можете использовать библиотеку nilearn для Python, созданную специально для поддержки формата нейровизуализации. Его можно использовать вместе с библиотекой nibabelpython для загрузки изображений из файлов .nii. Вы можете быстро установить обе библиотеки с помощью команды pip.

Чтобы отобразить фрагменты 3D-изображения Nifti, вы можете использовать функцию nilearn.plotting.plot_img(), как в приведенном ниже примере, который отображает фрагменты изображения FLAIR:

В результате появится следующий рисунок:

Вы можете настроить положение и размер отображаемого фрагмента, изменив параметры cut_coords и display_mode.

Для отображения изображения с наложением можно использовать функцию nilearn.plotting.plot_roi(). Например, чтобы наложить наземную двоичную маску WML поверх изображения FLAIR, используйте следующий скрипт:

Наконец, чтобы преобразовать загруженное изображение Nifti в пустой массив, просто используйте метод get_fdata():

Помимо упомянутых инструментов и библиотек, вам настоятельно рекомендуется ознакомиться с библиотекой Python MONAI. Это библиотека на основе PyTorch, разработанная специально для глубокого обучения медицинской визуализации. Он обеспечивает реализации различных современных архитектур и упрощает конвейеры обработки данных, предоставляя различные преобразования и повторные реализации наборов данных PyTorch и загрузчиков данных для медицинских изображений. Пожалуйста, обратитесь к их документации и учебникам для более подробной информации.

Вы можете найти наш код с реализацией базовой модели в Shifts GitHub repo, чтобы ознакомиться с использованием MONAI для конкретной задачи.

Использование базовой модели

Здесь мы обсуждаем содержимое Shifts GitHub, как использовать его для воспроизведения результатов базовой модели и как адаптировать его для оценки вашей модели. После клонирования репозитория весь код, относящийся к текущей задаче, можно найти в каталоге mswml/ следующего содержания:

  • «train.py», «inference.py», «test.py» — обучение, вывод и оценка базовой модели.
  • «data_load.py» — загрузчики данных, преобразования и наборы данных для обработки изображений NIfTI.
  • «metrics.py» и «uncertainty.py» — метрики, используемые для оценки и меры неопределенности.
  • «requirements.txt» — все библиотеки, необходимые для настройки окружения.

Давайте рассмотрим использование различных программ более подробно.

Базовая модель представляет собой ансамбль из трех архитектур 3D U-net small. Контрольные точки базовой модели можно скачать здесь. Чтобы самостоятельно запустить обучение базовой модели, используйте следующий скрипт bash:

Чтобы запустить вывод базовой модели, выполните следующую команду, которая сохранит 3D-карты вероятностей, бинарные маски сегментации и карты неопределенности обратной взаимной информации в изображениях NIfTI для всех файлов в каталоге path_data:

Предоставленный оценочный скрипт «test.py» вычисляет три показателя, усредненные по сканированиям:

  1. Нормализованная оценка Dice или сокращенно nDSC — общее качество сегментации
  2. Оценка F1 по шкале поражений — качество обнаружения поражений
  3. Площадь под кривой удержания ошибок, которая представляет собой nDSC-AAC для конкретной задачи — неопределенность + надежность и/или качество предлагаемой меры неопределенности

Чтобы оценить эти показатели для базовой модели, выполните следующую команду:

⚠️ Метрики nDSC и nDSC-AAC будут использоваться в таблице лидеров, а F1 — нет. Вы можете найти реализацию всех метрик в файле metrics.py. Если вы хотите лучше понять построение метрик, обратитесь к нашей статье (Приложения B и C.2).

Кроме того, чтобы построить кривую удержания ошибок, используйте скрипт «retention_curve.py» с аналогичными аргументами. Он сохранит значения кривой удерживания, построит кривую и отобразит nDSC-AAC.

Примечание. Вы можете использовать код Shifts GitHub для визуальной и качественной оценки предлагаемых моделей и показателей неопределенности! Вам рекомендуется оценить свои модели локально в наборах eval_in или dev_out, прежде чем отправлять их на Grand Challenge. Чтобы адаптировать предоставленный код к вашей модели, измените базовые объявления в «inference.py», «test.py», «retention_curve.py».

Отправка вашей модели

После разработки вашей модели и локального тестирования вы можете отправить свое решение на веб-сайт Grand Challenge.

Для объективной оценки представленных моделей вам не будут предоставлены оценочные данные. Следовательно, необходимо обернуть обученные модели с их кодом вывода в образ докера, который можно будет автоматически оценить. Это может показаться сложным, но не волнуйтесь, это руководство проведет вас через каждый шаг.

К этому моменту у вас должны быть сохраненные версии базовых моделей, а также копия кода логического вывода для оценки этой модели. Итак, давайте посмотрим, как отправить свою модель на примере базовой.

Модели и код вывода необходимо поместить в контейнер алгоритма. Мы предоставляем полнофункциональный Контейнер алгоритмов, который можно использовать в качестве шаблона для создания контейнера для вашего алгоритма. Далее мы пройдем все шаги, необходимые для создания контейнера.

Для начала клонируем репозиторий с шаблоном:

git clone https://github.com/VatsalRaina/AlgorithmContainer_msseg.git
cd AlgorithmContainer_msseg/Baseline

⚠️ Прежде чем мы поймем, как использовать этот репозиторий, нам нужно убедиться, что вы можете создавать образы Docker в своей локальной системе. Попытайтесь создать образ Docker, запустив сценарий build.sh. Если вам не удается успешно запустить этот файл, обратитесь к своему ИТ-администратору, чтобы убедиться, что вы можете создавать образы Docker.

Веса обученных моделей должны быть сохранены в текущем каталоге «AlgorithmContainer_msseg/Baseline» как «model1.pth», «model2.pth» и «model3.pth». Расположение этих моделей уже указано в «AlgorithmContainer_msseg/Baseline/Dockerfile», из которого будет собираться образ.

Основной код, который будет использоваться системой оценки Grand Challenge, содержится в «AlgorithmContainer_msseg/Baseline/process.py». Этот файл реализует загрузку модели и вывод по внешним файлам. Чтобы адаптировать его к вашим моделям и мерам неопределенности, вам потребуется изменить инициализацию базовой модели и код вывода (комментарии #TODO оставлены в местах, которые необходимо изменить).

Примечание: функция вывода работает с экземплярами SimpleITK.Image(), что продиктовано системой представления.

Теперь, когда базовые модели и код вывода готовы, мы выполним следующие инструкции, чтобы построить, протестировать и экспортировать контейнер нашего алгоритма.

./build.sh

Не должно быть ошибок, как раньше.

./test.sh

Убедитесь, что вы видите сообщение Тесты успешно пройдены….

./export.sh

Вы должны были сгенерировать файл .tar.gz, который необходимо загрузить на веб-страницу подачи заявок Grand Challenge для Сегментации поражений РС: Фаза 1.

Если это ваш первый контейнер алгоритма, на этой странице у вас будет возможность создать новый контейнер алгоритма. Нажмите на эту ссылку, чтобы загрузить свой контейнер алгоритма — потребуется некоторое время (максимум 1 час), чтобы ваш контейнер алгоритма был готов. Когда ваш контейнер будет готов, вернитесь на страницу отправки, чтобы сделать отправку, выбрав только что загруженный контейнер. Вот оно!

Команда Shifts желает вам удачи в челлендже!

Полезные ссылки

Контакты

Благодарности

Спасибо Ватсалу Райне и Маре Грациани за помощь в создании этого поста!