CV / SSD
SSD MobileNet V2
reComputer R Series (CM5 + Hailo-8)
Détection d’objets des 80 classes COCO avec SSD MobileNet V2 (NMS sur la puce) sur reComputer R Series avec Hailo-8.
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-ssd-mobilenet-v2 \
--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/ssd_mobilenet_v2:latest \
python web_detection.py --model_path model/ssd_mobilenet_v2.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/ssd_mobilenet_v2/predict" \
-F "file=@test.jpg"import requests
response = requests.post(
"http://<Board_IP>:8000/api/models/ssd_mobilenet_v2/predict",
files={"file": open("test.jpg", "rb")},
timeout=30,
)
print(response.json())Détails du modèle
SSD MobileNet V2 sur reComputer R Series (CM5 + Hailo-8)
SSD MobileNet V2 est le détecteur TensorFlow SSD classique avec dorsale MobileNet V2. Il détecte les 80 classes COCO sur Hailo-8. Les entrées/sorties sont identiques à V1, mais le modèle est plus léger et légèrement plus précis. La NMS s'exécute sur puce (Hailo HPP, meta_arch=ssd) ; 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 | SSD + MobileNet V2 |
| Tâche | Détection d’objets |
| Entrée | 300x300x3 RGB (normalize_in_net mean=127.5/std=127.5) |
| Sortie | Tenseur NMS sur puce, forme après NMS 90x8x1 |
| Classes | 90 emplacements (ID COCO 1..90 via labels_offset=1 ; 10 inutilisés) |
| Paramètres | 4.46M |
| Opérations | 1.52G |
| Post-traitement | NMS sur puce (HPP) ; l’hôte analyse le tenseur après NMS |
| HEF | Hailo Model Zoo v2.19.0, Hailo-8 |
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 |
sudo apt update
sudo apt install hailort hailort-pcie-driver python3-hailort
sudo reboot
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0Exécution avec la vidéo de démonstration
sudo docker run --rm \
--name cm5-hailo8-ssd-mobilenet-v2 \
--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/ssd_mobilenet_v2:latest \
python web_detection.py --model_path model/ssd_mobilenet_v2.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-ssd-mobilenet-v2 \
--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/ssd_mobilenet_v2:latest \
python web_detection.py --model_path model/ssd_mobilenet_v2.hef --camera_id 0API REST
POST http://<Board_IP>:8000/api/models/ssd_mobilenet_v2/predictcurl -X POST "http://<Board_IP>:8000/api/models/ssd_mobilenet_v2/predict" \
-F "file=@test.jpg"| Point d’accès | Méthode | Fonction |
|---|---|---|
/ | GET | Interface d’aperçu web |
/api/models/ssd_mobilenet_v2/predict | POST | Détections (JSON) |
/api/video_feed | GET | Flux d’aperçu MJPEG |
Notes d’implémentation
- Même contrat d'entrées/sorties et même post-traitement que V1 ; seule la dorsale diffère (MobileNet V2 → plus léger, légèrement plus précis).
- Le HEF exécute la NMS sur puce ; l'application analyse uniquement le tenseur après NMS (
tf_postproc_nms) et ignore doncnms_thresh(compatibilité de l'API uniquement). normalize_in_netmean=127.5/std=127.5 (normalisation SSD classique) ; l'application fournit des pixels RGB uint8 bruts après letterbox, sans normalisation manuelle.- HailoRT renvoie le vstream NMS sous forme de listes de longueur variable par classe (NMS-by-score) ; l'analyseur gère les formats ragged/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..89) → ID de catégorie COCOcls_id+1(labels_offset=1) ; 10 ID COCO inutilisés sont « N/A » et ne sont pas dessinés. - Valeurs par défaut : confiance 0.25, IOU 0.45 (sans effet car la NMS est sur puce). L'évaluation utilise 0.3 / 0.6.
Notes de développement
- Module source :
src/rpi5_hailo8_ssd_mobilenet_v2/ - Dockerfile :
docker/hailo8/ssd_mobilenet_v2.dockerfile - Conteneur :
ghcr.io/seeed-projects/recomputer-hailo8-cv/ssd_mobilenet_v2:latest - Famille : ssd (variantes ssd_mobilenet_v1 / ssd_mobilenet_v2) ; il s'agit de la compilation V2.
Entrées et sorties
Input: image, video, or USB camera frame. Output: COCO 80-class detection boxes with confidences, plus an annotated MJPEG preview.