Поза ЙОЛО-НАС – LearnOpenCV
YOLO-NAS Pose

Модели YOLO-NAS Pose это последний вклад в область оценки позы. Ранее в этом году Deci получила широкое признание за свою новаторскую базовую модель обнаружения объектов YOLO-NAS. Основываясь на успехе YOLO-NAS, компания представила YOLO-NAS Pose в качестве своего аналога в оценке позы. Эта модель обеспечивает превосходный баланс между задержкой и точностью.

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

  • мониторинг движений пациентов в медицинских учреждениях,

  • анализ результатов спортсменов в спорте,

  • создание бесшовных интерфейсов человек-компьютер и совершенствование роботизированных систем.

Архитектура модели YOLO-NAS Pose

Традиционные модели оценки позы следуют одному из двух подходов:

  1. Определите всех людей в сцене, затем оцените ее ключевые точки и создайте позу. Двухэтапный процесс сверху вниз.

  2. Определите все ключевые точки в сцене, затем сгенерируйте позу. Двухэтапный восходящий процесс.

YOLO-NAS Pose работает иначе, чем традиционные модели оценки позы. Вместо того, чтобы сначала обнаруживать человека, а затем оценивать его позу, она может обнаружить и оценить человека и его позу одновременно, за один шаг.

Архитектура  YOLO-NAS Pose - Архитектура backbone и neсk
Архитектура YOLO-NAS Pose - Архитектура backbone и neсk

Модели поз построены поверх архитектуры обнаружения объектов YOLO-NAS. Как модели обнаружения объектов, так и модели оценки поз имеют одинаковую конструкцию backbone и neсk, но отличаются по head. Head для YOLO-NAS Pose предназначена для решения многозадачной задачи, т.е. обнаружения объекта одного класса (например, человека или животного) и оценки положения объекта.

Архитектура YOLO-NAS Pose- Архитектура Head
Архитектура YOLO-NAS Pose- Архитектура Head

Эта впечатляющая комбинация является результатом запатентованной системы поиска по нейронной архитектуре (NAS) Deci AutoNAC. Он ориентируется в обширном пространстве поиска архитектуры и возвращает лучшие архитектурные проекты. Ниже приведены гиперпараметры для поиска:

  • Количество блоков Conv-BN-Relu для обоих путей регрессии pose и box.

  • Количество промежуточных каналов для обоих путей.

  • Выбор между общим стержнем для регрессии позы / бокса или отдельными стержнями.

Результат говорит сам за себя.

Оценка YOLO-NAS Pose в наборе данных COCO Val 2017
Оценка YOLO-NAS Pose в наборе данных COCO Val 2017

Модели YOLO-NAS Pose оцениваются на основе набора данных COCO Val 2017. Точность и задержка модели соответствуют последнему слову техники. Модель nano является самой быстрой и обеспечивает скорость вывода до 425 кадров в секунду на графическом процессоре T4. Между тем, большая модель может развивать скорость до 113 кадров в секунду.

Если мы посмотрим на развертывание edge, модели nano и medium по-прежнему будут работать в режиме реального времени со скоростью 63 кадра в секунду и 48 кадров в секунду соответственно. Но когда мы смотрим на средние и крупные модели, установленные на Jetson Xavier NX, скорость начинает снижаться и достигает 26 кадров в секунду и 20 кадров в секунду соответственно. Это все еще одни из лучших доступных результатов.

Выполнение вывода на основе YOLO-NAS Pose

Модели YOLO-NAS Pose, конвейер обучения и записные книжки доступны в SuperGradients библиотеке Vision с открытым исходным кодом на базе PyTorch от Deci. Вы можете установить SuperGradients через pip.

pip install super-gradients

Для выполнения логического вывода мы импортируем следующие модули Python:

  • torch: импорт PyTorch фреймворка. Фундамент, на котором SuperGradients строится.

  • os: Полезно для системных команд и операций с каталогами.

  • pathlib: Используется для получения путей к файлам и операций с путями.

  • super_gradients: Родина моделей YOLO-NAS Pose.

import torch
import os
import pathlib
from super_gradients.training import models
from super_gradients.common.object_names import Models

Теперь нам нужны несколько изображений для выполнения логического вывода. Давайте загрузим их с помощью wget.

