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.
Origine
HRNet par Microsoft, MIT. Article, source
Licences
Code MIT, poids MIT. Usage commercial

Installation

HRNet ne demande aucun extra au-delà du paquet de base.

bash
pip install libreyolo

Son 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.

Python
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)
CLI
libreyolo predict model=LibreHRNetw32-pose.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Source des personnes
from 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.

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

La 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âcheONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
PosePose to ONNX : pris en chargePose to TorchScript : pris en chargePose to ExecuTorch : non pris en chargePose to TensorRT : pris en chargePose to OpenVINO : pris en chargePose to Paddle : non pris en chargePose to MNN : non pris en chargePose to RKNN : non pris en chargePose to ncnn : non pris en chargePose to TFLite : non pris en chargePose to CoreML : non pris en chargePose 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.

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
Utiliser le fichier exporté
import 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.

FichierEntrée (px)Licence des poids
Pose
LibreHRNetw32-pose.ptmit
LibreHRNetw48-pose.ptmit

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
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.

Vérifié avec LibreYOLO v1.5.0. Les tableaux de support, les checkpoints et les chiffres de benchmark de cette page sont générés à partir de la bibliothèque publiée et des poids publiés, et non rédigés à la main.