HRNet
HRNet ist ein Convolutional Network, das durch wiederholte Multi-Scale-Fusion einen hochauflösenden Feature-Stream beibehält, anstatt die Auflösung nach dem Downsampling wiederherzustellen. LibreYOLO bindet die offizielle Top-down-Pose-Variante für Inferenz und Validierung ein.
- Aufgaben
- pose
- Größen
- Installation
pip install libreyolo- Supportstufe
- Nur Inferenz, seit v. Nur Vorhersage, Validierung und Export. Trainingsfunktionen sind nicht verfügbar.
- Upstream
- HRNet von Microsoft, MIT. Publikation, Quelle
- Lizenzen
- Code MIT, Gewichte MIT. Kommerzielle Nutzung
Installation
HRNet benötigt über das Basispaket hinaus keine weiteren Abhängigkeiten.
pip install libreyoloSein standardmäßiger Personendetektor, ein schlanker LibreYOLO9t-Checkpoint, wird automatisch heruntergeladen, wenn HRNet zum ersten Mal mit ihm gekoppelt wird.
Vorhersage
Die Gewichte werden bei der ersten Verwendung von Hugging Face heruntergeladen und lokal zwischengespeichert.
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Keine Personenquelle angegeben: HRNet koppelt sich automatisch mit# dem schlanken LibreYOLO9t-Detektor und protokolliert die Wahl einmal.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") # Erkennung auslassen: das ganze Bild als eine Person behandeln.result = model(SAMPLE_IMAGE, cropped=True) # Oder HRNet Boxen eines bereits ausgeführten Detektors übergeben.result = model(SAMPLE_IMAGE, person_boxes=[[34, 12, 220, 400]]) # Oder mit einem bestimmten LibreYOLO-Detektor statt mit dem# standardmäßigen LibreYOLO9t koppeln.result = model(SAMPLE_IMAGE, person_detector="rfdetr")HRNet ist ein Top-down-Pose-Schätzer: Bevor der Pose-Head ausgeführt werden
kann, benötigt er eine Personenbox, daher ermittelt jeder Aufruf eine solche
Box. Ohne weitere Angaben koppelt er sich beim ersten Mal mit einem
LibreYOLO9t-Detektor und protokolliert diese Wahl. cropped=True überspringt
die Erkennung und behandelt das gesamte Bild als eine Person. person_boxes
akzeptiert Boxen eines bereits ausgeführten Detektors. person_detector
akzeptiert "auto", "rfdetr", ein beliebiges LibreYOLO-Erkennungsmodell
oder ein einfaches Callable. Mit flip_test=True wird das Modell zusätzlich
auf dem horizontal gespiegelten Ausschnitt ausgeführt und der Mittelwert der
beiden Heatmaps gebildet. Dies ist die eigene Test-Time-Augmentierung von
HRNet, die generische Option augment=True ist hier nicht definiert. Quellen
mit mehreren Bildern werden sequenziell verarbeitet: Der Detektor von HRNet
und die je Bild variable Personenanzahl unterstützen keine gestapelte
Vorhersage. Unter Vorhersage findest du Informationen zu
Quellen, Streaming und Ergebnisverarbeitung.
Varianten
Es gibt zwei Größen, w32 und w48. Beide sagen den standardmäßigen
COCO-17-Keypoint-Satz aus einem Personenbild mit fester Auflösung voraus. w48
ist das breitere der beiden Backbones.
Der Model Zoo des Upstream-Projekts gibt die Pose-Accuracy für jede Größe mit einem eigenen Personendetektor, einer eigenen Flip-Test-Konfiguration und dem offiziellen COCO-Evaluierungsprotokoll an. Die Standardkopplung von LibreYOLO verwendet einen anderen Detektor. Ein Validierungslauf misst hier daher diese Kombination und nicht die des Upstream-Projekts. Um die Upstream-Werte zu reproduzieren, benötigst du dieselben Personenboxen, Detektor-Scores und Flip-Einstellungen wie bei der ursprünglichen Evaluierung.
Validierung
val() führt Keypoint-OKS-AP im COCO-Stil aus und akzeptiert eine YOLO-Pose-
data.yaml oder eine COCO-Keypoints-JSON-Datei zusammen mit einem
Bilderverzeichnis. Das standardmäßige Metrik-Backend ist faster-coco-eval.
Wenn faster-coco-eval nicht installiert ist, wird automatisch pycocotools
verwendet. Mit faster_coco_eval=False erzwingst du den pycocotools-Pfad.
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.yamlDie Validierung ruft intern die eigene predict()-Methode von HRNet auf und
verwendet daher den Personendetektor, mit dem das Modell erstellt oder
aufgerufen wurde. Erstelle das Modell mit einem expliziten person_detector=,
damit diese Quelle über mehrere Läufe hinweg gleich bleibt, anstatt bei jedem
Aufruf erneut den Standard ermitteln zu lassen.
Export
| Aufgabe | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pose | Pose to ONNX: unterstützt | Pose to TorchScript: unterstützt | Pose to ExecuTorch: nicht unterstützt | Pose to TensorRT: unterstützt | Pose to OpenVINO: unterstützt | Pose to Paddle: nicht unterstützt | Pose to MNN: nicht unterstützt | Pose to RKNN: nicht unterstützt | Pose to ncnn: nicht unterstützt | Pose to TFLite: nicht unterstützt | Pose to CoreML: nicht unterstützt | Pose to Core AI: nicht unterstützt |
Der Exportvertrag von HRNet umfasst ausschließlich ONNX, TorchScript, OpenVINO und TensorRT. Bei jedem anderen Format wird vor Beginn des Tracings ein Fehler ausgelöst. Jeder Export enthält nur den Heatmap-Head mit fester Canvas und Batch-Größe eins in FP32. Er nimmt einen Personenausschnitt entgegen und gibt rohe Heatmaps zurück. Die vorgelagerte affine Zuschnittgeometrie sowie die nachgelagerte Heatmap-Decodierung, Wiederherstellung nach Spiegelung und OKS-Unterdrückung verbleiben in Python. Eine vollständige Pipeline vom Bild zu den Keypoints benötigt daher auf der anderen Seite weiterhin 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 # Der exportierte Graph ist nur der Heatmap-Head mit fester Canvas:# Er erhält einen Batch fertig zugeschnittener, normalisierter# Personenausschnitte und gibt rohe Heatmaps zurück. Personenerkennung,# Zuschnittgeometrie, Heatmap-Decodierung und OKS-Unterdrückung gehören# nicht zu diesem Graphen. Außerhalb von LibreYOLO musst du diesen# Decodierungsschritt selbst neu implementieren.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
Alle veröffentlichten Gewichtsdateien dieser Familie.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| Pose | ||
| LibreHRNetw32-pose.pt | mit | |
| LibreHRNetw48-pose.pt | mit | |
Jede oben aufgeführte Datei ist heute in der LibreYOLO-Organisation verfügbar und wird bei der ersten Verwendung heruntergeladen.
Lizenzierung
Prüfe die Lizenz im Hugging-Face-Repository der konkreten Gewichte, die du herunterlädst. Jeder Checkpoint in der LibreYOLO-Organisation hat eine Lizenz, und sie ist innerhalb einer Familie nicht immer gleich. Dieses Repository ist die maßgebliche Quelle. Die Zusammenfassung unten beschreibt den Stand bei der letzten Verifizierung dieser Seite.
Dies ist eine Beschreibung der beteiligten Lizenzen und keine Rechtsberatung. Wenn die Antwort kommerziell relevant ist, lies die Lizenzen selbst und hole eigenen Rechtsrat ein.
- Originalarbeit
- HRNet, Microsoft
- Upstream-Lizenz
- MIT
- Upstream-Quelle
- github.com/leoxiaobin/deep-high-resolution-net.pytorch
- LibreYOLO-Code
- MIT
- Gewichte
- MIT, erneut unter huggingface.co/LibreYOLO veröffentlicht
- Einordnung
- 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.
Zitieren
@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}
}Aus dem Zitierblock der Autoren unter github.com/leoxiaobin/deep-high-resolution-net.pytorch#citation kopiert.