Компьютерное зрение
Semantic Segmentation
Беспилотный автомобиль должен в 50мс понять: это дорога, это тротуар, вот пешеход #1 идёт вправо, вот пешеход #2 стоит. Bounding boxes слишком грубы - нужна попиксельная карта. Именно это делает семантическая и паноптическая сегментация.
- **Автономное вождение:** Waymo, Tesla FSD - полная сцена сегментируется за < 50мс
- **Медицина:** U-Net победил в задаче сегментации EM-снимков нейронов (ISBI 2012), сейчас стандарт для КТ/МРТ
- **Спутниковые снимки:** сегментация зданий, дорог, растительности для картографии
FCN: первая полносвёрточная сеть
В 2015 году Джонатан Лонг, Эван Шелхамер и Тревор Даррелл из UC Berkeley показали, что классификатор изображений можно превратить в попиксельный сегментатор, заменив финальные FC-слои на свёрточные. Их Fully Convolutional Network принимала изображение любого размера и впервые обучалась end-to-end на задаче сегментации. В том же году Olaf Ronneberger, Philipp Fischer и Thomas Brox предложили U-Net для биомедицинских снимков, а группа Liang-Chieh Chen начала линейку DeepLab с atrous-свёртками. Три идеи 2015 года задали направление сегментации на десятилетие вперёд.
Предварительные знания
- Свёрточные слои и pooling
- Backbone-сети и feature maps
- Метрика IoU
FCN: замена FC-слоёв на свёрточные
Классификатор изображений (AlexNet, VGG) на выходе даёт один вектор на всё изображение. Для сегментации нужен вектор на каждый пиксель. Long et al. (2015) предложили простое решение: заменить финальные FC-слои на 1×1 свёртки - тогда сеть принимает изображение любого размера и выдаёт map классов.
**Transposed convolution** (deconvolution) - обучаемый upsampling: сначала вставляет нули между входными значениями (stride), затем применяет обычную свёртку. Позволяет восстановить пространственное разрешение.
**mIoU (mean Intersection over Union)** - стандартная метрика сегментации: для каждого класса IoU = |пересечение| / |объединение| предсказанной и ground-truth масок. Среднее по всем классам.
Зачем в FCN заменять FC-слои на 1×1 свёртки?
U-Net: skip connections для точных границ
FCN теряет детали: при downsampling ×32 граница опухоли в 2 пикселя исчезает. **U-Net** (Ronneberger et al., 2015) решает это через симметричную архитектуру: encoder сжимает → decoder восстанавливает, а skip connections передают точную пространственную информацию напрямую.
Skip connections в U-Net - это concatenation (не сложение, как в ResNet). Decoder на каждом уровне получает: upsampled features (семантика глубоких слоёв) + encoder features того же уровня (точные локации границ). Вместе это позволяет сегментировать структуры в 1-2 пикселя.
- **Медицинское применение:** сегментация клеток на электронных микрофотографиях (оригинальная задача U-Net)
- **Малое количество данных:** U-Net хорошо работает с 30-50 аннотированными примерами за счёт data augmentation (elastic deformations)
- **Влияние:** U-Net стал стандартом в медицинской imaging и основой для Stable Diffusion (U-Net в diffusion models)
Чем skip connections в U-Net отличаются от residual connections в ResNet?
DeepLab: дилатационные свёртки и ASPP
Проблема maxpooling: уменьшает разрешение, теряет детали. DeepLab (Chen et al., 2015-2018) предлагает альтернативу: **atrous convolution** (dilated convolution) - свёртка с дырками, которая увеличивает рецептивное поле без уменьшения разрешения.
**DeepLabV3+ (2018)** добавляет decoder от U-Net: ASPP encoder + lightweight decoder с skip connections. Это объединило преимущества dilated convolutions (большой контекст без потери разрешения) и U-Net (точные границы через skip connections).
| Версия | Ключевая идея | VOC 2012 mIoU |
|---|---|---|
| DeepLabV1 (2015) | Dilated conv + CRF post-processing | 71.6% |
| DeepLabV2 (2016) | ASPP (multi-scale) | 79.7% |
| DeepLabV3 (2017) | Improved ASPP + BN | 85.7% |
| DeepLabV3+ (2018) | Encoder-decoder + Xception backbone | 89.0% |
**CRF (Conditional Random Field):** post-processing в ранних DeepLab, уточняющий границы через попарные энергии соседних пикселей. В DeepLabV3+ от него отказались - decoder с skip connections даёт границы не хуже.
Какое преимущество дилатационных (atrous) свёрток перед maxpooling в задаче сегментации?
Panoptic Segmentation: things и stuff вместе
Semantic segmentation помечает каждый пиксель классом, но не различает экземпляры: все машины - просто «машина». Instance segmentation (Mask R-CNN) различает экземпляры, но игнорирует аморфные области (небо, дорога). **Panoptic segmentation** объединяет оба подхода.
**Panoptic FPN** (Kirillov et al., 2019): Mask R-CNN для instance branch + semantic head поверх FPN для stuff classes. Оба используют общий FPN backbone - единственный проход через сеть даёт и instances и stuff.
- **Автономное вождение:** Tesla FSD использует паноптическую сегментацию - нужно различать пешехода #1 и пешехода #2, но не считать экземпляры дороги
- **Scene understanding:** роботы-манипуляторы должны знать и что (класс), и который именно (экземпляр) объект брать
- **Медицина:** различать экземпляры клеток (instance) + ткань/фон (semantic)
Задача panoptic segmentation отличается от semantic тем, что:
Эволюция семантической сегментации
- **FCN (2015):** замена FC на 1×1 conv + transposed conv, базовая мультимасштабность через skip connections
- **U-Net (2015):** симметричный encoder-decoder + concatenation skip connections для точных границ
- **DeepLabV3+ (2018):** dilated conv + ASPP для большого контекста без потери разрешения, 89% VOC
- **Panoptic (2019):** objects = instances + stuff = semantic, метрика PQ = SQ × RQ
Связанные темы
Сегментация строится на детекции и оперирует теми же backbone сетями.
- Two-Stage Detectors: R-CNN Family — Mask R-CNN добавляет сегментационную голову к Faster R-CNN
- Feature Pyramid Networks — FPN - общий backbone для Panoptic FPN и DeepLabV3+
Вопросы для размышления
- Почему skip connections помогают сегментации, но не так критичны для классификации изображений?
- Какой тип сегментации (semantic, instance, panoptic) нужен для системы автоматической парковки и почему?
- Как dilated convolutions с разными rate в ASPP компенсируют отсутствие нескольких масштабов входного изображения?
Связанные уроки
- cv-07 — Backbone детекции и FPN переиспользуются для плотного предсказания
- cv-09 — Instance-сегментация добавляет маски по объектам сверху
- dl-04 — Encoder-decoder CNN лежат в основе U-Net и FCN
- ml-40-segmentation — Та же задача разметки пикселей в классическом ML-курсе
- alg-12-bfs — Разметка связных компонент масок это обход графа
- ml-01