CV / YOLOv8

YOLOv8-pose

reComputer R Series (CM5 + Hailo-10H)

Modèle YOLOv8 nano Pose léger pour un déploiement rapide de détection de points clés humains sur l'edge.

802 téléchargements
Taille
10.10 MB
Mémoire
4GB+
Précision
INT8

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-yolov8s-pose \
  --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/yolov8s_pose:latest \
  python web_detection.py --model_path model/yolov8s_pose.hef --video_path video/test.mp4

Détails du modèle

reComputer R Series (CM5 + Hailo-10H)

YOLOv8 Pose sur reComputer R Series (CM5 + Hailo-10H)

YOLOv8 Pose estime les keypoints humains sur Hailo-10H via HailoRT. Le modèle détecte les personnes, renvoie une boîte par personne avec 17 keypoints COCO, et fournit un aperçu navigateur, une API image unique et l'analyse vidéo hors ligne.

Cette page cible reComputer R Series (CM5 + Hailo-10H) avec un accélérateur PCIe Hailo-10H.

Informations du modèle

PropriétéValeur
ArchitectureYOLOv8 Pose
TâcheEstimation de pose (boîtes de personne + 17 keypoints COCO)
Entrée640x640x3 RGB (letterbox, normalisation compilée dans le HEF)
SortieTêtes de pose brutes : boîte, score et 17 keypoints COCO par personne (NMS côté hôte)
Classes1 (person)
HEF (par défaut)yolov8s_pose.hef, 13 799 424 octets
HEF (plus grand)yolov8m_pose.hef, 29 335 552 octets
Source du HEFHailo Model Zoo v5.4.0, Hailo-10H

Hailo Model Zoo publie les tailles s et m pour Hailo-10H. Chaque taille dispose de sa propre image (yolov8s_pose et yolov8m_pose) : l'image identifie donc le modèle.

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-yolov8s-pose \
  --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/yolov8s_pose:latest \
  python web_detection.py --model_path model/yolov8s_pose.hef --video_path video/test.mp4

Ouvrez http://<Board_IP>:8000 pour afficher l'aperçu : boîtes de personne avec le squelette COCO superposé.

Modèle plus grand

bash
sudo docker run --rm \
  --name cm5-hailo10h-yolov8m-pose \
  --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/yolov8m_pose:latest \
  python web_detection.py --model_path model/yolov8m_pose.hef --video_path video/test.mp4

Mode caméra USB

bash
sudo docker run --rm \
  --name cm5-hailo10h-yolov8s-pose \
  --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/yolov8s_pose:latest \
  python web_detection.py --model_path model/yolov8s_pose.hef --camera_id 0

REST API

text
POST http://<Board_IP>:8000/api/models/yolov8_pose/predict
bash
curl -X POST "http://<Board_IP>:8000/api/models/yolov8_pose/predict" \
  -F "file=@test.jpg"
json
{
  "success": true,
  "source": "uploaded image",
  "predictions": [
    {
      "class": "person",
      "confidence": 0.91,
      "box": {"x1": 120, "y1": 80, "x2": 360, "y2": 520},
      "keypoints": [{"x": 180, "y": 120, "score": 0.87}]
    }
  ],
  "image": {"width": 1280, "height": 720}
}
EndpointMéthodeRôle
/GETInterface d'aperçu web
/api/models/yolov8_pose/predictPOSTBoîtes de personne et keypoints (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 de la réponse.

Notes d'implémentation

  • Le HEF expose les têtes de pose brutes, sans NMS embarqué : neuf tenseurs sur trois échelles, chacune avec bbox DFL (64 canaux), score (1) et keypoints (51).
  • Le décodage suit la tête de pose ultralytics / Model Zoo : sigmoid sur les scores, softmax DFL pour les distances de boîte, keypoints en (2 * raw + grid) * stride au format (x, y, score) ; le NMS est exécuté côté hôte.
  • Les valeurs déjà dans [0, 1] sont conservées comme probabilités, sinon sigmoid est appliqué : le décodeur couvre donc les deux formes compilées.

Notes de développement

  • Module source : src/hailo10h_yolov8s_pose/, src/hailo10h_yolov8m_pose/
  • Dockerfile : docker/hailo10h/yolov8s_pose.dockerfile, docker/hailo10h/yolov8m_pose.dockerfile
  • Conteneur : ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8s_pose:latest, ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8m_pose:latest
  • Le module utilise l'API InferModel de HailoRT 5.1.1 et un HEF dédié à Hailo-10H.
  • Les tests unitaires (HailoRT simulé + régression du post-traitement de pose) s'exécutent sans appareil : python -m unittest discover -s tests -v.