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.
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 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.mp4Dé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
| Variante | Entrée | HEF empaqueté | Image de conteneur |
|---|---|---|---|
| YOLOv8n-seg | 640×640×3 RGB | 5.3 MB | yolov8n_seg |
| YOLOv8s-seg | 640×640×3 RGB | 17.3 MB | yolov8s_seg |
| YOLOv8m-seg | 640×640×3 RGB | 32.9 MB | yolov8m_seg |
Matériel et configuration de l'hôte
| Élément | Valeur |
|---|---|
| Carte | reComputer R Series avec Raspberry Pi CM5 |
| Accélérateur | Hailo-8 via PCIe, exposé comme /dev/hailo0 |
| Runtime | HailoRT 4.23.x (l'hôte et le conteneur doivent partager majeur.mineur) |
| Python dans le conteneur | 3.11, aarch64 |
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 dockerExécuter avec la vidéo de démonstration
Sélectionnez la commande correspondant à la variante du modèle.
YOLOv8n-seg
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.mp4YOLOv8s-seg
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.mp4YOLOv8m-seg
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.mp4Ouvrez 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
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 0REST API
Chaque variante possède son propre endpoint :
| Variante | Endpoint |
|---|---|
| YOLOv8n-seg | POST /api/models/yolov8n_seg/predict |
| YOLOv8s-seg | POST /api/models/yolov8s_seg/predict |
| YOLOv8m-seg | POST /api/models/yolov8m_seg/predict |
Exemple :
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
| Variante | Source | Dockerfile | Conteneur |
|---|---|---|---|
| YOLOv8n-seg | src/rpi5_hailo8_yolov8n_seg/ | docker/hailo8/yolov8n_seg.dockerfile | ghcr.io/seeed-projects/recomputer-hailo8-cv/yolov8n_seg:latest |
| YOLOv8s-seg | src/rpi5_hailo8_yolov8s_seg/ | docker/hailo8/yolov8s_seg.dockerfile | ghcr.io/seeed-projects/recomputer-hailo8-cv/yolov8s_seg:latest |
| YOLOv8m-seg | src/rpi5_hailo8_yolov8m_seg/ | docker/hailo8/yolov8m_seg.dockerfile | ghcr.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.sonatif 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.