CV / YOLOv5

YOLOv5

reComputer R Series (CM5 + Hailo-10H)

Modèles de détection d'objets YOLOv5n/s/m pour reComputer RK3588/RK3576 (RKNN) et reComputer R Series avec Hailo-8 ou Hailo-10H.

541 téléchargements
Taille
~10.7MB
Mémoire
2GB+
Précision
INT8 / Hailo HEF

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

Détails du modèle

reComputer R Series (CM5 + Hailo-10H)

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

YOLOv5s et YOLOv5m effectuent la détection d'objets COCO (80 classes) sur Hailo-10H via HailoRT. Le NMS et le sigmoid s'exécutent sur la puce (Hailo HPP) : l'hôte ne fait qu'analyser le tenseur post-NMS.

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

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

# After reboot
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0

La version HailoRT attendue pour ces images est 5.1.1.

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

YOLOv5s :

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

YOLOv5m :

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

Ouvrez http://<Board_IP>:8000 pour afficher l'aperçu web.

Mode caméra USB

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

Remplacez yolov5s par yolov5m pour la variante moyenne.

Fichiers HEF

HEFTailleRemarques
yolov5s.hef13,029,376 (12.4 MB)paramètres 7.46M, ops 17.44G
yolov5m.hef19,812,352 (18.9 MB)paramètres 21.78M, ops 52.17G

YOLOv5s est la variante compacte, YOLOv5m la variante moyenne ; les deux proviennent du build Hailo-10H de Hailo Model Zoo v5.4.0.

Source: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v5.4.0/hailo10h/yolov5s.hef (yolov5m.hef in the same directory).

REST API

text
POST http://<Board_IP>:8000/api/models/yolov5s/predict
bash
curl -X POST "http://<Board_IP>:8000/api/models/yolov5s/predict" \
  -F "file=@test.jpg"
EndpointMéthodeRôle
/GETInterface d'aperçu web
/api/models/yolov5s/predictPOSTDétections (JSON)
/api/video_feedGETFlux d'aperçu MJPEG

Notes d'implémentation

  • Le HEF exécute le NMS et le sigmoid sur la puce (zoo base/yolo.yaml : nms: true, hpp: true) ; nms_thresh n'est accepté que pour la compatibilité d'API.
  • Les lignes post-NMS sont [ymin, xmin, ymax, xmax, score], normalisées sur [0,1] de l'entrée letterboxée 640x640 ; l'application met à l'échelle en pixels puis annule le letterbox.
  • Le HEF intègre normalize_in_net (mean 0 / std 255, soit /255) et padding_color=114 : l'application applique un letterbox gris (114) et transmet des pixels uint8 RGB bruts.
  • Les IDs de classe 0..79 indexent directement la liste COCO standard (l'évaluation du Model Zoo utilise labels_offset=1).
  • Le Model Zoo documente la forme post-NMS comme 80x5x80 ; l'analyseur accepte le format réel à l'exécution et le journalise une fois ([YOLOv5] raw output type=..., shape=...).
  • Valeurs par défaut : confiance 0.25 ; le curseur IOU est sans effet car le NMS est embarqué.

Notes de développement

  • Modules source : src/hailo10h_yolov5s/, src/hailo10h_yolov5m/
  • Dockerfiles : docker/hailo10h/yolov5s.dockerfile, docker/hailo10h/yolov5m.dockerfile
  • Conteneurs : ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov5s:latest, .../yolov5m:latest
  • Les deux modules utilisent l'API InferModel de HailoRT 5.1.1 et des HEF dédiés à Hailo-10H.
  • Les tests unitaires s'exécutent sans appareil : python -m unittest discover -s tests -v.