HRNet

HRNet, це згорткова мережа, яка зберігає потік ознак високої роздільної здатності через повторюване багатомасштабне злиття замість відновлення роздільної здатності після зменшення. LibreYOLO обгортає офіційний нисхідний варіант оцінювання пози для інференсу й валідації.

Задачі
pose
Розміри
Встановлення
pip install libreyolo
Рівень підтримки
Лише інференс, починаючи з v. Лише передбачення, валідація та експорт. Функції навчання не застосовуються.
Першоджерело
HRNet, автори: Microsoft, ліцензія MIT. Стаття, джерело
Ліцензії
Код: MIT, ваги: MIT. Комерційне використання

Встановлення

HRNet не потребує нічого понад базовий пакет.

bash
pip install libreyolo

Її стандартний детектор людей, легка контрольна точка LibreYOLO9t, завантажується автоматично, коли HRNet уперше поєднується з ним.

Передбачення

Під час першого використання ваги завантажуються з Hugging Face і кешуються локально.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Джерело людей не задано: HRNet автоматично поєднується з легким# детектором LibreYOLO9t і один раз реєструє цей вибір.model = LibreYOLO("LibreHRNetw32-pose.pt")result = model(SAMPLE_IMAGE, save=True) print(result.keypoints.xy)print(result.boxes.xyxy)
CLI
libreyolo predict model=LibreHRNetw32-pose.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Джерело людей
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreHRNetw32-pose.pt") # Повністю пропустіть виявлення: вважайте все зображення однією людиною.result = model(SAMPLE_IMAGE, cropped=True) # Або передайте HRNet рамки з уже запущеного детектора.result = model(SAMPLE_IMAGE, person_boxes=[[34, 12, 220, 400]]) # Або поєднайте її з конкретним детектором LibreYOLO замість# стандартного LibreYOLO9t.result = model(SAMPLE_IMAGE, person_detector="rfdetr")

HRNet є нисхідним оцінювачем пози: до запуску голови пози їй потрібна рамка людини, тому кожен виклик визначає її джерело. Якщо нічого не вказано, під час першого виклику вона поєднується з детектором LibreYOLO9t і реєструє цей вибір. cropped=True пропускає виявлення та вважає все зображення однією людиною; person_boxes приймає рамки з уже запущеного детектора; person_detector приймає "auto", "rfdetr", будь-яку модель виявлення LibreYOLO або звичайну викличну сутність. flip_test=True також запускає модель на горизонтально віддзеркаленому фрагменті й усереднює дві теплові карти, що є власною аугментацією HRNet під час тестування; загальний augment=True тут не визначено. Джерела з кількома зображеннями обробляються послідовно: детектор HRNet і змінна кількість людей на зображення не підтримують пакетне передбачення. Джерела, потокову обробку й роботу з результатами описано в розділі передбачення.

Варіанти

Два розміри, w32 і w48, обидва передбачають стандартний набір ключових точок COCO-17 із фрагмента людини фіксованої роздільної здатності; w48 має ширший бекбон.

Зоопарк моделей upstream повідомляє точність пози кожного розміру з власним детектором людей, власним налаштуванням перевірки з віддзеркаленням та офіційним протоколом оцінювання COCO. Стандартне поєднання LibreYOLO використовує інший детектор, тому валідація тут вимірює саме це поєднання, а не upstream. Для відтворення показників upstream потрібні ті самі рамки людей, оцінки детектора й налаштування віддзеркалення, що в початковому оцінюванні.

Валідація

val() запускає OKS-AP ключових точок у стилі COCO та приймає data.yaml YOLO-pose або JSON ключових точок COCO разом із каталогом зображень. Стандартний бекенд метрик, faster-coco-eval; якщо його не встановлено, автоматично використовується pycocotools, а faster_coco_eval=False примусово вибирає шлях pycocotools.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreHRNetw32-pose.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/keypoints_mAP50-95"])print(metrics["metrics/keypoints_mAP50"])
CLI
libreyolo val model=LibreHRNetw32-pose.pt data=my-dataset.yaml

