Форматы разметки: COCO, YOLO и Pascal VOC — в чём разница
Одна и та же рамка вокруг объекта может быть записана тремя разными способами. Разбираем, чем отличаются основные форматы и какой выбрать под вашу модель.
Коротко
| Формат | Файлы | Координаты рамки | Что ещё умеет | Когда выбирать |
|---|---|---|---|---|
| COCO | Один JSON на весь датасет | x, y левого верхнего угла, ширина, высота — в пикселях | Полигоны и маски сегментации, ключевые точки | Детекция и сегментация, большинство современных фреймворков |
| YOLO | TXT-файл на каждое изображение | Центр, ширина и высота, нормированные от 0 до 1 | Сегментация полигонами в новых версиях | Обучение моделей семейства YOLO |
| Pascal VOC | XML-файл на каждое изображение | x_min, y_min, x_max, y_max — в пикселях | Флаги «обрезан» и «сложный» | Старые пайплайны и совместимость |
COCO
Формат датасета Microsoft COCO. Всё хранится в одном JSON: список изображений, список категорий и список аннотаций, где каждая аннотация ссылается на изображение и категорию. Рамка записывается как [x, y, width, height] от левого верхнего угла. Для сегментации есть полигоны и маски в сжатом виде (RLE), для поз — ключевые точки.
Плюс — один файл и богатые возможности. Минус — большой JSON неудобно править вручную и сложнее дописывать частями.
YOLO
На каждое изображение — текстовый файл с тем же именем. Каждая строка — один объект: номер класса и четыре числа x_center y_center width height, нормированные на размеры изображения. Список классов хранится отдельно.
Формат простой и компактный, его легко генерировать и проверять. Из-за нормирования рамки не зависят от разрешения, но при конвертации важно не перепутать центр и угол.
Pascal VOC
XML-файл на изображение с размерами картинки и списком объектов, у каждого — класс и углы рамки xmin, ymin, xmax, ymax. Есть поля для обрезанных и сложных объектов. Формат подробный и читаемый, но избыточный, и сегментация в нём хранится отдельными картинками-масками.
Частые ошибки при конвертации
- Перепутанная система координат: центр вместо угла или пиксели вместо долей.
- Сдвиг на один пиксель из-за разной индексации — с нуля или с единицы.
- Потерянные классы: номера классов в YOLO должны совпадать со списком, на котором учится модель.
- Повёрнутые фото: EXIF-ориентация у изображения и у разметки может не совпадать.
Перед обучением полезно отрисовать несколько десятков случайных примеров с рамками и посмотреть глазами — это ловит большинство ошибок.
Что выбрать
Если вы не знаете, какая модель будет обучаться, — просите COCO: из него проще всего конвертировать в остальные. Если обучаете YOLO — сразу YOLO. Мы сдаём разметку в любом из этих форматов, а также в JSON, CSV или формате вашей платформы. Подробнее — на странице разметки данных.