Форматы аннотаций: COCO, YOLO, Pascal VOC и другие
Разметка данныхФормат аннотаций кажется технической мелочью, пока обучение не падает с ошибкой или рамки не съезжают на пол-кадра. Объясняем, как устроены популярные форматы, чем отличаются и как безопасно конвертировать.

Зачем разбираться в форматах
Любая разметка, это в итоге файлы: координаты, классы, иногда маски. Формат определяет, какими инструментами их можно читать, обучать ли на них модель напрямую и сколько проблем возникнет при передаче между командами. Один и тот же датасет в разных форматах занимает разный объём, по-разному обрабатывает мелкие нюансы вроде обрезанных объектов и сложных масок, а ошибки в нём возникают в разных местах.
Для нас это практический вопрос: заказчики используют разные фреймворки, и датасет нужно выдавать в том виде, в котором его сразу можно подключить к обучению. Поскольку рендер хранит всё во внутреннем универсальном представлении, мы можем экспортировать в нужный формат без потери информации. Но чтобы понимать, какой формат лучше подходит под задачу, стоит знать их устройство.
YOLO: компактный текстовый формат
Формат создан для семейства детекторов YOLO, подробнее об их обучении мы писали в статье про обучение YOLO. Для каждого изображения создаётся текстовый файл с тем же именем, в котором каждая строка описывает один объект:
класс центр_x центр_y ширина высота
Все четыре координаты нормированы на размер изображения, то есть лежат в диапазоне от 0 до 1. Класс, целое число, начиная с нуля. Названия классов хранятся отдельно, в конфигурационном файле датасета.
Достоинства: предельная простота, быстрая загрузка, нет зависимости от размеров изображения (при изменении масштаба разметка остаётся верной). Недостатки: нет места для дополнительных атрибутов, не хранится информация об изображении, нет прямой поддержки сложных структур. Для сегментации существует расширение, где после класса идёт список нормированных точек полигона. Для ключевых точек добавляются координаты и видимость каждой точки.
Типичные ошибки: перепутанный порядок координат (углы вместо центра и размеров), ненормированные значения, классы с единицы вместо нуля, пустые файлы для кадров без объектов (допустимо, но должно быть сделано сознательно).
COCO: универсальный JSON
Формат COCO стал фактическим стандартом для детекции, сегментации и ключевых точек. Вся разметка датасета хранится в одном JSON-файле (или в одном на выборку), в котором есть несколько разделов:
- images. Список изображений с идентификатором, именем файла, шириной и высотой.
- annotations. Список объектов: идентификатор, ссылка на изображение, категория, рамка, площадь, признак iscrowd, сегментация, ключевые точки.
- categories. Список классов с идентификаторами, названиями и, для поз, схемой скелета.
Рамка в COCO задаётся как левый верхний угол плюс ширина и высота в пикселях, а не нормированных значениях. Сегментация хранится либо списком полигонов, либо в RLE-кодировке, если объект плотный или с отверстиями. Об устройстве масок можно прочитать в статье про маски сегментации.
Достоинства: богатая структура, поддержка практически всех инструментов, стандартная оценка качества (метрики mAP при разных порогах). Недостатки: один большой файл неудобно редактировать и объединять, ошибки в идентификаторах трудно заметить, а загрузка гигантского JSON в память может занять заметное время. Для десятков тысяч изображений файл достигает сотен мегабайт.
Pascal VOC: XML на каждый кадр
Классический формат из соревнования Pascal VOC. Для каждого изображения создаётся XML-файл, в котором указано имя файла, размеры и список объектов. У каждого объекта есть имя класса, рамка в виде xmin, ymin, xmax, ymax (в пикселях) и дополнительные флаги: truncated, difficult, pose.
Достоинства: читаемость, наличие флагов обрезки и трудности, прямая человеческая проверка. Недостатки: громоздкость, отсутствие стандартного представления масок (для сегментации используются отдельные PNG), устаревание: современные фреймворки чаще работают с COCO и YOLO. Но формат всё ещё встречается в унаследованных проектах и в инструментах разметки.
Одна частая ловушка: в VOC координаты традиционно отсчитываются от единицы, а в современных библиотеках от нуля. Из-за этого рамки сдвигаются на один пиксель. Для крупных объектов это незаметно, для мелких, заметно.
Другие форматы, которые встречаются
- CVAT XML и CVAT for images. Внутренний формат популярной системы разметки, хранит рамки, полигоны, точки, треки и атрибуты. Обычно используется как промежуточный, из него экспортируют в COCO или YOLO.
- LabelMe JSON. Один JSON на изображение, преимущественно полигоны и метки. Прост и гибок.
- Маски PNG. Для семантической сегментации каждой маске соответствует одноканальный PNG, где значение пикселя, это класс. Часто идёт в связке с палитрой для визуализации.
- TFRecord. Бинарный формат TensorFlow, в который упаковываются изображения вместе с аннотациями для быстрой загрузки. Не для обмена, а для обучения.
- KITTI, Cityscapes, ADE. Форматы известных наборов данных для автономного транспорта и сегментации сцен. Используются, когда нужна совместимость с существующими бенчмарками.
- Форматы для 6D-поз и 3D. Для оценки положения и ориентации применяют BOP-подобные структуры с матрицами поворота и сдвига, внутренними параметрами камеры и картами глубины.
Сравнительная таблица
| Формат | Структура | Координаты рамки | Маски | Лучше всего подходит |
|---|---|---|---|---|
| YOLO txt | файл на кадр | центр, ширина, высота, нормировано | расширение с полигонами | быстрое обучение YOLO-семейства |
| COCO JSON | один общий файл | левый верхний угол плюс размеры в пикселях | полигоны и RLE | детекция, сегментация, ключевые точки |
| Pascal VOC XML | файл на кадр | углы в пикселях | отдельные PNG | унаследованные проекты |
| LabelMe JSON | файл на кадр | полигоны | полигоны | ручная разметка полигонов |
| Маски PNG | изображение на кадр | не применимо | растровые | семантическая сегментация |
Конвертация: где обычно ломается
Преобразовать один формат в другой просто на бумаге и коварно на практике. Вот проверенный список ошибок, которые мы видели чаще всего.
- Нормированные против абсолютных координат. Перепутали, и рамки получились крошечными или улетели за экран.
- Разные системы координат. Углы, центры, ширина с высотой, сдвиг на единицу.
- Расхождение размеров. Изображение было уменьшено, а аннотации остались под исходный размер.
- Порядок классов. Нумерация с нуля или с единицы, сдвиг идентификаторов после удаления класса.
- Потеря информации. Конвертация из COCO с масками в YOLO без сегментации молча выбрасывает полигоны; из VOC в YOLO теряются флаги truncated и difficult.
- Выход за границы. Отрицательные значения или превышение размеров после поворота, кадрирования, дисторсии.
- Пустые аннотации и дубликаты. Нулевая площадь рамки, два одинаковых объекта на одном месте.
Мы советуем всегда делать визуальную проверку: нарисовать рамки и маски на 20-30 случайных изображениях после конвертации и посмотреть глазами. Это занимает пять минут и ловит почти все серьёзные проблемы. Дополнительно автоматические проверки: значения в допустимых диапазонах, число изображений и файлов аннотаций совпадает, все идентификаторы классов определены, нет изображений без файлов и наоборот.
Правило, которое экономит дни: после любой конвертации визуализируйте разметку на случайной выборке, прежде чем запускать обучение.
Как выбрать формат
Для большинства практических задач работает простая схема. Если вы обучаете модель семейства YOLO, берите YOLO. Если нужна универсальность, ключевые точки, сегментация и стандартная оценка, берите COCO. Если вы работаете с инструментами разметки и несколькими командами, держите исходную разметку в формате инструмента, а в рабочие форматы экспортируйте скриптом, чтобы всегда иметь один первоисточник. Подробнее об организации такого процесса можно прочитать на странице как мы работаем.
В синтетическом конвейере исходный формат хранит всё: рамки, маски экземпляров, карты глубины, ключевые точки, параметры камеры. Экспорт в нужный вид, финальный шаг, и при смене фреймворка заказчика датасет не нужно размечать заново. Это один из практических аргументов в пользу генерации данных, а не ручной разметки: аннотации можно пересчитать в любом формате. Какие виды разметки доступны, описано в обзоре видов разметки.
Итог
Формат аннотаций, это договорённость о том, как записать «что и где». Чем он проще, тем легче его читать и тем меньше мест для ошибок; чем богаче, тем больше задач он покрывает. Выбирайте по целевой модели и инструментам, документируйте допущения и всегда проверяйте результат конвертации глазами.
Нужен датасет сразу в определённом формате? Напишите нам на [email protected], укажите фреймворк и желаемую структуру папок, и мы подготовим тестовый набор в готовом виде. Подробнее о формате передачи данных в разделе услуг по синтетическим датасетам.
Нужен датасет под вашу задачу?
Подготовим тестовую партию изображений с разметкой, чтобы вы могли проверить подход на своей модели. Напишите на [email protected] или оставьте заявку.
Читайте также
Разметка данныхКонтроль качества разметки
Ошибки в разметке незаметно съедают качество модели: она честно учится на неверных ответах. Рассказываем, как выстроить многоуровневый контроль, какие метрики считать и как находить ошибочные метки уже после разметки.
Разметка данныхМаски сегментации: точность до пикселя
Маска показывает модели не просто где объект, а какие именно пиксели ему принадлежат. Разбираем, как маски хранятся, где возникают ошибки на краях и почему из 3D-рендера они получаются точнее, чем при ручной обводке.
Разметка данныхКак написать инструкцию для разметчиков
Хорошая инструкция для разметчиков экономит больше денег, чем любая оптимизация инструментов. Рассказываем, из каких частей она состоит и как проверить её до запуска большой партии.