HRNet
HRNet è una rete convoluzionale che mantiene un flusso di feature ad alta risoluzione attraverso ripetute fusioni multi-scala, invece di recuperare la risoluzione dopo il downsampling. LibreYOLO include la variante ufficiale top-down per la posa, per inferenza e validazione.
- Task
- pose
- Dimensioni
- Installa
pip install libreyolo- Livello di supporto
- Solo inferenza, dalla v. Solo predizione, validazione ed esportazione. Le funzionalità di addestramento non si applicano.
- Licenze
- Codice MIT, pesi MIT. Uso commerciale
Installazione
HRNet non richiede nessun extra oltre al pacchetto base.
pip install libreyoloIl suo rilevatore di persone predefinito, un checkpoint LibreYOLO9t leggero, si scarica automaticamente la prima volta che HRNet si abbina a esso.
Predizione
I pesi si scaricano da Hugging Face al primo utilizzo e restano in cache in locale.
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Nessuna sorgente di persone indicata: HRNet si abbina da solo a un# rilevatore leggero LibreYOLO9t e registra quella scelta una volta.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") # Salta del tutto il rilevamento: tratta l'intera immagine come una persona.result = model(SAMPLE_IMAGE, cropped=True) # Oppure passa a HRNet i box di un rilevatore che hai già eseguito.result = model(SAMPLE_IMAGE, person_boxes=[[34, 12, 220, 400]]) # Oppure abbinalo a un rilevatore LibreYOLO specifico invece di quello# predefinito LibreYOLO9t.result = model(SAMPLE_IMAGE, person_detector="rfdetr")HRNet è uno stimatore della posa top-down: prima che la testa per la posa possa
girare serve un box della persona, quindi ogni chiamata ne risolve uno. Se non
gli dici nulla, la prima volta si abbina da solo a un rilevatore LibreYOLO9t e
registra quella scelta nei log. cropped=True salta il rilevamento e tratta
l'intera immagine come una sola persona; person_boxes accetta i box di un
rilevatore che hai già eseguito; person_detector accetta "auto",
"rfdetr", qualsiasi modello di rilevamento LibreYOLO oppure un semplice
callable. flip_test=True esegue il modello anche sul ritaglio ribaltato
orizzontalmente e fa la media delle due heatmap: è la test-time augmentation
propria di HRNet; il generico augment=True qui non è definito. Le sorgenti
con più immagini vengono elaborate in sequenza: il rilevatore di HRNet e il
numero di persone variabile da immagine a immagine non consentono la predizione
in batch. Vedi predizione per sorgenti, streaming e gestione
dei risultati.
Varianti
Due dimensioni, w32 e w48, che predicono entrambe il set standard di 17
keypoint COCO a partire da un ritaglio della persona a risoluzione fissa; w48
è il più largo dei due backbone.
Il model zoo upstream riporta l'accuratezza della posa per ogni dimensione con il proprio rilevatore di persone, la propria configurazione di flip-test e il protocollo ufficiale di valutazione COCO. L'abbinamento predefinito di LibreYOLO usa un rilevatore diverso, quindi una validazione fatta qui misura quella combinazione, non quella upstream; per far coincidere i numeri upstream servono gli stessi box delle persone, gli stessi punteggi del rilevatore e la stessa impostazione di flip usati nella valutazione originale.
Validazione
val() calcola l'OKS-AP sui keypoint in stile COCO e accetta un data.yaml
YOLO-pose oppure un JSON di keypoint COCO più una directory di immagini. Il
backend delle metriche è faster-coco-eval per impostazione predefinita, con
pycocotools usato automaticamente quando faster-coco-eval non è installato;
faster_coco_eval=False forza il percorso 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 validazione richiama internamente il predict() di HRNet, quindi usa il
rilevatore di persone con cui il modello è stato costruito o chiamato.
Costruisci il modello con un person_detector= esplicito per tenere fissa
quella sorgente tra un'esecuzione e l'altra, invece di lasciare che ogni
chiamata risolva di nuovo il valore predefinito.
Esportazione
| Task | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pose | Pose to ONNX: supportato | Pose to TorchScript: supportato | Pose to ExecuTorch: non supportato | Pose to TensorRT: supportato | Pose to OpenVINO: supportato | Pose to Paddle: non supportato | Pose to MNN: non supportato | Pose to RKNN: non supportato | Pose to ncnn: non supportato | Pose to TFLite: non supportato | Pose to CoreML: non supportato | Pose to Core AI: non supportato |
Il contratto di esportazione di HRNet copre solo ONNX, TorchScript, OpenVINO e TensorRT; qualsiasi altro formato solleva un errore prima che inizi il tracing. Ogni esportazione contiene la sola testa a heatmap su canvas fisso, batch uno in FP32, che prende un ritaglio della persona e restituisce heatmap grezze: la geometria affine del ritaglio che la precede e il decode delle heatmap, il ripristino del flip e la soppressione OKS che la seguono restano in Python, quindi una pipeline completa che entra come immagine ed esce come keypoint ha comunque bisogno di LibreYOLO dall'altro capo.
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 # Il grafo esportato è la sola testa a heatmap su canvas fisso: prende un# batch di ritagli di persona già estratti e normalizzati e restituisce# heatmap grezze. Rilevamento delle persone, geometria del ritaglio,# decode delle heatmap e soppressione OKS non fanno parte del grafo;# eseguirlo fuori da LibreYOLO significa reimplementare da sé quel decode.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]Checkpoint
Tutti i file di pesi pubblicati per questa famiglia.
| File | Ingresso (px) | Licenza dei pesi |
|---|---|---|
| Pose | ||
| LibreHRNetw32-pose.pt | mit | |
| LibreHRNetw48-pose.pt | mit | |
Oggi tutti i file elencati sopra sono presenti nell<link>organizzazione LibreYOLO</link> e vengono scaricati al primo utilizzo.
Licenza
Controlla la licenza nel repository Hugging Face degli specifici pesi che scarichi. Ogni checkpoint nell<link>organizzazione LibreYOLO</link> ne include una e non è sempre la stessa per tutta la famiglia. Quel repository è la fonte autorevole; il riepilogo seguente descrive le condizioni applicabili al momento dellultima verifica di questa pagina.
Questa è una descrizione delle licenze coinvolte, non una consulenza legale. Se la risposta è importante a fini commerciali, leggi personalmente le licenze e chiedi una consulenza indipendente.
- Lavoro originale
- HRNet, Microsoft
- Licenza upstream
- MIT
- Sorgente upstream
- github.com/leoxiaobin/deep-high-resolution-net.pytorch
- Codice LibreYOLO
- MIT
- Pesi
- MIT, ripubblicati su huggingface.co/LibreYOLO
- Interpretazione
- 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.
Citazione
@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}
}Copiato dal blocco di citazione degli autori disponibile su github.com/leoxiaobin/deep-high-resolution-net.pytorch#citation.