urls = [
    "https://mir-s3-cdn-cf.behance.net/project_modules/max_3840/2712bd29493563.55f6ec5e98924.jpg",
    "https://i.pinimg.com/736x/5a/8a/5c/5a8a5c4cd658580ae4719e5c96043541.jpg",
    "https://mir-s3-cdn-cf.behance.net/project_modules/max_1200/4d222729493563.55f6420cd3768.jpg"
]
downloaded_files = []
 
for index, url in enumerate(urls, start=1):
  os.system(f"wget {url} -O pose-{index}.jpg")
  downloaded_files.append(f"pose-{index}.jpg")

Мы добавляем несколько URL-адресов изображений в список, а затем просматриваем список, загружаем и переименовываем каждый файл с помощью wget, а также добавляем пути к файлам в новый список downloaded_files.

Далее мы получаем модели YOLO-NAS Pose.

model = models.get("yolo_nas_pose_l", pretrained_weights="coco_pose")
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model.to(device)

Используя функциюget(), мы загружаем модели. Передаем название модели, за которым следует путь к файлу с весами. В нашем случае мы используем большую модель NAS Pose с предварительно подготовленными весами COCO.

Затем загрузите эту модель на устройство с графическим процессором, если оно доступно. Это значительно ускорит вывод.

Теперь используйте функцию predict() для выполнения прогнозов на изображениях.

confidence = 0.6
model.predict(downloaded_files[0], conf=confidence).show()

predict() принимает изображение и порог достоверности в качестве входных данных для выполнения логического вывода на модели. Используйте show() для отображения выходных данных.

Помимо изображений, predict() также принимает следующие исходные данные:

Path to local image (str)

predict("path/to/image.jpg")

Path to images directory (str)

predict("path/to/images/directory")

Path to local video (str)

predict("path/to/video.mp4")

URL to remote image (str)

predict("https://example.com/image.jpg")

3-dimensional NumPy image ([H, W, C])

predict(np.zeros((480, 640, 3), dtype=np.uint8))

4-dimensional NumPy image ([N, H, W, C] or [N, C, H, W])

predict(np.zeros((480, 640, 3), dtype=np.uint8))

List of 3-dimensional numpy arrays ([H1, W1, C], [H2, W2, C], …)

predict([np.zeros((480, 640, 3), dtype=np.uint8), np.zeros((384, 512, 3), dtype=np.uint8) ])

3-dimensional Torch Tensor ([H, W, C] or [C, H, W])

predict(torch.zeros((480, 640, 3), dtype=torch.uint8))

4-dimensional Torch Tensor ([N, H, W, C] or [N, C, H, W])

predict(torch.zeros((4, 480, 640, 3), dtype=torch.uint8))

 YOLO-NAS Pose предсказывающая ключевые точки баскетболиста
 YOLO-NAS Pose предсказывающая ключевые точки баскетболиста

SuperGradients также могут сохранять выходные данные вместо их отображения

output_file = pathlib.Path(downloaded_files[1]).stem + "-detections" + pathlib.Path(downloaded_files[1]).suffix
model.predict(downloaded_files[1], conf=confidence).save(output_file)

Оба метода отображают результаты на входном изображении или видео. Если вам просто нужны результаты:

preds = model.predict(downloaded_files[2], conf=confidence)

Исходные прогнозы будут иметь следующее:

  • Предсказания ограничивающих рамок в формате XYXY

  • Оценки обнаружения прогнозируемых объектов

  • 17 прогнозов ключевых точек в формате XY

  • Достоверные оценки для каждой из этих ключевых точек

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

YOLO-NAS Pose v/s YOLOv8 Pose

YOLO-NAS Pose vs YOLOv8 Pose - Эффективный график границ
YOLO-NAS Pose vs YOLOv8 Pose - Эффективный график границ

Приведенный выше график представляет собой компромисс между точностью и задержкой в YOLO-NAS Pose и моделями позы YOLOv8. Это пространство также известно как граница эффективности. Все модели оцениваются с использованием набора данных COCO Val 2017 и процессора Intel Xeon 4-го поколения с размером пакета 1 и 16-разрядными операциями с плавающей запятой.

Точность всех моделей YOLO-NAS Pose выше, чем у моделей поз YOLOv8. Это может быть подтверждено разработками head AutoNAC. Теперь давайте поговорим о специфике:

  • Меньшие модели YOLO-NAS Pose, а именно nano и small, хотя и обладают более высокой точностью, но работают медленнее, чем модели YOLOv8 Pose.

  • Более крупные модели YOLO-NAS Pose, такие как medium и large, лучше как с точки зрения точности, так и с точки зрения задержки.

