Автор: Илья Бакалец
Редактура: Марк Страхов, Тимур Фатыхов
Ранее в обзорах статей мы рассматривали архитектуры нейронных сетей для решения задачи классификации. Сейчас мы предлагаем вам разобраться с архитектурой U-net для решения задачи семантической сегментации. Эта информация будет полезной, поскольку такая задача (в различных своих вариантах) присутствует в арсенале любого CV инженера.
В основе нашего поста — оригинал статьи “U-Net: Convolutional Networks for Biomedical Image Segmentation”. В современных библиотеках реализация архитектуры может отличаться (причем существенно).
Давайте сначала разберемся с понятиями:
Вторая задача сложнее первой: она требует не только сегментации объектов на изображении, но и различения экземпляров одного и того же класса объектов. Поэтому для задачи instance segmentation обычно используются более сложные модели (например, Mask R-CNN).
На рисунке ниже представлен пример маски (segmentation map) для задачи семантической сегментации, где каждый пиксель отнесен к определенному классу. Данные взяты с https://www.cityscapes-dataset.com.
Рисунок 1. Segmentation map
Авторы статьи реализовали архитектуру из двух частей: contracting path (левая часть) и expansive path (правая часть). Давайте рассмотрим на изображении ниже схематическое представление архитектуры U-net:
Рисунок 2. Архитектура U-net
На этом рисунке мы видим: в левой части схемы располагается обычная сверточная нейронная сеть — encoder, а в правой части — decoder. И каждый промежуточный результат encoder’a перед операцией max pooling конкатенируется (skip-connection) с промежуточным результатом правой части архитектуры. Это решает проблему потери информации из-за операции max-pooling.
В оригинальной статье нейронная сеть обучалась на одноканальных биологических снимках, поэтому входное изображение было размером 572х572х1.
При обучении на цветных данных (RGB) входной тензор будет иметь количество каналов, равное 3-ем.