В этой статье я расскажу, как можно реализовать оригинальную структуру U-Net с помощью PyTorch для сегментации медицинских изображений. Сначала я начну с обзора архитектуры U-Net и того, как она творит чудеса; там после реализации PyTorch будет представлена.

U-Net, обзор

U-Net была впервые представлена ​​в 2015 году исследовательской группой Фрайбургского университета. Если вы еще не читали статью, я настоятельно рекомендую сделать это Ссылка. Из изображения архитектуры U-Net, которое видно вверху, становится понятно, откуда взялось название U-Net. U-Net является полностью сверточной сетью и состоит из двух сторон (левой и правой), называемых кодером и декодером. Кодер кодирует изображения в пространство признаков небольшого размера, применяя ядра, а декодер отображает эту информацию в пространственную категоризацию для выполнения сегментации. Ключевой характеристикой U-Net является то, что вход каждого уровня кодировщика также объединяется с выходом соответствующего ему декодера, это называется остаточным соединением или пропускным соединением. Остаточные соединения позволяют информации проходить через сеть напрямую, без применения нелинейной функции активации (см. примечание ниже). При выполнении нескольких операций в кодере некоторая пространственная информация теряется, и связь (остаточное соединение) между кодером и декодером способна восстановить эту потерянную информацию, которая создает характеристику сегментации.

Кодер и декодер отличаются противоположным образом, поскольку кодер выполняет так называемые свертки вниз, а декодер — свертки вверх. Это важно, поскольку с помощью методов заполнения и объединения с помощью сверток создается пространство признаков изображения, которое затем переносится обратно в пространственную карту, так что связь между пикселями в изображении сохраняется. Восходящие и нисходящие свертки аналогичны идее концентрации интересующей информации в нисходящих свертках с последующим разбавлением восходящей свертки таким образом, что восстанавливается только интересующая информация.

Примечание: я понимаю, как работают остаточные соединения, но я не совсем понимаю, почему они работают. Я слышал, что они напоминают идею ансамблевых методов, но я все еще нахожу это немного запутанным. Если у кого-то есть четкое объяснение, не стесняйтесь комментировать ниже.

Реализация PyTorch

В этом разделе сначала будет представлена ​​основная архитектура U-Net, а затем будет представлен пример цикла обучения с использованием данных реальных медицинских изображений.

Модель U-net:

Заставьте его делать что-то классное:

Здесь мы будем обучать модель U-Net, представленную выше, на гистологических изображениях толстой кишки, которые изначально были представлены на конкурсе GlaS. Это был исследовательский конкурс, в котором команды исследователей со всего мира соревновались в задаче сегментации; смотрите ссылку на скачивание данных и читайте подробнее о конкурсе Ссылка.

Сначала мы определим функцию, которая получает данные изображения из файла, нормализует изображение и изменяет его размер (исходные изображения имеют разные размеры, и я заметил более быстрые и лучшие результаты, когда изображения изменены до 128X128). I функция принимает в качестве входных данных путь, по которому расположены обе папки (одна папка, содержащая «исходные» изображения, и одна папка, содержащая аннотации), с какого номера изображения должна начинаться функция и на каком изображении функция должна останавливаться.

Просмотр одного изображения и соответствующей маски выглядит так, как показано ниже:

Теперь, когда изображения могут быть загружены правильно, мы можем перейти к обучению сети. Я использовал Google Colab для обучения, так как они обеспечивают приятную среду в стиле ноутбука с уже установленным большинством стандартных пакетов и 12 ГБ бесплатного использования графического процессора. Используемый обучающий цикл выглядит следующим образом:

После обучения модель была оценена на тестовом наборе и получила оценку IoU 0,325 и оценку F1 0,789. Потеря модели, а также пример исходной и предсказанной маски можно увидеть ниже.

Заключение

Полную версию используемой записной книжки смотрите по ссылке ниже. Результаты U-Net меняются при настройке таких параметров, как функция потерь и размер изображения. U-Net — одна из самых известных архитектур для сегментации медицинских изображений, и из-за ее популярности были созданы разработки, основанные на исходной структуре U-Net, такие как UNet++ и ResUNet++. Я надеюсь, что вы нашли эту статью полезной, если у вас есть какие-либо советы или предложения, пожалуйста, оставьте комментарий ниже.

Полный блокнот: https://colab.research.google.com/drive/1Nzv1rfI1_C-_j9yJGUk-OQ-OKMfkKAfE?usp=sharing