Форматы разметки COCO, YOLO и Pascal VOC

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

Автор: Редакция DataMarkupОпубликовано: 2026-07-14

Чем отличаются форматы разметки 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 — так исходная разметка не привязывается к одному инструменту обучения и остаётся пригодной для будущих проектов.

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

Частые вопросы

Можно ли использовать один датасет сразу в нескольких форматах?

Да, это обычная практика: датасет размечают один раз в удобном формате, а затем конвертируют копии в другие форматы под конкретные фреймворки обучения. Так один и тот же набор изображений может одновременно существовать в виде COCO JSON для одной модели и YOLO txt для другой без повторной ручной разметки.

Чем YOLO формат отличается от COCO по структуре разметки?

YOLO хранит разметку в простых текстовых файлах — по одному на изображение, с координатами в относительных долях кадра. COCO использует единый JSON-файл на весь датасет с более сложной вложенной структурой: изображениями, категориями и аннотациями, связанными между собой числовыми идентификаторами, что удобнее для больших и сложных датасетов.

Нужно ли писать свой конвертер между форматами вручную?

Обычно нет — для самых частых пар форматов существуют готовые открытые библиотеки и скрипты конвертации, а инструменты разметки вроде CVAT и Label Studio умеют экспортировать один и тот же проект сразу в нескольких форматах. Свой конвертер имеет смысл писать только под нестандартную или внутреннюю схему разметки.

Какой формат разметки проще всего читать человеку?

Pascal VOC читается человеком проще всего благодаря понятной XML-структуре с именованными тегами: по одному файлу на изображение, без ссылок по числовым идентификаторам. YOLO тоже прост, но координаты в нём даны абстрактными числами без подписей, а структуру COCO без инструмента визуализации разобрать глазами заметно сложнее из-за связей между блоками.

Поддерживает ли Pascal VOC сегментацию, а не только bounding box?

Изначально Pascal VOC создавался под bounding box, но формат расширяли и под задачи сегментации — в этом случае маска объекта хранится отдельным файлом-изображением, а не координатами внутри XML. На практике для сегментации чаще всего выбирают COCO — его схема изначально удобнее для полигонов и попиксельных масок.

Смотрите также