Ultralytics YOLO27:

Обзор датасетов для оценки позы#

Поддерживаемые форматы датасетов#

Формат Ultralytics YOLO#

Формат меток датасета для обучения моделей YOLO pose:

  1. Один текстовый файл на изображение: каждому изображению в наборе данных соответствует текстовый файл с таким же именем и расширением ".txt".
  2. Одна строка на объект: каждая строка текстового файла соответствует одному экземпляру объекта на изображении.
  3. Информация об объекте в каждой строке: каждая строка содержит следующие сведения об экземпляре объекта:
    • Индекс класса объекта: целое число, обозначающее класс объекта (например, 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/cfg/datasets/coco8-pose.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 удобен, если нужно обучаться на подмножестве каталога, пропускать изображения без меток или объединять изображения из нескольких источников в одну выборку.

Пути к изображениям в файле `*.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
kpt_shape: [17, 3] # required for pose datasets
names:
  0: person

names — это словарь имен классов. Порядок имен должен соответствовать порядку индексов классов объектов в файлах набора данных 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

# Загрузить модель
model = YOLO("yolo26n-pose.pt")  # загрузить предварительно обученную модель (рекомендуется для обучения)

# Обучить модель
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#

  • Описание: COCO8-Pose от Ultralytics — небольшой, но универсальный набор данных для оценки позы, состоящий из первых 8 изображений набора COCO train 2017: 4 для обучения и 4 для валидации.
  • Формат разметки: Такой же, как описанный выше формат Ultralytics YOLO, с ключевыми точками для поз человека.
  • Количество классов: 1 (человек).
  • Ключевые точки: 17 типов ключевых точек, включая нос, глаза, уши, плечи, локти, запястья, бёдра, колени и лодыжки; для каждой указано измерение видимости.
  • Применение: Подходит для тестирования и отладки моделей оценки позы, а также для экспериментов с новыми подходами к обнаружению ключевых точек.
  • Дополнительные примечания: COCO8-Pose идеально подходит для проверок работоспособности и проверок CI.
  • Подробнее о COCO8-Pose

Dog-Pose#

  • Описание: Набор данных Dog-Pose от Ultralytics содержит 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#

  • Описание: Набор данных Tiger-Pose от Ultralytics содержит 263 изображения из видео на YouTube: 210 изображений предназначены для обучения и 53 — для валидации.
  • Формат разметки: Такой же, как описанный выше формат Ultralytics YOLO, с 12 ключевыми точками для позы животного и без измерения видимости.
  • Количество классов: 1 (тигр).
  • Ключевые точки: 12 ключевых точек.
  • Применение: Отлично подходит для оценки поз животных и других поз, не связанных с человеком.
  • Дополнительные примечания: Выпущен по лицензии AGPL-3.0.
  • Подробнее о Tiger-Pose

Добавление собственного набора данных#

Если у тебя есть собственный набор данных и ты хочешь использовать его для обучения моделей оценки позы в формате Ultralytics YOLO, убедись, что он соответствует формату, описанному выше в разделе «Формат Ultralytics YOLO». Преобразуй аннотации в требуемый формат и укажи пути, количество классов и названия классов в файле конфигурации YAML.

Чтобы полностью пропустить этап преобразования, платформа Ultralytics позволяет загружать исходные изображения, размечать ключевые точки в браузере и сразу обучать модель на полученном наборе данных.

Инструмент преобразования#

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")  # загрузить предварительно обученную модель
    results = model.train(data="coco-pose.yaml", epochs=100, imgsz=640)

    Подробнее о наборе данных см. в разделе COCO-Pose, а полный список аргументов — на странице Обучение.

  • Чтобы добавить свой набор данных:

    1. Преобразуй аннотации в формат Ultralytics YOLO.

    2. Создай файл конфигурации YAML и укажи в нём пути к набору данных, количество классов и названия классов.

    3. Используй файл конфигурации для обучения модели:

      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. Подробнее см. в разделах Инструмент преобразования и Руководство по предобработке данных.

Комментарии