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.

49 téléchargements
Taille
9.2 MB
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-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.mp4

API REST

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

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "yolov7-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
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é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

YOLOv7:

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

YOLOv7-tiny:

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

YOLOv7e6:

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

YOLOv7x:

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

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

Mode caméra USB

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

Remplacez yolov7 par yolov7_tiny, yolov7e6 ou yolov7x pour une autre variante.

Fichiers HEF

ModèleEntréeTailleRemarques
yolov7.hef640x640x328,106,752 (28.1 MB)paramètres 36.91M, ops 104.51G, mAP matériel 48.8, 63.6 FPS
yolov7_tiny.hef640x640x39,199,616 (9.2 MB)paramètres 6.22M, ops 13.74G, mAP matériel 36.3, 288 FPS
yolov7e6.hef1280x1280x373,072,640 (73.1 MB)paramètres 97.20M, ops 515.12G, mAP matériel 53.1, 16.4 FPS
yolov7x.hef640x640x356,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 :

VarianteEndpoint
YOLOv7POST /api/models/yolov7/predict
YOLOv7-tinyPOST /api/models/yolov7_tiny/predict
YOLOv7e6POST /api/models/yolov7e6/predict
YOLOv7xPOST /api/models/yolov7x/predict
bash
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) et nms_postprocess(<model>_nms_config.json, meta_arch=yolov5, engine=cpu) ; la configuration NMS utilise nms_scores_th 0.2, nms_iou_th 0.6 et max_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).
  • yolov7e6 utilise 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 /255 est 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 à 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_yolov7/, src/hailo10h_yolov7_tiny/, src/hailo10h_yolov7e6/, src/hailo10h_yolov7x/ dans le dépôt reComputer-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.