HRNet
HRNet, це згорткова мережа, яка зберігає потік ознак високої роздільної здатності через повторюване багатомасштабне злиття замість відновлення роздільної здатності після зменшення. LibreYOLO обгортає офіційний нисхідний варіант оцінювання пози для інференсу й валідації.
- Задачі
- pose
- Розміри
- Встановлення
pip install libreyolo- Рівень підтримки
- Лише інференс, починаючи з v. Лише передбачення, валідація та експорт. Функції навчання не застосовуються.
- Ліцензії
- Код: MIT, ваги: MIT. Комерційне використання
Встановлення
HRNet не потребує нічого понад базовий пакет.
pip install libreyoloЇї стандартний детектор людей, легка контрольна точка LibreYOLO9t, завантажується автоматично, коли HRNet уперше поєднується з ним.
Передбачення
Під час першого використання ваги завантажуються з Hugging Face і кешуються локально.
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)libreyolo predict model=LibreHRNetw32-pose.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom 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.
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"])libreyolo val model=LibreHRNetw32-pose.pt data=my-dataset.yamlВалідація внутрішньо викликає власний predict() HRNet, тому використовує
детектор людей, з яким модель було створено або викликано. Створіть модель
з явним person_detector=, щоб зафіксувати це джерело між запусками й
не визначати стандартний варіант заново в кожному виклику.
Експорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pose | Pose 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreHRNetw32-pose.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreHRNetw32-pose.pt format=onnximport 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.pt | mit | |
| LibreHRNetw48-pose.pt | mit | |
Кожен наведений вище файл уже доступний у організації 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.