Чем отличаются форматы разметки COCO, YOLO и Pascal VOC?
COCO хранит разметку всего датасета в одном JSON-файле со сложной вложенной структурой, YOLO — в простых текстовых файлах по одному на изображение с относительными координатами, а Pascal VOC — в отдельных XML-файлах с понятными именованными тегами. Разница определяет и удобство работы с форматом, и то, для каких фреймворков обучения он подходит без конвертации.
Все три формата решают одну задачу — сохранить координаты объектов и их классы так, чтобы модель могла обучиться на этих данных, — но выбирают разный баланс между компактностью, читаемостью и совместимостью с конкретными библиотеками. Формат разметки редко выбирают произвольно: обычно он диктуется архитектурой модели или инструментом обучения, под который готовится датасет.
Знание внутренней структуры формата пригождается не только разработчику пайплайна обучения, но и при приёмке готовой разметки: понимая, что именно лежит внутри JSON, txt или XML, заказчику проще проверить корректность аннотаций до того, как датасет уйдёт в обучение модели.
Как устроен формат COCO и что находится внутри JSON?
COCO (Common Objects in Context) хранит весь датасет в одном JSON-файле с четырьмя основными блоками: images (список изображений с именами файлов и размерами), categories (список классов объектов), annotations (сами разметки — координаты и класс каждого объекта) и info с метаданными датасета. Записи связаны между собой числовыми id.
Схематично одна аннотация в COCO выглядит так:
{
"image_id": 42,
"category_id": 3,
"bbox": [x, y, width, height],
"segmentation": [[x1, y1, x2, y2, ...]],
"area": 1520.5,
"iscrowd": 0
}
Поле bbox задаёт прямоугольник объекта, а segmentation — необязательный список точек контура для полигональной разметки или маски. Именно эта гибкость — один формат для bounding box, полигонов и сегментации сразу — сделала COCO стандартом де-факто для исследовательских датасетов и множества современных фреймворков детекции.
Как устроен формат YOLO и что содержит txt-файл?
YOLO хранит разметку максимально просто: на каждое изображение — один текстовый файл с тем же именем, а внутри по одной строке на объект. Строка содержит номер класса и координаты центра рамки с её шириной и высотой, выраженные не в пикселях, а в долях от размера изображения — от 0 до 1.
Строка разметки YOLO выглядит так:
2 0.512 0.417 0.180 0.245
Здесь 2 — номер класса объекта, а четыре числа — координаты центра рамки и её ширина с высотой в относительных долях кадра. Список названий классов при этом хранится отдельным файлом вне разметки. Такая структура делает YOLO самым лёгким для чтения программой форматом: не нужен парсер JSON или XML, достаточно построчного разбора текстового файла.
Как устроен формат Pascal VOC и что находится в XML?
Pascal VOC хранит разметку в отдельном XML-файле на каждое изображение с именованными тегами: имя файла, размер изображения и список объектов, где у каждого указаны класс и координаты рамки в пикселях через теги xmin, ymin, xmax, ymax. Такая явная вложенность делает файл понятным без документации, даже если открыть его в обычном текстовом редакторе.
Фрагмент XML Pascal VOC выглядит так:
<object>
<name>car</name>
<bndbox>
<xmin>120</xmin><ymin>80</ymin>
<xmax>340</xmax><ymax>260</ymax>
</bndbox>
</object>
Формат исторически связан с одноимённым конкурсом по компьютерному зрению и остаётся стандартом там, где важна максимальная читаемость разметки человеком, а не только программой, — например, при ручном аудите качества аннотаций.
Как сравниваются COCO, YOLO и Pascal VOC между собой?
COCO выигрывает у гибкости — один формат покрывает bounding box, полигоны и сегментацию, но требует парсинга сложного JSON. YOLO — самый компактный и быстрый для чтения программой, но ограничен bounding box без родной поддержки сегментации. Pascal VOC — самый читаемый человеком формат, но наименее компактный при больших датасетах.
| Критерий | COCO | YOLO | Pascal VOC |
|---|---|---|---|
| Структура файлов | Один JSON на весь датасет | Один txt на изображение | Один XML на изображение |
| Координаты | Пиксели, абсолютные | Доли кадра, относительные | Пиксели, абсолютные |
| Поддержка сегментации | Да, встроена | Нет (только bbox) | Ограниченно, отдельным файлом |
| Читаемость человеком | Средняя (нужен парсер) | Средняя (числа без подписей) | Высокая (именованные теги) |
| Типичное применение | Исследовательские датасеты, сегментация | Быстрое обучение детекторов | Классические задачи детекции |
Выбор формата редко зависит от личных предпочтений команды — чаще его диктует модель или фреймворк обучения, под который готовится итоговый датасет.
Как конвертировать разметку между форматами?
Конвертация между COCO, YOLO и Pascal VOC сводится к пересчёту координат в нужную систему и перекладке данных в целевую структуру файлов — задача, которую решают готовые открытые библиотеки и скрипты, а не написание парсера с нуля. Большинство инструментов разметки умеют экспортировать один проект сразу в нескольких форматах без ручной конвертации.
Главная техническая сложность конвертации — не структура файлов, а система координат: YOLO использует относительные доли кадра и центр рамки, а COCO и Pascal VOC — абсолютные пиксели и левый верхний угол, поэтому при конвертации важно не перепутать точку отсчёта и не потерять точность на объектах у самого края изображения.
Какой формат разметки выбрать для своего проекта?
Формат выбирают не по личным предпочтениям, а по требованиям модели: для быстрого обучения детекторов вроде YOLO — их собственный txt-формат, для исследовательских задач и сегментации — COCO, а для проектов, где важна ручная проверка аннотаций человеком, — Pascal VOC с его явной XML-структурой.
Если формат фреймворка заранее не определён или датасет планируется переиспользовать под несколько моделей, разумно размечать сразу в COCO как в самом гибком формате, а под конкретную модель конвертировать копию в YOLO или Pascal VOC — так исходная разметка не привязывается к одному инструменту обучения и остаётся пригодной для будущих проектов.
Отдельно стоит зафиксировать выбранный формат в техническом задании на разметку ещё до старта проекта: смена формата на середине работ означает либо повторную разметку, либо конвертацию с риском потерять часть точности координат, особенно если исходный и целевой форматы используют разные точки отсчёта.