CV / NanoDet
NanoDet-RepVGG-a1-640
reComputer R Series (CM5 + Hailo-8)
Détection d'objets COCO 80 classes avec nanodet_repvgg_a1_640 (NMS intégré) sur reComputer R Series avec Hailo-8 ou 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-hailo8-nanodet-repvgg-a1-640 \
--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_a1_640:latest \
python web_detection.py --model_path model/nanodet_repvgg_a1_640.hef --video_path video/test.mp4API REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
curl -X POST "http://<Board_IP>:8000/api/models/nanodet_repvgg_a1_640/predict" \
-F "file=@test.jpg"import requests
response = requests.post(
"http://<Board_IP>:8000/api/models/nanodet_repvgg_a1_640/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-a1-640 sur reComputer R Series (CM5 + Hailo-8)
nanodet_repvgg_a1_640 détecte les objets des 80 classes COCO sur Hailo-8 via HailoRT. Il utilise la même base (base/nanodet.yaml) que nanodet_repvgg, mais une dorsale RepVGG-A1 plus grande et une entrée 640x640 pour une meilleure précision. La NMS s'exécute sur puce (Hailo HPP, meta_arch=yolov8) ; 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 |
|---|---|
| Architecture | NanoDet + RepVGG-A1 (base/nanodet.yaml) |
| Tâche | Détection d’objets |
| Entrée | 640x640x3 BGR (input_conversion bgr_to_rgb + normalize_in_net) |
| Sortie | Tenseur NMS sur puce, forme après NMS 80x5x100 |
| Classes | 80 (COCO, indices à partir de 0 via meta_arch=yolov8) |
| Paramètres | 10.79M |
| Opérations | 42.8G |
| Post-traitement | NMS sur puce (HPP) ; l’hôte analyse le tenseur après NMS |
| HEF | Hailo 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ément | Valeur |
|---|---|
| Carte | reComputer R Series avec Raspberry Pi CM5 |
| Accélérateur | Hailo-8 via PCIe, exposé sous /dev/hailo0 |
| Environnement d’exécution | HailoRT 4.23.x |
| Python dans le conteneur | 3.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 :
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/hailo0La version HailoRT attendue pour cette image est 4.23.x.
Exécution avec la vidéo de démonstration
sudo docker run --rm \
--name cm5-hailo8-nanodet-repvgg-a1-640 \
--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_a1_640:latest \
python web_detection.py --model_path model/nanodet_repvgg_a1_640.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-hailo8-nanodet-repvgg-a1-640 \
--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_a1_640:latest \
python web_detection.py --model_path model/nanodet_repvgg_a1_640.hef --camera_id 0API REST
Point d'accès de prédiction :
POST http://<Board_IP>:8000/api/models/nanodet_repvgg_a1_640/predictExemple de requête avec une image :
curl -X POST "http://<Board_IP>:8000/api/models/nanodet_repvgg_a1_640/predict" \
-F "file=@test.jpg"| Point d’accès | Méthode | Fonction |
|---|---|---|
/ | GET | Interface d’aperçu web |
/api/models/nanodet_repvgg_a1_640/predict | POST | Détections (JSON) |
/api/video_feed | GET | Flux d’aperçu MJPEG |
Notes d’implémentation
- Même base (base/nanodet.yaml) et post-traitement NMS sur puce (HPP) que nanodet_repvgg ; seules la dorsale (RepVGG-A1) et la taille d'entrée (640x640) diffèrent.
- Le HEF exécute la NMS sur puce (
device_pre_post_layers: nms=true, hpp=true,meta_arch=yolov8) ; l'application analyse uniquement le tenseur après NMS et ignore doncnms_thresh(conservé seulement pour la compatibilité de l'API). - 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+input_conversion(bgr_to_rgb)sur puce : l'application applique un letterbox noir (0) 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. - Valeurs par défaut : confiance 0.25, IOU 0.45 (sans effet car la NMS est sur puce). L'évaluation Model Zoo utilise 0.05 / 0.6 ; abaissez le curseur de confiance pour voir davantage de résultats.
Notes de développement
- Module source :
src/rpi5_hailo8_nanodet_repvgg_a1_640/ - Dockerfile :
docker/hailo8/nanodet_repvgg_a1_640.dockerfile - Conteneur :
ghcr.io/seeed-projects/recomputer-hailo8-cv/nanodet_repvgg_a1_640: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_a1_640.
Entrées et sorties
Input: image, video, or USB camera frame. Output: COCO 80-class detection boxes with confidences, plus an annotated MJPEG preview.