HRNet
HRNet est un réseau convolutif qui conserve un flux de caractéristiques en haute résolution grâce à des fusions multi-échelles répétées, au lieu de récupérer la résolution après sous-échantillonnage. LibreYOLO encapsule la variante officielle de pose top-down pour l'inférence et la validation.
- Tâches
- pose
- Tailles
- Installer
pip install libreyolo- Niveau de support
- Inférence uniquement, depuis v. Prédiction, validation et export uniquement. Les fonctionnalités d'entraînement ne s'appliquent pas.
- Licences
- Code MIT, poids MIT. Usage commercial
Installation
HRNet ne demande aucun extra au-delà du paquet de base.
pip install libreyoloSon détecteur de personnes par défaut, un checkpoint LibreYOLO9t léger, se télécharge automatiquement la première fois que HRNet s'y associe.
Prédire
Les poids sont téléchargés depuis Hugging Face au premier usage, puis mis en cache localement.
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Sans source de personnes : HRNet s'associe automatiquement à un# détecteur LibreYOLO9t léger et journalise ce choix une fois.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") # Sautez entièrement la détection : l'image entière est une personne.result = model(SAMPLE_IMAGE, cropped=True) # Ou passez à HRNet les boîtes d'un détecteur déjà exécuté.result = model(SAMPLE_IMAGE, person_boxes=[[34, 12, 220, 400]]) # Ou associez-le à un détecteur LibreYOLO précis plutôt qu'au# LibreYOLO9t par défaut.result = model(SAMPLE_IMAGE, person_detector="rfdetr")HRNet est un estimateur de pose top-down : il lui faut une boîte de personne
avant que la tête de pose puisse s'exécuter, si bien que chaque appel en résout
une. Laissé à lui-même, il s'associe à un détecteur LibreYOLO9t la première fois
et journalise ce choix. cropped=True saute la détection et traite l'image
entière comme une seule personne ; person_boxes accepte les boîtes d'un
détecteur que vous avez déjà lancé ; person_detector accepte "auto",
"rfdetr", n'importe quel modèle de détection LibreYOLO, ou un simple callable.
flip_test=True exécute aussi le modèle sur le crop retourné horizontalement et
moyenne les deux heatmaps, l'augmentation au moment du test propre à HRNet ; le
augment=True générique n'est pas défini ici. Les sources multi-images sont
traitées séquentiellement : le détecteur de HRNet et le nombre variable de
personnes par image ne permettent pas la prédiction empilée. Voir
la prédiction pour les sources, le streaming et le traitement
des résultats.
Variantes
Deux tailles, w32 et w48, qui prédisent toutes deux le jeu standard de
points clés COCO-17 à partir d'un crop de personne à résolution fixe ; w48 est
le plus large des deux backbones.
Le model zoo upstream publie l'exactitude de pose de chaque taille avec son propre détecteur de personnes, son propre réglage de flip-testing et le protocole d'évaluation COCO officiel. L'association par défaut de LibreYOLO utilise un autre détecteur, si bien qu'une validation lancée ici mesure cette combinaison, pas celle d'upstream ; retrouver les chiffres upstream demande les mêmes boîtes de personnes, les mêmes scores de détecteur et le même réglage de flip que ceux de l'évaluation d'origine.
Valider
val() calcule l'OKS-AP de points clés à la façon de COCO et accepte un
data.yaml YOLO-pose ou un JSON de points clés COCO accompagné d'un dossier
d'images. Le backend de métriques est faster-coco-eval par défaut,
pycocotools prenant automatiquement le relais quand faster-coco-eval n'est pas
installé ; faster_coco_eval=False force le chemin 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.yamlLa validation pilote en interne le predict() de HRNet, elle utilise donc le
détecteur de personnes avec lequel le modèle a été construit ou appelé.
Construisez le modèle avec un person_detector= explicite pour garder cette
source fixe d'une exécution à l'autre, plutôt que de laisser chaque appel
re-résoudre la valeur par défaut.
Exporter
| Tâche | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pose | Pose to ONNX : pris en charge | Pose to TorchScript : pris en charge | Pose to ExecuTorch : non pris en charge | Pose to TensorRT : pris en charge | Pose to OpenVINO : pris en charge | Pose to Paddle : non pris en charge | Pose to MNN : non pris en charge | Pose to RKNN : non pris en charge | Pose to ncnn : non pris en charge | Pose to TFLite : non pris en charge | Pose to CoreML : non pris en charge | Pose to Core AI : non pris en charge |
Le contrat d'export de HRNet ne couvre qu'ONNX, TorchScript, OpenVINO et TensorRT ; tout autre format lève une erreur avant le début du tracé. Chaque export est la seule tête de heatmap à canevas fixe, en batch un et FP32, qui prend un crop de personne et renvoie des heatmaps brutes : la géométrie affine du crop en amont et le décodage des heatmaps, la restauration du flip et la suppression OKS en aval restent en Python, si bien qu'un pipeline complet, image en entrée et points clés en sortie, a toujours besoin de LibreYOLO à l'autre bout.
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 # Le graphe exporté est la seule tête de heatmap à canevas fixe : il# prend un batch de crops de personnes déjà découpés et normalisés,# et renvoie des heatmaps brutes. Détection de personnes, géométrie du# crop, décodage des heatmaps et suppression OKS n'en font pas partie ;# l'exécuter hors de LibreYOLO impose de réimplémenter ce décodage.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]Checkpoints
Tous les fichiers de poids publiés de cette famille.
| Fichier | Entrée (px) | Licence des poids |
|---|---|---|
| Pose | ||
| LibreHRNetw32-pose.pt | mit | |
| LibreHRNetw48-pose.pt | mit | |
Tous les fichiers ci-dessus sont actuellement disponibles dans l<link>organisation LibreYOLO</link> et sont téléchargés à la première utilisation.
Licence
Vérifiez la licence dans le dépôt Hugging Face des poids précis que vous téléchargez. Chaque checkpoint de l<link>organisation LibreYOLO</link> en possède une, et elles ne sont pas toujours identiques au sein dune même famille. Ce dépôt fait autorité ; le résumé ci-dessous décrit les conditions applicables lors de la dernière vérification de cette page.
Ceci décrit les licences concernées et ne constitue pas un conseil juridique. Si la réponse a une importance commerciale, lisez vous-même les licences et consultez votre propre avocat.
- Travail d'origine
- HRNet, Microsoft
- Licence du projet d'origine
- MIT
- Source du projet d'origine
- github.com/leoxiaobin/deep-high-resolution-net.pytorch
- Code de LibreYOLO
- MIT
- Poids
- MIT, republiés sur huggingface.co/LibreYOLO
- Interprétation
- 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.
Citation
@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}
}Copié depuis le bloc de citation des auteurs sur github.com/leoxiaobin/deep-high-resolution-net.pytorch#citation.