В этом посте мы собираемся показать способ использования генеративных состязательных сетей (GAN) для одновременной генерации медицинских изображений и соответствующих аннотаций. Для эксперимента мы используем МРТ-изображения сердца. Для разработки моделей мы используем Keras с бэкэндом.

Вступление

Автоматическое обнаружение и сегментация органов играют огромную роль в приложениях для медицинской визуализации. Например, в кардиологическом анализе автоматическая сегментация камер сердца используется для расчета сердечного объема и фракции выброса. Одна из основных проблем в этой области - отсутствие данных и аннотаций. В частности, аннотации медицинских изображений должны выполняться клиническими экспертами, что требует больших затрат и времени. В этой работе мы представляем метод одновременной генерации данных и аннотаций с использованием GAN. Учитывая нехватку данных и аннотаций в медицинских приложениях для визуализации, сгенерированные с помощью нашего метода данные и аннотации могут быть использованы для разработки алгоритмов глубокого обучения, требующих больших объемов данных.

Данные

Мы использовали набор данных MICCAI 2012 RV segmentation challenge. Для разработки алгоритма использовался обучающий набор, включающий 16 пациентов с изображениями и экспертными комментариями. Мы конвертируем аннотации в двоичные маски того же размера, что и изображения. Исходные размеры изображений / масок составляют 216 на 256. Для удобного обучения мы уменьшили разрешение изображений / масок до 32 на 32. Пример изображения и соответствующие аннотации правого желудочка (ПЖ) сердца показаны ниже.

Метод

Мы используем классическую сеть GAN с двумя блоками:

  • Генератор: сверточная нейронная сеть для генерации изображений и соответствующих масок.
  • Дискриминатор: сверточная нейронная сеть для классификации реальных изображений / масок из сгенерированных изображений / масок.

Здесь маска относится к двоичной маске, соответствующей аннотации.

Блок-схема сети представлена ​​ниже.

Алгоритм обучения

Чтобы обучить алгоритм, мы выполняем следующие шаги:

  1. Инициализировать генератор и дискриминатор случайным образом.
  2. Создайте несколько изображений / масок с помощью генератора.
  3. Обучите дискриминатор, используя собранные реальные изображения / маски (с y = 1 в качестве меток) и сгенерированные изображения / маски (с y = 0 в качестве меток).
  4. Заморозьте веса в Дискриминаторе и сложите их в Генератор (рисунок ниже).
  5. Обучите сложенную сеть, используя сгенерированные изображения с y = 1 в качестве принудительных меток.
  6. Вернитесь к шагу 2.

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

В основном это был прототип проверки концепции. Вы можете расширить его для создания данных с более высоким разрешением.

Код находится в этой тетради Юпитера.

Если вы нашли эту статью полезной, попробуйте нажать кнопку хлопка. Не стесняйтесь поделиться этой статьей на своей платформе. Вы также можете следить за мной в Twitter за последними сообщениями.

Использованная литература: