Архитектура U-Net: encoder, decoder и skip-connections
U-Net - это сверточная нейронная сеть, предложенная в 2015 году для сегментации биомедицинских изображений. Её ключевая идея: симметричная U-образная форма, где encoder сжимает входное изображение до компактного представления, а decoder восстанавливает пространственную детализацию через skip-connections - прямые соединения с симметричными уровнями encoder. Сеть обучается на малых выборках и сегодня используется от медицины до спутниковых снимков. Чтобы сразу увидеть, как меняются каналы и разрешение по уровням, покрутите калькулятор ниже - а дальше разберём каждый блок строго.
Encoder: путь сжатия
Encoder U-Net - это последовательность блоков понижения разрешения. Каждый блок состоит из двух свёрточных слоев Conv 3x3 с ReLU и операции max-pooling 2x2, которая вдвое уменьшает пространственное разрешение. При этом число каналов (фильтров) удваивается на каждом уровне.
Если обозначить число базовых фильтров как , то последовательность каналов по уровням encoder выглядит так:
Для оригинальной статьи , что даёт последовательность каналов. Число обучаемых параметров одного свёрточного слоя 3x3:
где и - числа входных и выходных каналов, - размер ядра, - смещение (bias) на каждый фильтр.
Важная особенность: свёртки в U-Net оригинальной статьи - без дополнения (padding=0), что делает выходные карты чуть меньше входных на каждом слое. Это требует кропа при skip-connections. В современных реализациях чаще используют padding=1 (same-padding) - тогда размеры совпадают точно.
Bottleneck: самый глубокий уровень
В основании U-образной архитектуры находится bottleneck - блок с максимальным числом каналов и минимальным пространственным разрешением. Для bottleneck содержит канала. При входе разрешение в bottleneck составляет около пикселей.
Bottleneck захватывает глобальный контекст: на таком маленьком разрешении каждый «пиксель» карты активаций видит рецептивное поле, охватывающее большую часть входного изображения. Именно это позволяет сети принимать решения о классификации с учётом широкого окружения.

