Классификатор говорит, что на картинке кошка. Сегментация показывает, какие именно пиксели — кошка, а какие — фон. Ответ становится не одним ярлыком на всё изображение, а картой того же размера: своя метка каждому пикселю. И мерить такой ответ приходится иначе — не точностью, а перекрытием.

Ярлык каждому пикселю

В уроке о распознавании сеть выдавала один ответ на всю картинку: цифра 55. Но многие задачи требуют большего. Беспилотнику мало знать, что впереди есть дорога, — ему нужно, где именно она проходит, пиксель за пикселем. Врачу мало знать, что на снимке есть опухоль, — нужны её точные границы. Это задача семантической сегментации: приписать класс каждому пикселю.

Выход сегментации — не число, а маска: изображение того же размера, где цвет каждого пикселя кодирует его класс. Различают два родственных понятия. Семантическая сегментация красит все машины в один цвет «машина», не отделяя одну от другой. Сегментация экземпляров идёт дальше и различает машину №1 и машину №2 — но это уже следующий шаг; здесь нам довольно классов. Заметим и разницу с детекцией, о которой пойдёт речь позже: та обводит объект грубой рамкой, а сегментация очерчивает его точно, по контуру.

Изображение в маску

Увидим маску на настоящем снимке. Простейший способ сегментации — сгруппировать пиксели по цвету: похожие цвета — один класс.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Три панели: исходное фото, версия сгруппированная по цвету, и дискретная маска классов, где фон, лицо, тёмная форма и светлые детали окрашены разными сплошными цветами
Рис. 34.1. Каждому пикселю — свой класс

Слева фото, справа маска: фон, лицо, тёмная форма, светлые детали окрашены разными сплошными цветами — это и есть классы пикселей. Классификация дала бы один ярлык на всё; сегментация даёт карту.

Энкодер и декодер

Как устроить сеть, которая выдаёт карту, а не число? Нужна форма, которая сперва сожмёт изображение, чтобы понять его содержание, а потом развернёт обратно до полного разрешения, чтобы разметить каждый пиксель. Это архитектура энкодер—декодер, а её знаменитый вариант — U-Net.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Схема буквой U: энкодер из сжимающихся блоков слева, бутылочное горло внизу, декодер из расширяющихся блоков справа; красные пунктирные короткие пути соединяют одноуровневые блоки энкодера и декодера
Рис. 34.2. Энкодер—декодер (U-Net)

Энкодер (слева) сжимает картинку, как знакомый конус свёрточной сети, добывая «что на картинке». Декодер (справа) расширяет её обратно до полного размера, восстанавливая «где именно». Красные короткие пути (skip) возвращают декодеру точные границы, потерянные при сжатии.

Короткие пути — ключевая находка U-Net. При сжатии теряется точное положение, зато проясняется смысл; при расширении смысл есть, но границы размыты. Skip-связи склеивают одно с другим: смысл из глубины, точные границы из ранних слоёв с их краями.

IoU вместо точности

Чем измерить качество маски? Казалось бы, пиксельной точностью — долей верно размеченных пикселей. Но она обманывает. Представьте снимок, где дорога занимает лишь 2%2\% пикселей. Модель, назвавшая всё фоном, ошибётся лишь на этих 2%2\% — и получит 98%98\% точности, не найдя дороги вовсе.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева две пересекающиеся маски истины и предсказания с формулой IoU равно пересечение делить на объединение равно 80 из 120 равно 0,67; справа столбцы: для объекта в 2, 5, 10, 30 процентов пиксельная точность 98, 95, 90, 70 процентов, а IoU объекта везде ноль
Рис. 34.3. IoU честнее точности

Слева — что такое IoU: площадь пересечения масок, делённая на площадь объединения. Справа — обман точности: для крошечного объекта ответ «всё фон» даёт высокую точность, но IoU объекта равен нулю. Оттого сегментацию меряют перекрытием, а не точностью.

IoU=предсказаноистинапредсказаноистина.\mathrm{IoU}=\frac{|\text{предсказано}\cap\text{истина}|} {|\text{предсказано}\cup\text{истина}|}.

IoU равен единице при идеальном совпадении и нулю при непересечении. Он не даёт схитрить, назвав всё фоном: пустое предсказание пересекается с объектом на нуле.

Малый объект тонет в точности

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

IoU и Dice

У перекрытия две близкие меры. IoU (Жаккар) делит пересечение на объединение. Dice делит удвоенное пересечение на сумму площадей и чуть мягче штрафует. Они однозначно связаны, так что выбор — дело привычки области.

География, а не тайлы

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

Русская линия: геометрия пикселя

Сегментация упирается в тонкий вопрос: что такое граница и связная область на дискретной пиксельной сетке? Строгую цифровую геометрию для этого развивал советский математик Владимир Ковалевский. Он показал, как корректно определить границы, связность и области на решётке пикселей, избежав парадоксов наивного подхода, — и заложил математический язык, на котором сегодня описывают маски сегментации.

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

Лаборатория сегментации

Раскрась изображение по классам

Загружается живая иллюстрация…

Порядок опытов. Перед вами настоящий снимок и его маска, где цвет каждого пикселя — это класс. Двигайте число классов: при двух картинка грубо делится на светлое и тёмное, при шести проступают тонкие области — лицо, фон, форма, награды. Табло показывает, какую долю кадра занимает крупнейшая область. Здесь классы находит группировка по цвету; настоящая сеть учит их по размеченным человеком примерам, но выход — та же карта классов, пиксель за пикселем.

Сборка: карта вместо ярлыка

Семантическая сегментация приписывает класс каждому пикселю: её ответ — маска того же размера, что и вход, а не один ярлык. Строят её архитектурой энкодер—декодер: энкодер сжимает изображение, добывая смысл, декодер разворачивает обратно до полного разрешения, а короткие пути U-Net возвращают точные границы. Мерить маску пиксельной точностью нельзя — она обманывается мелкими объектами, где «всё фон» даёт 98%98\% при нулевой пользе; вместо неё считают перекрытие, IoU или Dice, именно по классу объекта. А делить данные, особенно спутниковые, надо по географии, чтобы не подсмотреть тест у соседнего тайла. За строгостью масок стоит цифровая геометрия Ковалевского. Сеть научилась не только узнавать, но и указывать пальцем. Дальше — как находить и обводить отдельные объекты: о детекции.

Задачи