CV / ViTPose
ViTPose-Small-BN
reComputer R Series (CM5 + Hailo-10H)
Estimation de pose 2D d’une personne avec ViTPose-Small-BN sur reComputer R Series avec Hailo-8.
Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.
Pour commencer
sudo docker run --rm \
--name cm5-hailo10h-vit-pose-bn \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/vit_pose_small_bn:latest \
python web_detection.py --model_path model/vit_pose_small_bn.hef --video_path video/test.mp4API REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
curl -X POST "http://<Board_IP>:8000/api/models/vit_pose_small_bn/predict" \
-F "file=@test.jpg"import requests
response = requests.post(
"http://<Board_IP>:8000/api/models/vit_pose_small_bn/predict",
files={"file": open("test.jpg", "rb")},
timeout=30,
)
print(response.json())Détails du modèle
reComputer R Series (CM5 + Hailo-10H)ViTPose-Small-BN sur reComputer R Series (CM5 + Hailo-10H)
ViTPose-Small-BN estime la pose 2D d'une seule personne : le HEF produit une carte de chaleur 64x48x17, l'application prend l'argmax par canal, met les coordonnées à l'échelle de l'entrée 256x192 puis les ramène à l'image avant de dessiner les 17 keypoints COCO.
Cette page cible reComputer R Series (CM5 + Hailo-10H) avec un accélérateur PCIe Hailo-10H.
Informations du modèle
| Propriété | Valeur |
|---|---|
| Architecture | ViTPose-Small-BN (backbone Vision Transformer) |
| Tâche | Estimation de pose d'une personne (17 keypoints COCO) |
| Entrée | 256x192x3 RGB (letterbox, normalisation compilée dans le HEF) |
| Sortie | Carte de chaleur 64x48x17 (décodage argmax, pas de NMS embarqué) |
| Paramètres | 24.32M |
| Opérations | 17.17G |
| HEF | Hailo Model Zoo v5.4.0, Hailo-10H (23,314,432 bytes) |
Matériel et configuration de l'hôte
| Élément | Valeur |
|---|---|
| Carte | reComputer R Series avec Raspberry Pi CM5 |
| Accélérateur | Hailo-10H via PCIe, exposé comme /dev/hailo0 |
| Runtime | HailoRT 5.1.1 |
| Python dans le conteneur | 3.13, aarch64 |
Installez les paquets Hailo-10H sur l'hôte et vérifiez que le pilote et le périphérique sont prêts avant de démarrer le conteneur :
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot
# Après redémarrage
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0Exécution avec la vidéo de démonstration
sudo docker run --rm \
--name cm5-hailo10h-vit-pose-small-bn \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/vit_pose_small_bn:latest \
python web_detection.py --model_path model/vit_pose_small_bn.hef --video_path video/test.mp4Ouvrez http://<Board_IP>:8000 pour afficher l'aperçu : le squelette COCO est dessiné sur la personne.
Mode caméra USB
sudo docker run --rm \
--name cm5-hailo10h-vit-pose-small-bn \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
--device /dev/video0:/dev/video0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/vit_pose_small_bn:latest \
python web_detection.py --model_path model/vit_pose_small_bn.hef --camera_id 0REST API
POST http://<Board_IP>:8000/api/models/vit_pose_small_bn/predictcurl -X POST "http://<Board_IP>:8000/api/models/vit_pose_small_bn/predict" \
-F "file=@test.jpg"| Endpoint | Méthode | Rôle |
|---|---|---|
/ | GET | Interface d'aperçu web |
/api/models/vit_pose_small_bn/predict | POST | 17 keypoints COCO (JSON) |
/api/video_feed | GET | Flux d'aperçu MJPEG |
/api/config | GET / POST | Lire ou modifier les seuils d'exécution |
/api/video/upload | POST | Téléverser une vidéo source |
/api/video/analyze | POST | Lancer l'analyse vidéo hors ligne |
/api/video/status | GET | Lire la progression de l'analyse |
/api/video/download/{filename} | GET | Télécharger le résultat annoté |
Les keypoints sous le seuil (0,30) sont omis du squelette.
Notes d'implémentation
- Modèle mono-personne : le réseau suppose la personne centrée dans le recadrage ; les scènes multi-personnes nécessitent un détecteur pour recadrer chaque personne.
- Le prétraitement applique un letterbox 256x192 avec remplissage noir, convertit BGR en RGB et transmet des pixels uint8 bruts ; la normalisation ImageNet (moyenne
[123.675, 116.28, 103.53], écart-type[58.395, 57.12, 57.375]en RGB) est compilée dans le HEF. - Le post-traitement prend l'argmax par canal de la carte de chaleur pour obtenir
(x, y)en 64x48, le met à l'échelle de l'entrée 256x192 puis le ramène à l'image via le letterbox. Pas de NMS embarqué ni de raffinement subpixel DARK. - La première inférence journalise une fois la forme de sortie (
[ViTPose] raw output shape=...) pour confirmer le format sur le matériel.
Notes de développement
- Module source :
src/hailo10h_vit_pose_small_bn/ - Dockerfile :
docker/hailo10h/vit_pose_small_bn.dockerfile - Conteneur :
ghcr.io/seeed-projects/recomputer-hailo10h-cv/vit_pose_small_bn:latest - Le module utilise l'API InferModel de HailoRT 5.1.1 et un HEF dédié à Hailo-10H.
- Les tests unitaires s'exécutent sans appareil :
python -m unittest discover -s tests -v.
Entrées et sorties
Entrée : image, vidéo ou image de caméra USB. Sortie : 17 points COCO (x, y, score) avec squelette.