Skip-connections: зачем соединять encoder и decoder
Skip-connections - главная инновация U-Net. Каждому уровню decoder соответствует симметричный уровень encoder: карты активаций с encoder конкатенируются (по оси каналов) с картами decoder перед свёрткой.
Почему это критически важно? Encoder в процессе сжатия неизбежно теряет точную пространственную информацию - где именно находится граница объекта. Decoder по bottleneck-представлению знает «что» есть на изображении, но не «где» точно. Skip-connections передают детализацию напрямую: высокочастотные признаки с ранних слоев encoder (края, текстуры) соединяются с семантическими картами decoder.
Формально, если decoder на уровне получает карту размером , а соответствующий уровень encoder дал карту размером , то вход следующего свёрточного блока decoder:
где - операция upsampling (транспонированная свёртка или билинейная интерполяция).
Decoder: восстановление разрешения
Decoder зеркально повторяет encoder. На каждом уровне: upsampling (увеличение разрешения вдвое), конкатенация со skip-connection, два блока Conv 3x3 + ReLU. Число каналов вдвое уменьшается:
Первый элемент в каждой паре - каналы с decoder предыдущего уровня после upsampling, второй - каналы со skip-connection.
В конце - финальный свёрточный слой Conv 1x1, который проецирует каналов в каналов числа классов: именно этот слой выдаёт сегментационную маску. Число его параметров:
Формула числа параметров
Суммарное число параметров U-Net с уровнями (не считая bottleneck):
Для стандартных гиперпараметров (, входной канал = 1, 2 класса) это около 31 млн параметров - число, характерное для классической U-Net.
Рецептивное поле и глубина архитектуры
Рецептивное поле (receptive field) - область входного изображения, на которую влияет один нейрон в данном слое. Для одного Conv 3x3 рецептивное поле равно . После двух последовательных Conv 3x3 оно становится . После каждого max-pool 2x2 рецептивное поле в пространстве исходного изображения удваивается.
На уровне bottleneck с 4 шагами max-pool рецептивное поле охватывает участок пикселей при входе . Это означает, что сеть «видит» крупные объекты целиком и способна принимать решение о их классе с полным контекстом. При этом skip-connections возвращают детализацию для точной локализации границ.
Именно поэтому U-Net выигрывает у FCN (fully convolutional network) без skip-connections: FCN теряет детализацию при восстановлении разрешения, тогда как U-Net её сохраняет через прямые соединения.
Обучение на малых выборках и аугментация
Одна из ключевых практических причин популярности U-Net в биомедицине - способность обучаться на небольших размеченных наборах данных (десятки-сотни изображений). Авторы оригинальной статьи обучили сеть на 30 изображениях клеток EM-микроскопии и получили state-of-the-art результат.
Это стало возможным благодаря двум факторам. Во-первых, extensive data augmentation: случайные эластические деформации, флипы, повороты, изменение яркости и контраста. Эластические деформации особенно эффективны для биологических структур, форма которых варьирует естественным образом.
Во-вторых, взвешенная функция потерь. Для задач с тонкими границами между объектами (разделение клеток) веса потерь у пограничных пикселей увеличиваются. Карта весов предвычисляется по формуле:
где и - расстояния до границ двух ближайших объектов, , px. Это буквально «штрафует» модель за ошибки на границах между соседними клетками.
Варианты и расширения U-Net
Оригинальная U-Net породила целое семейство архитектур. U-Net++ вводит вложенные skip-connections для более плавного перехода между уровнями - вместо прямой конкатенации encoder-decoder каждый skip-путь проходит через несколько промежуточных узлов. Attention U-Net добавляет механизм внимания к skip-connections, обучая сеть подавлять несущественные пространственные признаки.
ResU-Net заменяет простые conv-блоки на residual-блоки (с остаточным соединением внутри каждого уровня), что упрощает обучение глубоких версий сети. TransUNet и Swin-UNet заменяют часть encoder на transformer-блоки, получая глобальный контекст уже на ранних уровнях.
Выбор числа уровней и зависит от задачи. Для небольших объектов на высоком разрешении нужно больше уровней encoder (глубже bottleneck, шире рецептивное поле). Для задач с малым числом классов и большими однородными областями достаточно мелкой U-Net с .
Частые ошибки
- Путаница с padding. В оригинальной U-Net padding=0: карты уменьшаются на 2 px на каждый Conv 3x3. При skip-connection нужно кропировать карту encoder до размера decoder. В современных реализациях used padding=1 - проверяйте документацию своего фреймворка.
- Неправильный подсчёт параметров. Входная размерность у первого decoder-слоя на уровне - сумма каналов skip + upsampled decoder (конкатенация, а не сложение).
- Игнорирование batch normalization. Оригинальная U-Net не использует batch norm (2015), но современные варианты добавляют её между Conv и ReLU - это меняет число параметров и нормы.
- Перепутаны upsample и transpose conv. Билинейная интерполяция не имеет обучаемых параметров; транспонированная свёртка - имеет. Это влияет на общий подсчёт.
- Забытый финальный слой. Conv 1x1 в конце имеет параметров - при большом числе классов вклад заметен.
FAQ
Почему U-Net называется U-Net? Из-за формы архитектуры на схеме: encoder идёт «вниз» (уменьшение разрешения), decoder идёт «вверх» (восстановление), и вся схема образует букву U. Skip-connections - это «горизонтальные перемычки» между симметричными уровнями.
Зачем нужен bottleneck, если он сжимает информацию? Bottleneck вынуждает сеть сформировать компактное глобальное представление. Без него decoder не «видел» бы широкого контекста и опирался только на локальные признаки. Именно на уровне bottleneck сеть «понимает», что перед ней клетка, сосуд или опухоль - а не просто граница.
Можно ли использовать U-Net не для медицины? Да. U-Net успешно применяется для сегментации спутниковых снимков (дороги, здания, сельхозугодья), промышленного контроля качества (дефекты материалов), вождения (разметка дороги, пешеходы). Архитектура универсальна: любая задача попиксельной классификации - её область.
Коротко
U-Net - это симметричная энкодер-декодерная сеть с skip-connections. Encoder из уровней на каждом шаге удваивает число каналов (начиная с ) и вдвое уменьшает пространственное разрешение через max-pooling. Bottleneck достигает каналов и минимального разрешения. Decoder зеркально восстанавливает разрешение через upsampling, конкатенируя карты со skip-connections. Финальный Conv 1x1 выдаёт -канальную сегментационную маску. Число параметров Conv 3x3 слоя: ; для классической U-Net с это около 31 миллиона параметров.
Читайте также

Абстрактный класс и интерфейс: в чём отличие
Абстрактный класс и интерфейс: чем отличаются в ООП, когда наследовать поведение, а когда задавать контракт, как выбрать на примерах Java, C# и Python.

Алгоритм AdaBoost: как слабые классификаторы дают сильный
Алгоритм AdaBoost простыми словами: адаптивный бустинг, перевзвешивание объектов, формула веса классификатора, итоговый ансамбль и разбор шага на примере с формулами.

Алгоритм CatBoost: бустинг с обработкой категорий
Алгоритм CatBoost простыми словами: упорядоченный бустинг против сдвига прогноза, кодирование категориальных признаков через ordered target statistics, симметричные деревья и разбор типовых задач.