Обзор датасетов для оценки позы#
Поддерживаемые форматы наборов данных#
Формат Ultralytics YOLO#
Формат разметки датасета, используемый для обучения pose-моделей YOLO, выглядит следующим образом:
- Один текстовый файл на изображение: для каждого изображения в наборе данных существует соответствующий текстовый файл с тем же именем, что и файл изображения, и расширением ".txt".
- Одна строка на объект: каждая строка в текстовом файле соответствует одному экземпляру объекта на изображении.
- Информация об объекте в каждой строке: каждая строка содержит следующую информацию об экземпляре объекта:
- Индекс класса объекта: целое число, представляющее класс объекта (например, 0 для человека, 1 для автомобиля и т. д.).
- Координаты центра объекта: координаты x и y центра объекта, нормализованные в диапазоне от 0 до 1.
- Ширина и высота объекта: ширина и высота объекта, нормализованные в диапазоне от 0 до 1.
- Координаты ключевых точек объекта: ключевые точки объекта, нормализованные в диапазоне от 0 до 1.
Ниже приведён пример формата разметки для задачи оценки позы:
Формат с 2D-ключевыми точками
<class-index> <x> <y> <width> <height> <px1> <py1> <px2> <py2> ... <pxn> <pyn>Формат с видимостью ключевых точек (включает видимость каждой точки)
<class-index> <x> <y> <width> <height> <px1> <py1> <p1-visibility> <px2> <py2> <p2-visibility> ... <pxn> <pyn> <pn-visibility>В этом формате <class-index> — индекс класса объекта, <x> <y> <width> <height> — нормализованные координаты ограничивающей рамки, а <px1> <py1> <px2> <py2> ... <pxn> <pyn> — нормализованные координаты ключевых точек. Канал видимости необязателен, но полезен для датасетов с разметкой перекрытий.
Формат YAML набора данных#
Фреймворк Ultralytics использует формат YAML-файлов для определения конфигурации датасета и модели при обучении моделей оценки позы. Ниже приведён пример формата YAML, используемого для определения датасета позы:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-pose dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/pose/coco8-pose
# Example usage: yolo train data=coco8-pose.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-pose ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-pose # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Keypoints
kpt_shape: [17, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
# Classes
names:
0: person
# Keypoint names per class
kpt_names:
0:
- nose
- left_eye
- right_eye
- left_ear
- right_ear
- left_shoulder
- right_shoulder
- left_elbow
- right_elbow
- left_wrist
- right_wrist
- left_hip
- right_hip
- left_knee
- right_knee
- left_ankle
- right_ankle
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-pose.zipПоля train, val и test указывают на изображения для обучения, валидации и тестирования. Каждое поле может содержать каталог, список каталогов или файл *.txt, в котором на каждой строке указан путь к одному изображению (пути, начинающиеся с ./, разрешаются относительно файла *.txt). Файл *.txt полезен для обучения на подмножестве каталога, пропуска изображений без меток или объединения изображений из нескольких источников в один сплит.
path: datasets/coco8-pose # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
0: personnames — это словарь имён классов. Порядок имён должен соответствовать порядку индексов классов объектов в файлах наборов данных YOLO.
(Необязательно) flip_idx сопоставляет каждую ключевую точку с её зеркальным отражением, чтобы аугментация с горизонтальным отражением сохраняла соответствие левой и правой сторон в симметричных скелетах, например человеческом теле или лице. Для пяти лицевых ориентиров с индексами [левый глаз, правый глаз, нос, левый угол рта, правый угол рта] = [0, 1, 2, 3, 4] значение flip_idx равно [1, 0, 2, 4, 3]: пары левой и правой сторон 0-1 и 3-4 меняются местами, а нос сохраняет собственный индекс.
(Необязательно) kpt_oks_sigmas задаёт пользовательские сигмы OKS для каждой ключевой точки, используемые при обучении и валидации, например [0.26, 0.25, 0.25, ...]. Длина списка должна соответствовать числу ключевых точек N из kpt_shape, и каждое значение должно быть положительным. Если параметр не указан, для kpt_shape: [17, 3] используются сигмы COCO для 17 ключевых точек, а в остальных случаях — единое значение 1/N.
Использование#
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-pose.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="coco8-pose.yaml", epochs=100, imgsz=640)Поддерживаемые наборы данных#
В этом разделе описаны датасеты, которые совместимы с форматом Ultralytics YOLO и могут использоваться для обучения моделей оценки позы. Большинство этих датасетов также размещено на платформе Ultralytics, где ты можешь просматривать изображения и разметку, изучать статистику датасетов и клонировать их для облачного обучения.
COCO-Pose#
- Описание: COCO-Pose — крупномасштабный датасет для оценки позы человека, содержащий изображения COCO 2017 с людьми, размеченными по ключевым точкам.
- Формат разметки: такой же, как формат Ultralytics YOLO, описанный выше, с ключевыми точками для позы человека.
- Количество классов: 1 (человек).
- Ключевые точки: 17 типов ключевых точек, включая нос, глаза, уши, плечи, локти, запястья, бёдра, колени и лодыжки; для каждой указано измерение видимости.
- Использование: подходит для обучения моделей оценки позы человека.
- Дополнительные сведения: датасет создан на основе соревнования COCO Keypoints 2017: 58 945 изображений с разметкой 156 165 человек.
- Подробнее о COCO-Pose
COCO8-Pose#
- Описание: небольшой, но универсальный датасет для оценки позы Ultralytics COCO8-Pose состоит из первых 8 изображений набора COCO train 2017: 4 используются для обучения и 4 — для валидации.
- Формат разметки: такой же, как формат Ultralytics YOLO, описанный выше, с ключевыми точками для позы человека.
- Количество классов: 1 (человек).
- Ключевые точки: 17 типов ключевых точек, включая нос, глаза, уши, плечи, локти, запястья, бёдра, колени и лодыжки; для каждой указано измерение видимости.
- Использование: подходит для тестирования и отладки моделей оценки позы, а также для экспериментов с новыми подходами к обнаружению ключевых точек.
- Дополнительные сведения: COCO8-Pose идеально подходит для базовых проверок и проверок CI.
- Подробнее о COCO8-Pose
Dog-Pose#
- Описание: датасет Ultralytics Dog-Pose содержит 6 773 обучающих и 1 703 валидационных изображения для оценки ключевых точек собак.
- Формат разметки: соответствует формату Ultralytics YOLO и содержит разметку нескольких ключевых точек, характерных для анатомии собаки.
- Количество классов: 1 (собака).
- Ключевые точки: 24 ключевые точки, для каждой указано измерение видимости; они адаптированы к позам собак и описывают, например, конечности, суставы и положение головы.
- Использование: идеально подходит для обучения моделей оценке поз собак в различных сценариях — от исследований до практических применений.
- Дополнительные сведения: исходные изображения взяты из датасета Stanford Dogs.
- Подробнее о Dog-Pose
Ключевые точки кисти руки#
- Описание: датасет ключевых точек кисти руки Ultralytics содержит 26 768 изображений, из которых 18 776 предназначены для обучения, а 7 992 — для валидации.
- Формат разметки: такой же, как описанный выше формат Ultralytics YOLO, но содержит 21 ключевую точку человеческой кисти и измерение видимости.
- Количество классов: 1 (кисть руки).
- Ключевые точки: 21 ключевая точка.
- Использование: отлично подходит для оценки позы человеческой кисти и распознавания жестов.
- Дополнительные сведения: разметка ключевых точек создаётся с помощью Google MediaPipe, что обеспечивает единообразие разметки.
- Подробнее о ключевых точках кисти руки
Tiger-Pose#
- Описание: датасет Ultralytics Tiger-Pose содержит 263 изображения, взятые из видео на YouTube; 210 изображений предназначены для обучения, а 53 — для валидации.
- Формат разметки: такой же, как описанный выше формат Ultralytics YOLO, с 12 ключевыми точками для позы животного и без измерения видимости.
- Количество классов: 1 (тигр).
- Ключевые точки: 12 ключевых точек.
- Использование: отлично подходит для анализа поз животных и любых других поз, не связанных с человеком.
- Дополнительные сведения: распространяется по лицензии AGPL-3.0.
- Подробнее о Tiger-Pose
Добавление собственного набора данных#
Если у тебя есть собственный датасет и ты хочешь использовать его для обучения моделей оценки позы в формате Ultralytics YOLO, убедись, что он соответствует формату, указанному выше в разделе «Формат Ultralytics YOLO». Преобразуй разметку в требуемый формат и укажи пути, количество классов и названия классов в конфигурационном YAML-файле.
Чтобы полностью пропустить этап преобразования, Ultralytics Platform позволяет загружать исходные изображения, размечать ключевые точки в браузере и напрямую обучаться на полученном датасете.
Инструмент преобразования#
Ultralytics предоставляет удобный инструмент для преобразования разметки из популярного формата датасета COCO в формат YOLO:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_keypoints=True)Этот инструмент можно использовать для преобразования датасета COCO или любого датасета в формате COCO в формат Ultralytics YOLO. Параметр use_keypoints указывает, нужно ли включать ключевые точки (для оценки позы) в преобразованную разметку.
Часто задаваемые вопросы#
Формат Ultralytics YOLO для датасетов оценки позы предусматривает разметку каждого изображения в соответствующем текстовом файле. Каждая строка текстового файла содержит сведения об экземпляре объекта:
- Индекс класса объекта
- Координаты центра объекта (нормализованные x и y)
- Ширина и высота объекта (нормализованные)
- Координаты ключевых точек объекта (нормализованные pxn и pyn)
Для 2D-поз ключевые точки включают нормализованные координаты x и y. При наличии измерения видимости для каждой ключевой точки также указывается флаг видимости. Подробнее см. в разделе Формат Ultralytics YOLO.
coco-pose.yamlпоставляется вместе с пакетом и при первом использовании загружает изображения и разметку, поэтому ручная подготовка не требуется:from ultralytics import YOLO model = YOLO("yolo26n-pose.pt") # load pretrained model results = model.train(data="coco-pose.yaml", epochs=100, imgsz=640)Подробнее о датасете см. в разделе COCO-Pose, а полный список аргументов — на странице Обучение.
Чтобы добавить свой датасет:
-
Преобразуй разметку в формат Ultralytics YOLO.
-
Создай конфигурационный YAML-файл, указав пути к датасету, количество классов и названия классов.
-
Используй конфигурационный файл для обучения модели:
from ultralytics import YOLO model = YOLO("yolo26n-pose.pt") results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)Полную последовательность шагов см. в разделе Добавление собственного датасета.
-
YAML-файл датасета в Ultralytics YOLO определяет конфигурацию датасета и модели для обучения. В нём указываются пути к изображениям для обучения, валидации и тестирования, формы ключевых точек, названия классов и другие параметры конфигурации. Такой структурированный формат упрощает управление датасетами и обучение моделей. Ниже приведён пример формата YAML:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-pose dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/pose/coco8-pose # Example usage: yolo train data=coco8-pose.yaml # parent # ├── ultralytics # └── datasets # └── coco8-pose ← downloads here (1 MB) # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: coco8-pose # dataset root dir train: images/train # train images (relative to 'path') 4 images val: images/val # val images (relative to 'path') 4 images test: # test images (optional) # Keypoints kpt_shape: [17, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible) flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15] # Classes names: 0: person # Keypoint names per class kpt_names: 0: - nose - left_eye - right_eye - left_ear - right_ear - left_shoulder - right_shoulder - left_elbow - right_elbow - left_wrist - right_wrist - left_hip - right_hip - left_knee - right_knee - left_ankle - right_ankle # Download script/URL (optional) download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-pose.zipПодробнее о создании конфигурационных YAML-файлов см. в разделе Формат YAML датасета.
Ultralytics предоставляет инструмент для преобразования разметки датасета COCO в формат YOLO, включая сведения о ключевых точках:
from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_keypoints=True)Этот инструмент помогает легко интегрировать датасеты COCO в проекты YOLO. Подробнее см. в разделах Инструмент преобразования и руководство по предварительной обработке данных.