Валідація внутрішньо викликає власний predict() HRNet, тому використовує детектор людей, з яким модель було створено або викликано. Створіть модель з явним person_detector=, щоб зафіксувати це джерело між запусками й не визначати стандартний варіант заново в кожному виклику.

Експорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
PosePose to ONNX: підтримуєтьсяPose to TorchScript: підтримуєтьсяPose to ExecuTorch: не підтримуєтьсяPose to TensorRT: підтримуєтьсяPose to OpenVINO: підтримуєтьсяPose to Paddle: не підтримуєтьсяPose to MNN: не підтримуєтьсяPose to RKNN: не підтримуєтьсяPose to ncnn: не підтримуєтьсяPose to TFLite: не підтримуєтьсяPose to CoreML: не підтримуєтьсяPose to Core AI: не підтримується

Контракт експорту HRNet охоплює лише ONNX, TorchScript, OpenVINO і TensorRT; будь-який інший формат спричиняє помилку до початку трасування. Кожен експорт містить лише голову теплової карти з фіксованим полотном, пакетом 1 і FP32: вона приймає фрагмент людини та повертає необроблені теплові карти. Геометрія афінного обрізання перед нею, декодування теплових карт, відновлення віддзеркалення та пригнічення OKS після неї залишаються в Python, тому для повного конвеєра від зображення до ключових точок на іншому кінці й далі потрібна LibreYOLO.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreHRNetw32-pose.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibreHRNetw32-pose.pt format=onnx
Використання експортованого файла
import numpy as npimport onnxruntime as ort # Експортований граф містить лише голову теплової карти з фіксованим полотном:# він приймає пакет уже обрізаних і нормалізованих фрагментів людей# та повертає необроблені теплові карти. Виявлення людей, геометрія# обрізання, декодування теплової карти й пригнічення OKS не входять до графа;# поза LibreYOLO цей крок декодування потрібно реалізувати самостійно.session = ort.InferenceSession("LibreHRNetw32-pose.onnx")name = session.get_inputs()[0].nameheatmaps = session.run(    None, {name: np.zeros((1, 3, 256, 192), dtype=np.float32)})[0]

Контрольні точки

Усі опубліковані файли ваг для цього сімейства.

ФайлВхід (пікс.)Ліцензія ваг
Pose
LibreHRNetw32-pose.ptmit
LibreHRNetw48-pose.ptmit

Кожен наведений вище файл уже доступний у організації LibreYOLO і завантажується під час першого використання.

Ліцензування

Перевіряйте ліцензію в репозиторії Hugging Face конкретних ваг, які завантажуєте. Кожна контрольна точка в організації LibreYOLO має ліцензію, і вона не завжди однакова для всього сімейства. Цей репозиторій є авторитетним джерелом, а наведене нижче резюме описує умови на момент останньої перевірки сторінки.

Це опис відповідних ліцензій, а не юридична консультація. Якщо відповідь має комерційне значення, самостійно прочитайте ліцензії та зверніться по юридичну консультацію.

Оригінальна робота
HRNet, Microsoft
Ліцензія першоджерела
MIT
Джерело першоджерела
github.com/leoxiaobin/deep-high-resolution-net.pytorch
Код LibreYOLO
MIT
Ваги
MIT, повторно опубліковано на huggingface.co/LibreYOLO
Тлумачення
MIT permits commercial and non-commercial use, modification and redistribution of both the code and the two published checkpoints, with the copyright notice retained. The official repository does not attach a separate license to its model-zoo checkpoints; LibreYOLO's redistribution basis is the MIT license the releasing project implies, the same basis the upstream repository's own files state.

Цитування

@inproceedings{sun2019deep,
  title={Deep High-Resolution Representation Learning for Human Pose Estimation},
  author={Sun, Ke and Xiao, Bin and Liu, Dong and Wang, Jingdong},
  booktitle={CVPR},
  year={2019}
}

Скопійовано з блоку цитування авторів на сторінці github.com/leoxiaobin/deep-high-resolution-net.pytorch#citation.

Перевірено з LibreYOLO v1.5.0. Таблиці підтримки, контрольні точки й результати бенчмарків на цій сторінці згенеровано з випущеної бібліотеки та опублікованих ваг, а не написано вручну.