HRNet
HRNet to sieć konwolucyjna, która utrzymuje strumień cech o wysokiej rozdzielczości przez wielokrotne scalanie wieloskalowe zamiast odzyskiwać rozdzielczość po jej zmniejszeniu. LibreYOLO opakowuje oficjalny odgórny wariant estymacji pozy do inferencji i walidacji.
- Zadania
- pose
- Rozmiary
- Instalacja
pip install libreyolo- Poziom obsługi
- Tylko inferencja, od wersji v. Tylko predykcja, walidacja i eksport. Funkcje trenowania nie mają zastosowania.
- Projekt źródłowy
- HRNet, autorzy: Microsoft, licencja: MIT. Publikacja, kod źródłowy
- Licencje
- Kod: MIT, wagi: MIT. Użycie komercyjne
Instalacja
HRNet nie wymaga żadnego dodatku poza pakietem podstawowym.
pip install libreyoloJego domyślny detektor osób, lekki checkpoint LibreYOLO9t, jest pobierany automatycznie przy pierwszym połączeniu z HRNet.
Predykcja
Przy pierwszym użyciu wagi są pobierane z Hugging Face i zapisywane w lokalnej pamięci podręcznej.
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Bez podanego źródła osób HRNet automatycznie łączy się z lekkim# detektorem LibreYOLO9t i jednorazowo zapisuje ten wybór w logu.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") # Całkowite pominięcie detekcji: potraktowanie całego obrazu jako jednej osoby.result = model(SAMPLE_IMAGE, cropped=True) # Albo przekazanie HRNet ramek z wcześniej uruchomionego detektora.result = model(SAMPLE_IMAGE, person_boxes=[[34, 12, 220, 400]]) # Albo połączenie z konkretnym detektorem LibreYOLO zamiast domyślnego# LibreYOLO9t.result = model(SAMPLE_IMAGE, person_detector="rfdetr")HRNet jest odgórnym estymatorem pozy. Wymaga ramki osoby przed uruchomieniem
głowicy pozy, dlatego każde wywołanie ustala takie ramki. Bez dodatkowej
konfiguracji przy pierwszym użyciu łączy się z detektorem LibreYOLO9t i zapisuje
ten wybór w logu. cropped=True pomija detekcję i traktuje cały obraz jako
jedną osobę. person_boxes przyjmuje ramki z wcześniej uruchomionego detektora.
person_detector przyjmuje "auto", "rfdetr", dowolny model detekcji
LibreYOLO albo zwykły obiekt wywoływalny. flip_test=True uruchamia model także
na poziomo odbitym przycięciu i uśrednia obie mapy cieplne, co stanowi własną
augmentację HRNet podczas testowania. Ogólne augment=True nie jest tutaj
zdefiniowane. Źródła z wieloma obrazami działają sekwencyjnie. Detektor HRNet i
zmienna liczba osób na obraz nie obsługują predykcji w złożonym batchu. Więcej
informacji o źródłach, streamingu i obsłudze wyników zawiera strona
predykcji.
Warianty
Dostępne są dwa rozmiary, w32 i w48. Oba przewidują standardowy zbiór
punktów kluczowych COCO-17 ze stałej rozdzielczości przycięcia osoby. w48 jest
szerszym backbone.
Źródłowy katalog modeli podaje dokładność pozy każdego rozmiaru z jego własnym detektorem osób, konfiguracją testu odbicia i oficjalnym protokołem ewaluacji COCO. Domyślne połączenie LibreYOLO używa innego detektora, dlatego walidacja tutaj mierzy tę kombinację, a nie kombinację źródłową. Odtworzenie wyników źródłowych wymaga tych samych ramek osób, wyników detektora i ustawienia odbicia co w oryginalnej ewaluacji.
Walidacja
val() uruchamia OKS-AP punktów kluczowych w stylu COCO i przyjmuje plik
data.yaml pozy YOLO albo plik JSON punktów kluczowych COCO z katalogiem
obrazów. Backend metryk domyślnie używa faster-coco-eval, a gdy nie jest on
zainstalowany, automatycznie przechodzi na pycocotools.
faster_coco_eval=False wymusza ścieżkę 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.yamlWalidacja wewnętrznie korzysta z własnego predict() HRNet, dlatego używa
detektora osób, z którym zbudowano lub wywołano model. Aby źródło pozostało
stałe między przebiegami, należy utworzyć model z jawnym person_detector=,
zamiast pozwalać każdemu wywołaniu ponownie ustalać wartość domyślną.
Eksport
| Zadanie | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pose | Pose to ONNX: obsługiwane | Pose to TorchScript: obsługiwane | Pose to ExecuTorch: brak obsługi | Pose to TensorRT: obsługiwane | Pose to OpenVINO: obsługiwane | Pose to Paddle: brak obsługi | Pose to MNN: brak obsługi | Pose to RKNN: brak obsługi | Pose to ncnn: brak obsługi | Pose to TFLite: brak obsługi | Pose to CoreML: brak obsługi | Pose to Core AI: brak obsługi |
Kontrakt eksportu HRNet obejmuje tylko ONNX, TorchScript, OpenVINO i TensorRT. Każdy inny format zgłasza błąd przed rozpoczęciem śledzenia. Każdy eksport jest wyłącznie głowicą map cieplnych o stałym obszarze, batchu 1 i precyzji FP32, przyjmującą przycięcie osoby i zwracającą surowe mapy cieplne. Geometria przycięcia przed nią oraz dekodowanie map cieplnych, odtwarzanie odbicia i tłumienie OKS za nią pozostają w Pythonie, dlatego pełny pipeline od obrazu do punktów kluczowych nadal wymaga LibreYOLO po drugiej stronie.
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 # Wyeksportowany graf zawiera wyłącznie głowicę map cieplnych o stałym obszarze.# Przyjmuje batch już przyciętych i znormalizowanych obrazów osób oraz zwraca# surowe mapy cieplne. Detekcja osób, geometria przycięcia, dekodowanie map cieplnych# i tłumienie OKS nie są częścią grafu. Uruchomienie poza LibreYOLO wymaga# samodzielnej implementacji tego etapu dekodowania.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]Checkpointy
Wszystkie opublikowane pliki wag dla tej rodziny.
| Plik | Wejście (px) | Licencja wag |
|---|---|---|
| Pose | ||
| LibreHRNetw32-pose.pt | mit | |
| LibreHRNetw48-pose.pt | mit | |
Każdy z powyższych plików jest obecnie dostępny w organizacji LibreYOLO i pobierany przy pierwszym użyciu.
Licencja
Sprawdź licencję w repozytorium konkretnych pobieranych wag na Hugging Face. Każdy checkpoint w organizacji LibreYOLO ma licencję, która nie zawsze jest taka sama w całej rodzinie. To repozytorium jest źródłem rozstrzygającym, a poniższe podsumowanie opisuje stan z chwili ostatniej weryfikacji tej strony.
To opis obowiązujących licencji, a nie porada prawna. Jeśli odpowiedź ma znaczenie komercyjne, przeczytaj licencje i zasięgnij własnej porady prawnej.
- Oryginalna praca
- HRNet, Microsoft
- Licencja projektu źródłowego
- MIT
- Kod źródłowy projektu
- github.com/leoxiaobin/deep-high-resolution-net.pytorch
- Kod LibreYOLO
- MIT
- Wagi
- MIT, ponownie opublikowane w huggingface.co/LibreYOLO
- Interpretacja
- 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.
Cytowanie
@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}
}Skopiowano z bloku cytowania autorów w github.com/leoxiaobin/deep-high-resolution-net.pytorch#citation.