CV / CenterNet

CenterNet (resnet_v1_18)

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

16 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-hailo8-centernet \
  --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/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

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

CenterNet avec squelette ResNet-18 effectue la détection d'objets sur 80 classes COCO sur Hailo-8 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-8) avec un accélérateur Hailo-8 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 v2.19.0, Hailo-8

La valeur de précision provient du tableau de détection d'objets Hailo Model Zoo pour Hailo-8. 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-8 sur PCIe, exposé en /dev/hailo0
RuntimeHailoRT 4.23.x
Python dans le conteneur3.11, 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

# Les deux candidats doivent être en 4.23.x avant l'installation.
apt-cache policy hailort hailort-pcie-driver

sudo apt install hailort=4.23.0 hailort-pcie-driver=4.23.0
sudo reboot

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

La version HailoRT attendue pour cette image est 4.23.x. Ne continuez pas si apt-cache policy sélectionne HailoRT 5.x ; ce runtime cible Hailo-10H et n'est pas compatible avec ce conteneur Hailo-8.

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

bash
sudo docker run --rm \
  --name cm5-hailo8-centernet \
  --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/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-hailo8-centernet \
  --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/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.

Notes de développement

  • Module source : src/rpi5_hailo8_centernet_resnet_v1_18_postprocess/
  • Dockerfile : docker/hailo8/centernet_resnet_v1_18_postprocess.dockerfile
  • Conteneur : ghcr.io/seeed-projects/recomputer-hailo8-cv/centernet_resnet_v1_18_postprocess:latest
  • Le module utilise l'API VStreams de HailoRT 4.23 et un HEF spécifique Hailo-8.

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é.