CV / YOLOv7
YOLOv7
reComputer R Series (CM5 + Hailo-10H)
Détection d’objets COCO avec YOLOv7 accélérée par RKNN sur reComputer RK3576 et RK3588, et via HailoRT sur reComputer R Series avec Hailo-10H.
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-yolov7_tiny \
--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/yolov7_tiny:latest \
python web_detection.py --model_path model/yolov7_tiny.hef --video_path video/test.mp4API REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "yolov7-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'import requests
resp = requests.post(
"http://localhost:8080/v1/chat/completions",
json={"model": "yolov7-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())Détails du modèle
reComputer R Series (CM5 + Hailo-10H)YOLOv7 on reComputer R Series (CM5 + Hailo-10H)
YOLOv7 / YOLOv7-tiny / YOLOv7e6 / YOLOv7x effectuent la détection d'objets COCO (80 classes) sur Hailo-10H via HailoRT. Le HEF compilé exécute le NMS sur puce (HPP, meta_arch=yolov5, au plus 80 boîtes par classe), de sorte que l'application ne fait qu'analyser le tampon compact NMS-by-class renvoyé par HailoRT 5.1.1.
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é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
# After reboot
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0La version HailoRT attendue pour ces images est 5.1.1.
Exécution avec la vidéo de démonstration
YOLOv7:
sudo docker run --rm \
--name cm5-hailo10h-yolov7 \
--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/yolov7:latest \
python web_detection.py --model_path model/yolov7.hef --video_path video/test.mp4YOLOv7-tiny:
sudo docker run --rm \
--name cm5-hailo10h-yolov7_tiny \
--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/yolov7_tiny:latest \
python web_detection.py --model_path model/yolov7_tiny.hef --video_path video/test.mp4YOLOv7e6:
sudo docker run --rm \
--name cm5-hailo10h-yolov7e6 \
--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/yolov7e6:latest \
python web_detection.py --model_path model/yolov7e6.hef --video_path video/test.mp4YOLOv7x:
sudo docker run --rm \
--name cm5-hailo10h-yolov7x \
--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/yolov7x:latest \
python web_detection.py --model_path model/yolov7x.hef --video_path video/test.mp4Ouvrez http://<Board_IP>:8000 pour afficher l'aperçu web.
Mode caméra USB
sudo docker run --rm \
--name cm5-hailo10h-yolov7 \
--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/yolov7:latest \
python web_detection.py --model_path model/yolov7.hef --camera_id 0Remplacez yolov7 par yolov7_tiny, yolov7e6 ou yolov7x pour une autre variante.
Fichiers HEF
| Modèle | Entrée | Taille | Remarques |
|---|---|---|---|
yolov7.hef | 640x640x3 | 28,106,752 (28.1 MB) | paramètres 36.91M, ops 104.51G, mAP matériel 48.8, 63.6 FPS |
yolov7_tiny.hef | 640x640x3 | 9,199,616 (9.2 MB) | paramètres 6.22M, ops 13.74G, mAP matériel 36.3, 288 FPS |
yolov7e6.hef | 1280x1280x3 | 73,072,640 (73.1 MB) | paramètres 97.20M, ops 515.12G, mAP matériel 53.1, 16.4 FPS |
yolov7x.hef | 640x640x3 | 56,406,016 (56.4 MB) | paramètres 71.46M, ops 189.68G, mAP matériel 51.0, 34.7 FPS |
Les quatre variantes sont des builds Hailo-10H de Hailo Model Zoo v5.4.0. Le mAP et les FPS sont les chiffres Hailo-10H publiés par le Model Zoo.
Source: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v5.4.0/hailo10h/yolov7.hef (yolov7_tiny.hef, yolov7e6.hef, yolov7x.hef in the same directory).
REST API
Chaque variante possède son propre endpoint :
| Variante | Endpoint |
|---|---|
| YOLOv7 | POST /api/models/yolov7/predict |
| YOLOv7-tiny | POST /api/models/yolov7_tiny/predict |
| YOLOv7e6 | POST /api/models/yolov7e6/predict |
| YOLOv7x | POST /api/models/yolov7x/predict |
curl -X POST "http://<Board_IP>:8000/api/models/yolov7/predict" \
-F "file=@bus.jpg" -F "conf=0.25"La réponse contient des entrées predictions avec les champs class, confidence et box.
Notes d'implémentation
- La recette ALLS combine
change_output_activation(sigmoid)etnms_postprocess(<model>_nms_config.json, meta_arch=yolov5, engine=cpu); la configuration NMS utilisenms_scores_th 0.2,nms_iou_th 0.6etmax_proposals_per_class 80, de sorte que l'hôte n'exécute ni décodage de boîtes ni NMS. - La sortie HPP sur HailoRT 5.1.1 est le tampon plat compact NMS-by-class (par classe : un compteur de détections suivi d'exactement autant de lignes
[ymin, xmin, ymax, xmax, score], toutes normalisées sur [0, 1]). Les lecteurs à pas fixe désalignent chaque classe après la première ; l'analyseur s'arrête au premier en-tête invraisemblable et conserve également la prise en charge des dispositions ragged NMS-by-score et denses(1,C,5,D)/(1,C,D,5). yolov7e6utilise une entrée 1280x1280x3 ; les trois autres utilisent 640x640x3. L'application lit la taille depuis le HEF au démarrage.- Le prétraitement applique un letterbox vers la taille d'entrée du HEF avec un remplissage gris (114), convertit le BGR en RGB et transmet des valeurs uint8 brutes ; la normalisation
/255est compilée dans le HEF. - 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 àFalsedansweb_detection.pypour 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_yolov7/,src/hailo10h_yolov7_tiny/,src/hailo10h_yolov7e6/,src/hailo10h_yolov7x/dans le dépôtreComputer-Hailo10H-CV - Conteneurs :
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov7{,_tiny,e6,x}:latest - Le Hailo Model Zoo publie également des builds Hailo-8 des quatre variantes (v2.19.0 / v2.20.0) ; seuls les modules Hailo-10H sont publiés ici pour l'instant.
- Licence du modèle : GPL-3.0 (amont WongKinYiu/yolov7).
Entrées et sorties
Input: image, video frame, or camera frame. Output: COCO classes, confidence scores, and boxes.