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

Почему правила важнее инструмента
Если попросить десять человек обвести один и тот же предмет рамкой, получится десять немного разных прямоугольников. Различия в пару пикселей кажутся мелочью, но для детектора это шум в целевой переменной. Модель пытается выучить среднее, а метрики вроде IoU при пороге 0,75 и выше начинают зависеть от случайных предпочтений разметчика. Для мелких объектов, где рамка занимает 20 на 20 пикселей, смещение на два пикселя уже снижает IoU примерно на 20 процентов.
Поэтому ключ к хорошему датасету, не программа для разметки, а набор однозначных правил, которые разметчик может применять, не раздумывая. Мы рекомендуем фиксировать их в письменной инструкции с примерами правильной и неправильной разметки. Как её составить, см. материал как написать инструкцию для разметчиков. Здесь разберём содержание правил для рамок.
Плотность прилегания
Базовое правило: рамка проходит по внешней границе видимой части объекта и касается её по четырём сторонам. Не оставляйте воздуха вокруг и не обрезайте края.
Спорные места, которые стоит решить заранее:
- Тени. Обычно тень не входит в рамку. Исключение: задача про тени сама по себе.
- Отражения. Отражение в зеркале или воде не размечается отдельным объектом, если иное не оговорено.
- Тонкие выступающие части. Антенны, ручки, провода: входят ли они в рамку? Если они определяют класс (антенна у автомобиля, не нужна, ручка чашки нужна), пропишите это явно.
- Прозрачные объекты. Стекло и пластик размечаются по видимому краю предмета, а не по краю содержимого.
- Размытые края. Для расфокусированных объектов рамка ставится по центру переходной зоны.
Пиксельный допуск тоже стоит указать. Для обычных объектов нормально отклонение до 1-2 пикселей, для мелких до одного. Выборочная проверка нескольких процентов размеченных кадров покажет, соблюдается ли он.
Перекрытия и частично закрытые объекты
Это самый частый источник споров. Есть два принципиальных подхода.
- Размечать только видимую часть. Рамка охватывает то, что видно в кадре. Просто и однозначно, хорошо подходит для большинства практических задач, где важен факт обнаружения.
- Размечать полный объект, включая скрытую часть (amodal). Рамка охватывает предполагаемую границу целого объекта. Полезно для подсчёта, захвата роботом и отслеживания, но субъективно: разметчик должен домысливать форму.
Выбор нужно зафиксировать на старте и не менять посреди проекта. Для синтетических данных ситуация проще: мы знаем полную геометрию и видимую часть и можем выдавать оба варианта, а также долю видимости. Это позволяет позднее отфильтровать кадры, где объект закрыт на 90 процентов и обучение на нём бесполезно или вредно.
Порог видимости
Практичное правило: если видно менее 10-20 процентов объекта, он не размечается или помечается флагом «трудный случай» (difficult / ignore). Модель не обязана находить то, что человек не смог бы опознать. Без порога датасет заполняется пограничными случаями, где ответ зависит от настроения разметчика. Конкретное значение выбирают по задаче: для подсчёта людей в толпе порог ниже, для контроля качества деталей выше.
Обрезанные объекты на краю кадра
Объект частично выходит за границу изображения. Рамка проводится до края кадра, а не за него. Координаты не должны быть отрицательными или превышать размеры изображения, иначе часть библиотек для обучения отбросит такую аннотацию или упадёт с ошибкой. Если объект виден меньше установленного порога, он пропускается.
Некоторые команды помечают такие объекты специальным флагом truncated. Это удобно при анализе ошибок модели: можно отдельно посмотреть, как она ведёт себя на обрезанных объектах, и при необходимости добавить в датасет больше таких примеров.
Мелкие объекты
Для мелких объектов правила жёстче. Минимальный размер, ниже которого объект не размечается, зависит от модели: многие детекторы плохо работают с рамками меньше 8-10 пикселей по стороне. Вот типичные решения:
- установить нижний порог по площади, например 100 пикселей, и игнорировать всё, что меньше;
- размечать мелкие объекты, но исключить из расчёта метрик и обучения через флаг ignore;
- увеличить разрешение входного изображения или нарезать кадр на фрагменты, если мелкие объекты важны.
Если проигнорировать эту проблему, детектор получает противоречивый сигнал: на одном кадре крошечный объект размечен, на другом такой же нет. Доля ложных срабатываний и пропусков растёт, и разобраться в причинах трудно.
Группы и плотные скопления
Что делать с толпой, стопкой труб или сотнями болтов в ящике? Варианты:
- Размечать каждый экземпляр отдельно. Это правильно, если экземпляры различимы и их нужно считать. Затратно: на кадр может приходиться сотни рамок.
- Размечать группу одной рамкой с меткой crowd. Подходит, когда отдельные экземпляры неразличимы, а важен лишь факт наличия. Форматы вроде COCO поддерживают признак iscrowd.
- Комбинировать: передний план размечать поштучно, дальний фон помечать как область игнорирования.
Если задача про подсчёт, выбирайте первый вариант и закладывайте на него время. Для рендера синтетических сцен плотные скопления, одна из сильных сторон подхода: каждый экземпляр получает собственную рамку без дополнительных затрат. Подробнее о задачах такого типа в статье про распознавание товаров на полке.
Классы, атрибуты и неоднозначные случаи
Рамка без правильного класса бесполезна. Список классов должен быть закрытым и непротиворечивым: каждый объект относится ровно к одному классу, а пограничные случаи описаны отдельно. Например: «пустая упаковка относится к классу упаковка, а не к товару». Для спорных примеров включайте в инструкцию галерею с пометкой «так размечаем» и «так не размечаем».
Помимо класса, часто фиксируют атрибуты: truncated, occluded, difficult, цвет, состояние. Они не усложняют разметку заметно, но существенно облегчают анализ. Не добавляйте больше 3-5 атрибутов на объект, иначе скорость падает и ошибки множатся.
Таблица типовых решений
| Ситуация | Правило | Комментарий |
|---|---|---|
| Тень объекта | не включать | исключение: специальные задачи |
| Перекрытый объект | видимая часть, порог 10-20 процентов | amodal только по явному требованию |
| Обрезка по краю кадра | рамка до границы изображения | можно ставить флаг truncated |
| Объект меньше порога | не размечать или ignore | порог зависит от модели |
| Плотная группа | поштучно либо crowd | зависит от цели: подсчёт или наличие |
| Тонкие выступающие части | по определению класса | прописать явно в инструкции |
Контроль и обратная связь
Даже идеальные правила нарушаются. Поэтому нужен процесс проверки: выборочный просмотр 5-10 процентов кадров, расчёт IoU между рамками двух независимых разметчиков на одном контрольном наборе, разбор расхождений и обновление инструкции. Методы описаны в статье про контроль качества разметки. Если средний IoU между разметчиками ниже 0,85, проблема, скорее всего, в правилах, а не в людях.
Хорошая инструкция, это та, после которой два незнакомых друг с другом разметчика рисуют практически одинаковые рамки.
Примеры формулировок для инструкции
Правила должны быть короткими и проверяемыми. Вот образцы формулировок, которые мы используем в инструкциях:
- «Рамка касается крайних видимых пикселей объекта с четырёх сторон, зазор не более одного пикселя».
- «Если видно меньше 15 процентов площади объекта, он не размечается».
- «Объекты шириной или высотой менее 10 пикселей получают метку ignore».
- «Тень, отражение и подпись на упаковке в рамку не входят, если они не являются частью класса».
- «При сомнении между двумя классами выбираем более общий и ставим флаг difficult».
К каждому правилу прилагается минимум два изображения: как правильно и как неправильно. Такой формат снижает число вопросов к руководителю проекта в несколько раз, а новый разметчик выходит на стабильное качество за первый день, а не за неделю.
Что делать, когда правило не работает
Иногда правило, удобное в теории, на практике порождает много спорных случаев. Признак: один и тот же вопрос задают три разных разметчика за день. В этом случае правило нужно уточнить, добавить пример и пересмотреть уже размеченные кадры, затронутые изменением. Ведите журнал изменений инструкции с пометкой, с какого кадра правило вступило в силу, иначе потом невозможно понять, почему часть датасета размечена иначе.
Как это работает в синтетике
При генерации данных рендер рассчитывает рамки по проекции геометрии: берутся все видимые пиксели объекта, вычисляется их ограничивающий прямоугольник. Все спорные вопросы решаются кодом один раз и применяются единообразно ко всем кадрам. Мы заранее согласуем с заказчиком правила: видимая или полная рамка, порог видимости, обработка краёв. Результат: ноль случайных расхождений и возможность в любой момент пересчитать разметку под изменившиеся требования, не отправляя датасет заново людям. Подробнее об этом подходе на странице услуги разметки.
Если вы готовите датасет для детекции и хотите заранее согласовать правила рамок под свою задачу, напишите на [email protected]. Мы пришлём пример с несколькими вариантами разметки на небольшой выборке.
Нужен датасет под вашу задачу?
Подготовим тестовую партию изображений с разметкой, чтобы вы могли проверить подход на своей модели. Напишите на [email protected] или оставьте заявку.
Читайте также
Разметка данныхВиды разметки изображений: обзор
От выбора вида разметки зависит и стоимость датасета, и то, чему в итоге научится модель. Разбираем основные виды аннотаций, их плюсы и ограничения и даём простую схему выбора.
Разметка данныхСколько стоит ручная разметка и как её сократить
Ручная разметка почти всегда оказывается самой дорогой и самой недооценённой статьёй бюджета проекта по компьютерному зрению. Разбираем, из чего складывается цена, и как её сократить.
Разметка данныхМаски сегментации: точность до пикселя
Маска показывает модели не просто где объект, а какие именно пиксели ему принадлежат. Разбираем, как маски хранятся, где возникают ошибки на краях и почему из 3D-рендера они получаются точнее, чем при ручной обводке.