CV / CenterNet

CenterNet (resnet_v1_18)

reComputer R Series (CM5 + Hailo-10H)

COCO 80-class object detection with CenterNet (ResNet-18) on reComputer R Series with Hailo-8.

40 téléchargements
Taille
12.4 MB
Mémoire
4GB+
Précision
Hailo HEF / HailoRT 4.23.x

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-centernet-v18 \
  --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/centernet_resnet_v1_18_postprocess:latest \
  python web_detection.py --model_path model/centernet_resnet_v1_18_postprocess.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/centernet_resnet_v1_18_postprocess/predict" \
  -F "file=@test.jpg"
Python
import requests

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

Détails du modèle

reComputer R Series (CM5 + Hailo-10H)

CenterNet (resnet_v1_18) sur reComputer R Series (CM5 + Hailo-10H)

CenterNet avec squelette ResNet-18 effectue la détection d'objets sur 80 classes COCO sur Hailo-10H via HailoRT, en utilisant la variante de post-traitement max_finder intégrée à la puce.

Cette page cible la reComputer R Series (CM5 + Hailo-10H) avec un accélérateur Hailo-10H PCIe.

Informations sur le modèle

PropriétéValeur
ArchitectureCenterNet (squelette ResNet-18)
TâcheDétection d'objets
Entrée512x512x3 RGB (normalisation compilée dans le HEF)
Sortie3 têtes : wh (128x128x2), reg (128x128x2), carte thermique creuse (128x128x80)
Classes80 (COCO)
Paramètres14.22M
Opérations31.21G
mAP matériel25.0 (COCO, référence Hailo Model Zoo)
HEFHailo Model Zoo v5.4.0, Hailo-10H

La valeur de précision provient du tableau de détection d'objets Hailo Model Zoo pour Hailo-10H. Ce n'est pas une mesure effectuée sur CM5.

Configuration matérielle et de l'hôte

ÉlémentValeur
CartereComputer R Series avec Raspberry Pi CM5
AccélérateurHailo-10H sur PCIe, exposé en /dev/hailo0
RuntimeHailoRT 5.1.1
Python dans le conteneur3.13, aarch64

Installez les paquets correspondants 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

# Après redémarrage
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0

Ne mélangez pas les pilotes, bibliothèques ou wheels Python HailoRT 4.23.x (Hailo-8) dans ce conteneur Hailo-10H.

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

bash
sudo docker run --rm \
  --name cm5-hailo10h-centernet-v18 \
  --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/centernet_resnet_v1_18_postprocess:latest \
  python web_detection.py --model_path model/centernet_resnet_v1_18_postprocess.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-centernet-v18 \
  --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/centernet_resnet_v1_18_postprocess:latest \
  python web_detection.py --model_path model/centernet_resnet_v1_18_postprocess.hef --camera_id 0

API REST

Point de terminaison de prédiction :

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

Exemple de requête image :

bash
curl -X POST "http://<Board_IP>:8000/api/models/centernet_resnet_v1_18_postprocess/predict" \
  -F "file=@test.jpg"

| Point de terminaison | Méthode | Objectif | |---|---| | / | GET | Interface d'aperçu web | | /api/models/centernet_resnet_v1_18_postprocess/predict | POST | Détections (JSON) | | /api/video_feed | GET | Flux d'aperçu MJPEG |

Notes d'implémentation

  • Le HEF a été compilé avec normalize_in_net=true (moyenne/écart-type ImageNet, RGB) ; l'application applique donc un letterbox vers 512x512, convertit BGR en RGB et fournit des pixels uint8 bruts — sans normalisation manuelle.
  • La tête de carte thermique est déjà creuse : le max_finder intégré et le seuil de score (0.2) ne conservent que les maxima locaux au-dessus du seuil. Le décodeur prend ces pics, lit wh/reg à chaque pic et reconstruit les boîtes avec la formule officielle de Hailo Model Zoo (stride 4, carte de caractéristiques 128x128 → entrée 512x512), puis annule le letterbox vers l'image d'origine.
  • Les deux têtes à 2 canaux (wh, reg) sont mappées par nom de vstream lorsque le numéro de convolution est exposé (conv3 → wh, conv5 → reg), sinon par ordre de sortie du réseau. La première inférence affiche le nom et la forme de chaque vstream ainsi que le mappage résolu, pour vérification sur le matériel.
  • L'exécuteur utilise l'API create_infer_model de HailoRT 5.1.1 avec un modèle configuré persistant et des tampons de sortie FLOAT32 enregistrés, de sorte que HailoRT déquantifie les sorties au lieu de lire les valeurs fixes brutes de la puce.

Notes de développement

  • Module source : src/hailo10h_centernet_resnet_v1_18_postprocess/
  • Dockerfile : docker/hailo10h/centernet_resnet_v1_18_postprocess.dockerfile
  • Conteneur : ghcr.io/seeed-projects/recomputer-hailo10h-cv/centernet_resnet_v1_18_postprocess:latest
  • Le module utilise l'API InferModel de HailoRT 5.1.1 et un HEF spécifique Hailo-10H.

Entrées et sorties

Entrée : image, vidéo ou image provenant d’une caméra USB. Sortie : boîtes de détection pour les 80 classes COCO avec scores de confiance, ainsi qu’un aperçu MJPEG annoté.