CV / NanoDet

NanoDet-RepVGG-a12

reComputer R Series (CM5 + Hailo-8)

Détection d'objets COCO 80 classes avec nanodet_repvgg_a12 (basé sur YOLOX, NMS intégré) sur reComputer R Series avec Hailo-8 ou Hailo-10H.

45 téléchargements
Taille
7.5 MB
Mémoire
4GB+
Précision
Hailo HEF / HailoRT

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-hailo8-nanodet-repvgg-a12 \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  --device /dev/hailo0:/dev/hailo0 \
  -v /usr/lib/libhailort.so.4.23.0:/usr/lib/libhailort.so.4.23.0:ro \
  -v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
  ghcr.io/seeed-projects/recomputer-hailo8-cv/nanodet_repvgg_a12:latest \
  python web_detection.py --model_path model/nanodet_repvgg_a12.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 -X POST "http://<Board_IP>:8000/api/models/nanodet_repvgg_a12/predict" \
  -F "file=@test.jpg"
Python
import requests

response = requests.post(
    "http://<Board_IP>:8000/api/models/nanodet_repvgg_a12/predict",
    files={"file": open("test.jpg", "rb")},
    timeout=30,
)
print(response.json())

Détails du modèle

reComputer R Series (CM5 + Hailo-8)

NanoDet-RepVGG-a12 sur reComputer R Series (CM5 + Hailo-8)

nanodet_repvgg_a12 détecte les objets des 80 classes COCO sur Hailo-8 via HailoRT. Malgré le nom « nanodet », cette variante utilise l'architecture YOLOX (base/yolox.yaml), avec une entrée 640x640. La NMS s'exécute sur puce (Hailo HPP, meta_arch=yolox) ; l'hôte analyse uniquement le tenseur après NMS.

Cette page concerne reComputer R Series (CM5 + Hailo-8) équipé d'un accélérateur Hailo-8 PCIe.

Informations du modèle

PropriétéValeur
ArchitectureBasé sur YOLOX (base/yolox.yaml) + dorsale RepVGG-A12
TâcheDétection d’objets
Entrée640x640x3 BGR (input_conversion bgr_to_rgb + normalize_in_net sans transformation)
SortieTenseur NMS sur puce, forme après NMS 80x5x100
Classes80 (COCO, indices à partir de 0 ; labels_offset=1 pour l’évaluation uniquement)
Paramètres5.13M
Opérations28.23G
Post-traitementNMS sur puce (HPP) ; l’hôte analyse le tenseur après NMS
HEFHailo Model Zoo v2.19.0, Hailo-8

La précision est une valeur de référence de Hailo Model Zoo, pas une mesure effectuée sur CM5.

Configuration du matériel et de l’hôte

ÉlémentValeur
CartereComputer R Series avec Raspberry Pi CM5
AccélérateurHailo-8 via PCIe, exposé sous /dev/hailo0
Environnement d’exécutionHailoRT 4.23.x
Python dans le conteneur3.11, aarch64

Installez les paquets Hailo-8 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 hailort hailort-pcie-driver python3-hailort
sudo reboot

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

La version HailoRT attendue pour cette image est 4.23.x.

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

bash
sudo docker run --rm \
  --name cm5-hailo8-nanodet-repvgg-a12 \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  --device /dev/hailo0:/dev/hailo0 \
  -v /usr/lib/libhailort.so.4.23.0:/usr/lib/libhailort.so.4.23.0:ro \
  -v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
  ghcr.io/seeed-projects/recomputer-hailo8-cv/nanodet_repvgg_a12:latest \
  python web_detection.py --model_path model/nanodet_repvgg_a12.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-hailo8-nanodet-repvgg-a12 \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  --device /dev/hailo0:/dev/hailo0 \
  --device /dev/video0:/dev/video0 \
  -v /usr/lib/libhailort.so.4.23.0:/usr/lib/libhailort.so.4.23.0:ro \
  -v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
  ghcr.io/seeed-projects/recomputer-hailo8-cv/nanodet_repvgg_a12:latest \
  python web_detection.py --model_path model/nanodet_repvgg_a12.hef --camera_id 0

API REST

Point d'accès de prédiction :

text
POST http://<Board_IP>:8000/api/models/nanodet_repvgg_a12/predict

Exemple de requête avec une image :

bash
curl -X POST "http://<Board_IP>:8000/api/models/nanodet_repvgg_a12/predict" \
  -F "file=@test.jpg"
Point d’accèsMéthodeFonction
/GETInterface d’aperçu web
/api/models/nanodet_repvgg_a12/predictPOSTDétections (JSON)
/api/video_feedGETFlux d’aperçu MJPEG

Notes d’implémentation

  • Même post-traitement NMS sur puce (HPP) que nanodet_repvgg (analyse HPP de 80 classes), mais cette variante utilise base/yolox.yaml : meta_arch=yolox, entrée 640x640, padding_color=114 (gris, convention YOLOX).
  • Le HEF exécute la NMS sur puce (device_pre_post_layers: nms=true, hpp=true) ; l'application analyse uniquement le tenseur après NMS (selon le tf_postproc_nms officiel) et ignore donc nms_thresh (compatibilité de l'API uniquement).
  • Les lignes après NMS sont [ymin, xmin, ymax, xmax, score], normalisées dans [0,1] par rapport à l'entrée 640x640 avec letterbox ; l'application convertit en pixels et annule le letterbox.
  • normalize_in_net ne transforme pas les données (mean=0/std=1) + input_conversion(bgr_to_rgb) sur puce : l'application applique un letterbox gris (114) et fournit des pixels BGR uint8 bruts, sans normalisation manuelle ni cvtColor.
  • HailoRT renvoie le vstream NMS sous forme de listes de longueur variable par classe (NMS-by-score) ; l'analyseur gère aussi les formats object/dense. La première inférence journalise le type et la forme bruts pour vérification sur le matériel.
  • Correspondance des classes : cls_id (0..79) → directement la liste standard des 80 classes COCO (labels_offset=1 sert uniquement à l'évaluation ; si les étiquettes semblent décalées, les redéduire du journal de la première inférence).
  • Valeurs par défaut : confiance 0.25, IOU 0.45 (sans effet car la NMS est sur puce). L'évaluation Model Zoo utilise 0.01 / 0.65 ; abaissez le curseur de confiance pour voir davantage de résultats.

Notes de développement

  • Module source : src/rpi5_hailo8_nanodet_repvgg_a12/
  • Dockerfile : docker/hailo8/nanodet_repvgg_a12.dockerfile
  • Conteneur : ghcr.io/seeed-projects/recomputer-hailo8-cv/nanodet_repvgg_a12:latest
  • Le module utilise l'API VStreams de HailoRT 4.23 et un HEF propre à Hailo-8.
  • Famille : nanodet (variantes nanodet_repvgg / nanodet_repvgg_a12 / nanodet_repvgg_a1_640) ; il s'agit de la compilation nanodet_repvgg_a12.

Entrées et sorties

Input: image, video, or USB camera frame. Output: COCO 80-class detection boxes with confidences, plus an annotated MJPEG preview.