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.

100 téléchargements
Taille
31 MB
Mémoire
4GB+
Précision
Hailo HEF / HailoRT 4.23.x (Hailo-8) / 5.1.1 (Hailo-10H)

Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.

Pour commencer

Déployer
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.mp4

API REST

Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.

Curl
curl -X POST "http://<Board_IP>:8000/api/models/vit_pose_small_bn/predict" \
  -F "file=@test.jpg"
Python
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
ArchitectureViTPose-Small-BN (backbone Vision Transformer)
TâcheEstimation de pose d'une personne (17 keypoints COCO)
Entrée256x192x3 RGB (letterbox, normalisation compilée dans le HEF)
SortieCarte de chaleur 64x48x17 (décodage argmax, pas de NMS embarqué)
Paramètres24.32M
Opérations17.17G
HEFHailo Model Zoo v5.4.0, Hailo-10H (23,314,432 bytes)

Matériel et configuration de l'hôte

ÉlémentValeur
CartereComputer R Series avec Raspberry Pi CM5
AccélérateurHailo-10H via PCIe, exposé comme /dev/hailo0
RuntimeHailoRT 5.1.1
Python dans le conteneur3.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 :

bash
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/hailo0

Exécution avec la vidéo de démonstration

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

Ouvrez http://<Board_IP>:8000 pour afficher l'aperçu : le squelette COCO est dessiné sur la personne.

Mode caméra USB

bash
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 0

REST API

text
POST http://<Board_IP>:8000/api/models/vit_pose_small_bn/predict
bash
curl -X POST "http://<Board_IP>:8000/api/models/vit_pose_small_bn/predict" \
  -F "file=@test.jpg"
EndpointMéthodeRôle
/GETInterface d'aperçu web
/api/models/vit_pose_small_bn/predictPOST17 keypoints COCO (JSON)
/api/video_feedGETFlux d'aperçu MJPEG
/api/configGET / POSTLire ou modifier les seuils d'exécution
/api/video/uploadPOSTTéléverser une vidéo source
/api/video/analyzePOSTLancer l'analyse vidéo hors ligne
/api/video/statusGETLire la progression de l'analyse
/api/video/download/{filename}GETTé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.