CV / YOLOv10

YOLOv10

reComputer R Series (CM5 + Hailo-10H)

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

91 téléchargements
Taille
7.36 MB
Mémoire
4GB+
Précision
RKNN / 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-yolov10n \
  --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/yolov10n:latest \
  python web_detection.py --model_path model/yolov10n.hef --video_path video/test.mp4

Détails du modèle

reComputer R Series (CM5 + Hailo-10H)

YOLOv10 on reComputer R Series (CM5 + Hailo-10H)

YOLOv10n / YOLOv10s / YOLOv10b / YOLOv10x effectuent la détection d'objets COCO (80 classes) sur Hailo-10H via HailoRT. Le HEF compilé exécute le NMS sur puce (HPP) avec la tête one2one : l'hôte analyse le résultat post-NMS sans jamais décoder les boîtes ni lancer le NMS lui-même.

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

YOLOv10n:

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

YOLOv10s:

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

YOLOv10b:

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

YOLOv10x:

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

Remplacez yolov10n par yolov10s, yolov10b ou yolov10x pour une autre variante.

Fichiers HEF

ModèleTailleRemarques
yolov10n.hef5,230,592 (5.0 MB)paramètres 2.3M, ops 6.8G, mAP 38.5 (pleine précision)
yolov10s.hef10,182,656 (9.7 MB)paramètres 7.2M, ops 21.7G, mAP 45.85 (pleine précision)
yolov10b.hef19,619,840 (18.7 MB)paramètres 20.15M, ops 92.09G, mAP 52.0 (pleine précision)
yolov10x.hef26,251,264 (25.0 MB)paramètres 31.72M, ops 160.56G, mAP 53.7 (pleine précision)

Les quatre variantes sont des builds Hailo-10H de Hailo Model Zoo v5.4.0 issus de la même famille THU-MIG YOLOv10.

Source: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v5.4.0/hailo10h/yolov10n.hef (yolov10s.hef, yolov10b.hef, yolov10x.hef in the same directory).

REST API

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

Notes d'implémentation

  • Le Model Zoo base/yolov10.yaml utilise hpp=true et device_pre_post_layers.nms=true avec meta_arch=yolov8, applique le sigmoid sur les trois convolutions de classes one2one et documente info.output_shape: 80x5x100 (80 classes, au plus 100 boîtes par classe).
  • Les nœuds de l'analyseur sont la tête one2one (/model.23/one2one_cv2.{0,1,2}/Conv pour la boîte, /model.23/one2one_cv3.{0,1,2}/Conv pour la classe) : une prédiction par cellule de grille, sans ancres. Rien n'est décodé et aucun NMS n'est exécuté sur l'hôte.
  • HailoRT 5.1.1 renvoie le tampon NMS-by-class brut sous forme de tableau FLOAT32 1-D plat en disposition compacte : par classe un compteur de détections à valeur entière suivi d'exactement autant de lignes [ymin, xmin, ymax, xmax, score], normalisées sur [0, 1]. L'analyseur s'arrête au premier en-tête de classe invraisemblable, donc la queue de remplissage du pire cas n'est pas lue comme des données ; les dispositions ragged NMS-by-score et denses (1,C,5,D) / (1,C,D,5) restent également prises en charge.
  • Le curseur IOU est sans effet (le NMS est sur puce) ; le curseur de confiance filtre les détections analysées.
  • Le HEF intègre normalize_in_net (mean 0 / std 255) et padding_color=114 : l'application applique un letterbox gris (114) et transmet des pixels uint8 RGB bruts — aucune normalisation manuelle.
  • Les IDs de classe 0..79 indexent directement la liste COCO standard.
  • Les diagnostics de première inférence sont désactivés en production (_OUTPUT_LOGGED = True) ; passez-le à False dans web_detection.py pour afficher le type, la forme, la plage de valeurs et les lignes par classe de la sortie brute lors de la validation d'un nouveau HEF.

Notes de développement

  • Modules source : src/hailo10h_yolov10{n,s,b,x}/ dans le dépôt reComputer-Hailo10H-CV
  • Conteneurs : ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10{n,s,b,x}:latest
  • Sur Hailo-8 (démonstration R20), seuls n/b/x sont publiés ; les builds Hailo-10H couvrent les quatre variantes.
  • Licence du modèle : AGPL-3.0 (amont THU-MIG/yolov10).

Entrées et sorties

Entrée : image, vidéo ou flux caméra USB. Sortie : boîtes de détection, classes, confiances et aperçu MJPEG annoté.