CV / YOLOv8

YOLOv8-seg

Segmentation d'instance YOLOv8n/s/m sur reComputer RK3588/RK3576 (RKNN) et sur reComputer R Series avec Hailo-8 ou Hailo-10H via HailoRT.

400 téléchargements
Taille
~7.2MB
Mémoire
1GB+
Précision
INT8

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 rk3588-yolov8n-seg \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-yolov8_seg:latest \
  python web_detection.py --model_path model/yolov8n_seg.rknn --video video/test.mp4

Détails du modèle

reComputer R Series (CM5 + Hailo-8)

YOLOv8-seg sur reComputer R Series (CM5 + Hailo-8)

YOLOv8n/s/m-seg s'exécutent sur Hailo-8 via HailoRT 4.23. Le HEF expose des têtes brutes (pas de NMS sur puce) : l'hôte décode les boîtes DFL, applique la sigmoïde et le NMS par classe, puis assemble les masques prototypes (32 coefficients × prototype 160×160×32, recadrés sur chaque boîte) pour les 80 classes COCO.

Informations sur le modèle

VarianteEntréeHEF empaquetéImage de conteneur
YOLOv8n-seg640×640×3 RGB5.3 MByolov8n_seg
YOLOv8s-seg640×640×3 RGB17.3 MByolov8s_seg
YOLOv8m-seg640×640×3 RGB32.9 MByolov8m_seg

Matériel et configuration de l'hôte

ÉlémentValeur
CartereComputer R Series avec Raspberry Pi CM5
AccélérateurHailo-8 via PCIe, exposé comme /dev/hailo0
RuntimeHailoRT 4.23.x (l'hôte et le conteneur doivent partager majeur.mineur)
Python dans le conteneur3.11, aarch64
bash
sudo apt update
sudo apt install hailort hailort-pcie-driver python3-hailort
sudo reboot

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

# Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
sudo systemctl enable docker
sudo systemctl start docker

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

Sélectionnez la commande correspondant à la variante du modèle.

YOLOv8n-seg

bash
sudo docker run --rm \
  --name cm5-hailo8-yolov8n-seg \
  --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/yolov8n_seg:latest \
  python web_detection.py --model_path model/yolov8n_seg.hef --video_path video/test.mp4

YOLOv8s-seg

bash
sudo docker run --rm \
  --name cm5-hailo8-yolov8s-seg \
  --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/yolov8s_seg:latest \
  python web_detection.py --model_path model/yolov8s_seg.hef --video_path video/test.mp4

YOLOv8m-seg

bash
sudo docker run --rm \
  --name cm5-hailo8-yolov8m-seg \
  --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/yolov8m_seg:latest \
  python web_detection.py --model_path model/yolov8m_seg.hef --video_path video/test.mp4

Ouvrez http://<Board_IP>:8000 pour voir l'aperçu web (masques d'instances superposés par classe + boîtes de détection).

Mode caméra USB

bash
sudo docker run --rm \
  --name cm5-hailo8-yolov8n-seg \
  --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/yolov8n_seg:latest \
  python web_detection.py --model_path model/yolov8n_seg.hef --camera_id 0

REST API

Chaque variante possède son propre endpoint :

VarianteEndpoint
YOLOv8n-segPOST /api/models/yolov8n_seg/predict
YOLOv8s-segPOST /api/models/yolov8s_seg/predict
YOLOv8m-segPOST /api/models/yolov8m_seg/predict

Exemple :

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

La réponse contient des entrées predictions avec les champs class, confidence et box (box est x1/y1/x2/y2 en pixels de l'image d'origine). Les masques d'instances sont rendus dans l'aperçu MJPEG ; /api/video_feed diffuse le flux annoté.

Notes d'implémentation

  • Le HEF expose 10 tenseurs bruts : par stride (32/16/8) une tête de boîte DFL à 64 canaux, une tête de classe à 80 canaux et une tête de coefficients de masque à 32 canaux, plus un prototype 160×160×32. La première inférence journalise le nom, la forme et la plage de valeurs de chaque tenseur.
  • Le décodage des boîtes utilise l'espérance softmax DFL (16 bins) autour du centre de la cellule ; une compilation qui supprime le DFL (tête à 4 canaux) est décodée directement.
  • Les têtes de classe peuvent déjà être activées par sigmoïde sur le device (script alls du Model Zoo) ; le module n'applique la sigmoïde que lorsque les valeurs sont des logits bruts.
  • Les prédictions one2many passent par un NMS par classe piloté par les curseurs de confiance et d'IoU ; les masques sont sigmoid(coeffs @ proto), sur-échantillonnés à la taille de l'entrée puis recadrés sur chaque boîte (seuil 0.5).
  • Le padding letterbox est de 114 (Model Zoo base/yolo.yaml) ; la normalisation moyenne 0 / écart-type 255 est compilée dans le HEF.

Notes de développement

VarianteSourceDockerfileConteneur
YOLOv8n-segsrc/rpi5_hailo8_yolov8n_seg/docker/hailo8/yolov8n_seg.dockerfileghcr.io/seeed-projects/recomputer-hailo8-cv/yolov8n_seg:latest
YOLOv8s-segsrc/rpi5_hailo8_yolov8s_seg/docker/hailo8/yolov8s_seg.dockerfileghcr.io/seeed-projects/recomputer-hailo8-cv/yolov8s_seg:latest
YOLOv8m-segsrc/rpi5_hailo8_yolov8m_seg/docker/hailo8/yolov8m_seg.dockerfileghcr.io/seeed-projects/recomputer-hailo8-cv/yolov8m_seg:latest
  • L'exécuteur est le wrapper InferVStreams de HailoRT 4.23 (Python 3.11 + la wheel cp311 embarquée) ; le libhailort.so natif provient de l'hôte.
  • HEFs : builds Hailo-8 de Hailo Model Zoo v2.19.0.
  • Les valeurs de mAP référencées (segmentation d'instances COCO) sont les chiffres de pleine précision du Model Zoo, et non des mesures effectuées sur cette carte.