Почему сегментация изображений ломается на реальных данных
Модель, которая на публичном наборе вроде COCO отдаёт аккуратные маски, на производственных снимках проваливается по целым классам. Причина обычно не в архитектуре: в открытой разметке классы сбалансированы, свет ровный, объекты сняты с одной точки. Реальные данные приходят из разных цехов и с разных камер — с бликами, пылью, перекрытиями, — и средняя метрика по выборке остаётся приличной, пока редкий класс не уходит в ноль.
Источников потерь четыре, и они складываются. Несбалансированные классы: если дефект занимает доли процента пикселей, базовая функция потерь просто игнорирует его — нужны веса классов, таргетные аугментации и стратифицированная проверка, иначе модель «учится» предсказывать фон. Дрейф данных между партиями: смена камеры, освещения или сезона смещает распределение цветов и контраста, и точность проседает на новых поставках, хотя на отложенной выборке из прошлой партии всё стабильно.
Дальше — качество разметки и шум на снимках. Разные аннотаторы по-разному трактуют границу дефекта, полигоны «гуляют» на несколько пикселей, а часть объектов вообще пропущена — модель воспроизводит эту неопределённость как ошибку. Сенсорный шум, пересвет от лампы и смаз от движения добавляют ложные срабатывания на текстурах. Сильнее всего это бьёт по ошибкам на границах объектов: маска формально есть, но контур размыт, и любая метрика площади или линейного размера считается неверно.
Разбираем, как это закрывается: стратификация выборки, консенсус-разметка, контроль дрейфа и постобработка контуров.
Измеримый эффект: точность, скорость конвейера, ручная проверка
Что меняется в первую очередь — доля кадров, которые человек обязан просмотреть глазами. До внедрения маска строится, но порог уверенности выставлен с запасом, поэтому на проверку уходит заметная часть потока, включая заведомо пустые области. После калибровки порога по размеченной контрольной выборке на ручной досмотр остаётся только спорный класс: выход за доверительный интервал, редкие объекты, снимки, где маска задевает границу зоны интереса. Доля ручной проверки падает с десятков процентов до единиц, и отдельно контролируется, что пропуски при этом не растут.
Вторая метрика — стабильность качества на новых данных. Мы смотрим результат не только на отложенной выборке, но и на партиях, снятых в других условиях: другое освещение, другая камера, смещённый ракурс, иная плотность объектов в кадре. Если разброс между партиями укладывается в согласованный допуск, конвейер готов к потоку; если нет — добавляем примеры проблемного класса, дообучаем и перепроверяем заново, а не подкручиваем порог вручную.
Скорость обработки партии определяется не только самой моделью, но и обвязкой вокруг неё: предобработка, нарезка крупных снимков на фрагменты, агрегация масок и постобработка границ. Здесь выигрыш даёт отказ от лишних проходов — например, лёгкая модель отсеивает пустые фрагменты, и тяжёлая работает только там, где есть что сегментировать. Партия, которая раньше обрабатывалась часами, укладывается в минуты, причём время на кадр перестаёт зависеть от его насыщенности.
Повторяемость результата — то, что заказчик проверяет первым при приёмке. Один и тот же снимок при одном и том же наборе весов и настроек даёт одну и ту же маску, а каждая версия модели и её параметры фиксируются в журнале: видно, чем обработан конкретный кадр и что изменится при откате. Без этого метрики ничего не значат — улучшение на новых данных невозможно отличить от случайного разброса. Поэтому цифры по точности, скорости и доле ручной проверки мы сдаём вместе с воспроизводимым протоколом прогона, а не отдельным отчётом.
Режимы сегментации изображений: попиксельный, объектный, панорамный
Режим разбора сцены фиксирует три вещи разом: архитектуру модели, формат разметки и метрику приёмки. Выбранный под модную архитектуру, а не под задачу, он заставляет переразмечать корпус и переобучать модель. Поэтому режим определяем до первой строки разметки.
| Режим | Что попадает в маску | Когда подходит | Ограничения |
|---|---|---|---|
| Попиксельная классификация | каждый пиксель отнесён к классу, объекты одного класса слиты в область | контроль площадей и дефектов: доля повреждённой поверхности, зоны растительности | не разделяет вплотную стоящие объекты — они сливаются в одну область |
| Разделение объектов | отдельная маска на каждый экземпляр, в том числе внутри одного класса | подсчёт штук: детали на конвейере, клетки, транспорт, единицы товара | больше времени аннотатора на кадр, сложнее плотные сцены с перекрытием |
| Панорамный разбор сцены | все объекты раздельно плюс фон как отдельный класс | автономное движение, робототехника, разбор улицы, где важен и фон, и каждый объект | самый дорогой корпус разметки, ошибка на любом слое классов тянет остальные |
Схема классов выводится из режима: классы не пересекаются по смыслу, редкие состояния лучше выносить отдельно, чем сваливать в «прочее». Режимы совместимы по данным — попиксельная собирается объединением объектных масок по классу, панорамная добавляет слой фона. Расширение задачи не требует размечать корпус с нуля.
Этапы внедрения: от аудита данных до передачи модели
Порядок этапов здесь не формальность. Если пропустить аудит данных или зафиксировать схему классов уже после первой разметки, ошибки всплывут на обученной модели, а часть масок придётся выбросить и размечать заново. Поэтому работа идёт от разбора данных к передаче, и на каждом шаге остаётся проверяемый артефакт.
- Аудит набора данных. Смотрим, что уже отснято и размечено: покрытие сценариев, дубликаты, кадры без объектов, дисбаланс классов. На выходе — отчёт с решением, какие сцены доснять, а какую разметку переделать.
- Схема классов и правила разметки. Фиксируем иерархию классов, что считается отдельным объектом, как размечать перекрытия и границы. Правила записываем текстом: без них разные разметчики дадут разные маски на одном и том же кадре.
- Сборка обучающего контура. Обучение с расширением набора под реальные условия съёмки — свет, ракурс, частичные перекрытия. Данные и веса версионируем, чтобы любую итерацию можно было сравнить с предыдущей.
- Проверка на отложенной выборке. Считаем метрики по каждому классу отдельно, а не среднее по модели: редкий класс не должен растворяться в общей точности.
- Проверка на реальных партиях. Прогоняем решение на кадрах с рабочих камер, которых модель не видела, разбираем ошибки и добавляем сложные случаи обратно в обучение.
- Передача решения. Отдаём веса, конфигурацию схемы классов, инструкцию по дообучению и метрики на контрольном наборе — команда ведёт модель дальше сама.
Артефакты передачи: конфигурации, схемы классов, регламенты
Пока решение работает в нашей инфраструктуре, его поведение держится на людях, которые его собирали. Передача — это момент, когда всё, что жило в голове инженера, становится файлами в вашем репозитории. Ниже — минимальный комплект, без которого сопровождение превращается в зависимость от подрядчика.
- Конфигурация конвейера: файлы параметров предобработки, масштабирования, искажений кадра и порогов срабатывания модели — с пояснением, какие значения менялись под задачу и почему.
- Схема классов: словарь масок с описанием, что считается границей объекта, а что фоном, и как трактуются спорные случаи на стыке классов.
- Инструкция по разметке: правила аннотирования с примерами сложных кадров, критерии приёмки и список проверок для новых аннотаторов.
- Регламент дообучения: когда запускается переобучение, на каких данных, как проверяется, что качество не просело по редким классам.
- Контрольный набор кадров: эталонные маски, которые прогоняются перед публикацией каждой новой версии модели.
- Документация решения: схема конвейера, точки подключения к вашим системам и порядок отката на предыдущую версию.
- Журнал экспериментов: какие подходы проверялись и почему от них отказались, чтобы не проходить этот путь заново.
Такой комплект позволяет вашей команде менять модель без нас: править разметку, дообучать на новых кадрах, откатывать версию. Опишите задачу — вернёмся с оценкой и планом передачи.
Кейс: отбраковка на линии — метрики до и после внедрения
До автоматизации контроль качества на линии держался на людях: контролёр снимал с конвейера каждую двадцатую единицу и осматривал вручную. К третьему часу смены внимание падало, а наплывы клея, смещённые этикетки и разрывы шва на тёмной упаковке проходили мимо — партия с дефектом уезжала заказчику, дальше возврат и повторная пересортировка всей партии.
Что изменили
На выходе линии поставили камеру и обучили модель сегментации на разметке реальных снимков (PyTorch). Семантическая разметка отделяет упаковку от фона и ленты транспортёра, поэкземплярная — обводит границы каждого дефекта, поэтому блик на плёнке не путается с разрывом шва. Порог срабатывания подбирали по кривой ошибок: важнее было не пропустить дефект, но и не останавливать линию ложными срабатываниями. Отбраковка дефектов идёт прямо в потоке, сброс в брак синхронизирован с отводящим механизмом.
Метрики до и после
- Снижение пропусков: около 8% брака уходило потребителю при ручной выборке — стало менее 1% на отложенной выборке снимков.
- Ложные срабатывания: 4% → 1,5% после калибровки порога и замены подсветки на рассеянную.
- Покрытие: вместо одного снимка из двадцати проверяется 100% потока, скорость конвейера не снижается.
- Переналадка на новый типоразмер упаковки: дообучение на нескольких сотнях размеченных снимков вместо переписывания правил контроля.
Чем отличается семантическая разметка от разделения объектов?
Семантическая разметка присваивает класс каждому пикселю, но не различает экземпляры: три автомобиля в кадре сливаются в одно пятно класса «автомобиль». Разделение объектов добавляет второй уровень — идентификатор экземпляра, поэтому соседние объекты одного класса остаются раздельными, и их можно посчитать. Разница проявляется ровно на границах объектов.
В семантике пиксель на стыке двух классов — конфликт меток, который разрешается приоритетом класса или арбитражем по уверенности модели. В подходе с разделением объектов та же точка решает другую задачу: какому экземпляру она принадлежит, и здесь работают морфология маски, сглаживание контуров и подавление перекрывающихся масок. Одна и та же ошибка на границе даёт разный класс дефекта: размытую кромку против склеенных или разрезанных объектов.
Отсюда требование к схеме классов. Для разделения объектов классы должны быть плоскими и взаимоисключающими, а физические наложения — человек на мотоцикле, провод перед фасадом — решаются слоями и порядком отрисовки. Пересекающиеся классы в семантике живут спокойно, но каждое наложение нужно описать правилом приоритета: иначе соседние разметчики трактуют стык по-разному, и расхождение между ними напрямую съедает точность модели.
Выбор диктует задача. Нужна площадь класса — дорога, растительность, дефект покрытия — берём семантическую разметку: разметка дешевле, обучение устойчивее к редким классам. Нужны количество, размер и траектория каждого объекта — берём разделение. Совмещённый вариант хранит оба слоя в одном наборе, например в формате COCO: фон идёт семантикой, объекты — масками с идентификаторами.
Технические сомнения: ограничения, поддержка, дообучение
Сомнения перед стартом редко касаются архитектуры — чаще они про данные и эксплуатацию: хватит ли примеров на редкий класс, что делать с уже накопленной разметкой по другой схеме и кто дообучает модель, когда появляются новые снимки. Ниже — прямые ответы на три таких вопроса.
Общий принцип: требования к данным фиксируем до разметки — минимальная площадь объекта, правила перекрытий, как помечать неоднозначные кадры. Тогда спорные случаи решает протокол, а не вкус конкретного разметчика.
Редкий класс — единицы объектов на весь набор. Модель его вообще увидит?
Разделяем выборку по классам, а не по кадрам целиком, и добавляем в обучение перевес редкого класса в функции потерь. Уверенность по нему выставляем отдельным порогом, а метрики считаем по каждому классу, а не средним числом: общая доля верных решений маскирует провал на редком. Если объектов меньше десятков, честнее сначала прототип — иногда дешевле найти класс правилом постобработки, чем собирать под него данные.
Разметка уже есть, но схема другая
Схему переносим программно: контуры переводим в маски, вложенные и пересекающиеся области разводим по приоритету классов, слишком мелкие объекты отбрасываем по порогу площади. Если у вас размечали прямоугольниками, часть масок восстанавливаем предразметкой модели и дорисовываем руками — это быстрее, чем начинать с нуля. После конвертации прогоняем контроль: доля объектов без класса, конфликтующие метки, кадры без единой области.
Дообучать придётся своими силами — что для этого нужно
Передаём воспроизводимый сценарий обучения и проверки: конфигурацию, разбиение на наборы, версионирование разметки и весов, чтобы любой результат можно было откатить. Дообучение запускается на новых данных с примесью старых — иначе модель теряет ранее выученные классы. Поддержка решения сводится к наблюдению за долей неуверенных предсказаний и дрейфом входных данных: рост этой доли — сигнал, что пора доразмечать и переобучать.
Обсудим задачу: что прислать для точной оценки
Точность оценки в сегментации держится не на объёме выборки, а на том, насколько однозначно описаны классы, краевые случаи и требуемое качество. Ниже — что прислать, чтобы мы вернулись с планом этапов, сроками и схемой классов, а не с общими формулировками.
- Постановка задачи — что должно быть на выходе: одна маска на класс, отдельные объекты или разметка сцены целиком, и как результат используется дальше.
- Входные данные — 20–50 снимков в исходном виде, включая самые неудобные: слабый свет, перекрытия, шум, редко встречающиеся классы.
- Разметка — есть ли она, в каком формате (PNG-маски, полигоны, готовый набор), кто размечал и насколько согласованы спорные объекты.
- Схема классов — перечень классов, их иерархия и правила для неоднозначных случаев: перекрытие, частичная видимость, объекты у границы кадра.
- Требования к качеству — приемлемая метрика (IoU, Dice) и классы, где важна точность границ, а где достаточно грубого контура.
- Условия запуска — где считается модель: сервер, камера, мобильное устройство; сколько кадров в сутки и какое время обработки допустимо.
- Текущий процесс — чем задача решается сейчас и на каком объёме ручной этап перестаёт справляться.
Из этого складывается план работ: подготовка данных, обучение, проверка на отложенной выборке, внедрение в текущий процесс. Оценка сроков и схема классов приходят вместе с планом — по ним видно границы этапов и то, что мы считаем результатом на каждом из них.