Теперь, если мы хотим погрузиться глубже, вот результаты моделей YOLO-NAS Pose и позы YOLOv8 в наборе данных COCO Val 2017.

YOLO-NAS Pose по сравнению с оценкой позы YOLOv8 в наборе данных COCO Val 2017
YOLO-NAS Pose по сравнению с оценкой позы YOLOv8 в наборе данных COCO Val 2017

Точность моделей YOLO-NAS Pose всегда выше, чем соответствующей модели поз YOLOv8. Давайте рассмотрим особенности:

  • Количество параметров соответствующих моделей неодинаково. Например, NAS Nano имеет 9,9 млн параметров, а v8 Nano - 3,3 млн параметров. Это разница в одну треть.

  • Кроме того, аппаратное обеспечение для выполнения логического вывода также отличается. NAS опубликовал результаты на графическом процессоре T4, который был выпущен в сентябре 2018 года, тогда как v8 опубликовал результаты на более позднем графическом процессоре A100.

Как обучались моделям поз?

Функция потери позы YOLO-NAS

Чтобы убедиться, что модель эффективно справилась с обеими задачами, Deci улучшила функции потерь, которые использовались при обучении. Вместо того, чтобы просто учитывать оценку IoU (пересечение по объединению) для назначенных полей, также включили оценку сходства ключевых точек объекта (OKS), которая сравнивает прогнозируемые ключевые точки с фактическими. Это изменение позволяет модели делать точные прогнозы как для ограничивающих рамок, так и для оценки позы.

Кроме того, был использован метод прямой регрессии OKS, который превосходит традиционные методы потери L1 / L2. Этот подход обладает рядом преимуществ:

  • Она работает в диапазоне от 0 до 1, аналогично блок -расписке, указывающей, насколько похожи позы.

  • Она учитывает различные уровни сложности аннотирования конкретных ключевых точек. Каждой ключевой точке присваивается уникальная сигма-оценка, которая отражает точность аннотирования и специфику набора данных. Оценка определяет, насколько модель оштрафована за неточные прогнозы.

  • Использование функции потерь, которая согласуется с метрикой проверки, что, в свою очередь, позволяет нацеливать и оптимизировать метрику.

Гиперпараметры для обучения

Поскольку YOLO-NAS Pose использует аналогичную базовую структуру, что и модель YOLO-NAS, предварительно подготовленные веса из YOLO-NAS были использованы для инициализации основы и фильтра нашей модели, прежде чем приступить к окончательному обучению. Вот обучающие гиперпараметры:

  • Оборудование для обучения: Использовалось 8 графических процессоров NVIDIA GeForce RTX 3090 с PyTorch 2.0.

  • График тренировок: Тренировки проводились в течение 1000 периодов с ранним прекращением, если за последние 100 периодов не наблюдалось улучшения результатов.

  • Оптимизатор: использовал AdamW с косинусным снижением LR (скорости обучения), что позволило снизить LR в 0,05 раза к концу тренировки.

  • Снижение веса: был применен коэффициент снижения веса 0,000001, без учета смещения и слоев BatchNorm.

  • экспоненциальной скользящей средней: для спада EMA использовался коэффициент бета, равный 50.

  • Разрешение изображения: Изображения были обработаны с максимальной длиной стороны 640 пикселей и дополнены до разрешения 640 × 640 цветом заполнения (127, 127, 127).

Такие дополнения, как мозаичное увеличение данных, случайные повороты на 90 градусов и цветовые дополнения, дополнительно улучшили AP на 2.

Комментарии (3)


  1. Sazonov
    08.11.2023 12:45

    Спасибо большое за статью. У меня тут вырисовывается один проект, хочется понимать, возможно ли такие модели применять в парных видах спорта, к примеру - танцах? Скорость не критична вообще, то есть реалтайм не нужен.


    1. dimanosov007 Автор
      08.11.2023 12:45

      Применять то, можно, но вот если человек будет перекрыт другим человеком, то тут уже модель не сможет определить ключевые точки. Надо экспериментировать


      1. rPman
        08.11.2023 12:45

        Еще одежда может вносить проблемы, в этой дисциплине блестящие и переливающиеся платья с блестками и дополнительными элементами (условно рога или крылья) могут свести с ума модель, но если набрать достаточно обучающих данных, это тоже можно обойти.