CV / YOLOv10

YOLOv10

reComputer R Series (CM5 + Hailo-10H)

YOLOv10n/s/b/x Objekterkennungsmodelle für reComputer RK3588/RK3576 (RKNN) und reComputer R Series mit Hailo-8 oder Hailo-10H.

91 Downloads
Größe
7.36 MB
Speicher
4GB+
Präzision
RKNN / Hailo HEF

Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.

Erste Schritte

Bereitstellen
sudo docker run --rm \
  --name cm5-hailo10h-yolov10n \
  --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/yolov10n:latest \
  python web_detection.py --model_path model/yolov10n.hef --video_path video/test.mp4

Modelldetails

reComputer R Series (CM5 + Hailo-10H)

YOLOv10 on reComputer R Series (CM5 + Hailo-10H)

YOLOv10n / YOLOv10s / YOLOv10b / YOLOv10x führen COCO-Objekterkennung (80 Klassen) auf Hailo-10H über HailoRT aus. Das kompilierte HEF führt NMS mit dem one2one-Kopf on-chip aus (HPP), sodass der Host das Post-NMS-Ergebnis parst und selbst weder Boxen dekodiert noch NMS ausführt.

Diese Seite richtet sich an reComputer R Series (CM5 + Hailo-10H) mit einem PCIe-Hailo-10H-Beschleuniger.

Hardware und Host-Setup

ElementWert
BoardreComputer R Series mit Raspberry Pi CM5
BeschleunigerHailo-10H über PCIe, verfügbar als /dev/hailo0
RuntimeHailoRT 5.1.1
Python im Container3.13, aarch64

Installieren Sie die Hailo-10H-Pakete auf dem Host und prüfen Sie Treiber und Gerät, bevor Sie den Container starten:

bash
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot

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

Die erwartete HailoRT-Version für diese Images ist 5.1.1.

Ausführung mit dem Demo-Video

YOLOv10n:

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

YOLOv10s:

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

YOLOv10b:

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

YOLOv10x:

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

Öffnen Sie http://<Board_IP>:8000 für die Webvorschau.

USB-Kameramodus

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

Ersetzen Sie yolov10n durch yolov10s, yolov10b oder yolov10x für eine andere Variante.

HEF-Dateien

ModellGrößeHinweise
yolov10n.hef5,230,592 (5.0 MB)Parameter 2.3M, Ops 6.8G, mAP 38.5 (volle Präzision)
yolov10s.hef10,182,656 (9.7 MB)Parameter 7.2M, Ops 21.7G, mAP 45.85 (volle Präzision)
yolov10b.hef19,619,840 (18.7 MB)Parameter 20.15M, Ops 92.09G, mAP 52.0 (volle Präzision)
yolov10x.hef26,251,264 (25.0 MB)Parameter 31.72M, Ops 160.56G, mAP 53.7 (volle Präzision)

Alle vier Varianten sind Hailo-10H-Builds aus Hailo Model Zoo v5.4.0 derselben THU-MIG-YOLOv10-Familie.

Source: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v5.4.0/hailo10h/yolov10n.hef (yolov10s.hef, yolov10b.hef, yolov10x.hef in the same directory).

REST API

text
POST http://<Board_IP>:8000/api/models/yolov10n/predict
bash
curl -X POST "http://<Board_IP>:8000/api/models/yolov10n/predict" \
  -F "file=@test.jpg"
EndpunktMethodeZweck
/GETWeb-Vorschau-Oberfläche
/api/models/yolov10{n,s,b,x}/predictPOSTDetektionen (JSON)
/api/video_feedGETMJPEG-Vorschaustream

Implementierungshinweise

  • Der Model Zoo base/yolov10.yaml nutzt hpp=true und device_pre_post_layers.nms=true mit meta_arch=yolov8, wendet Sigmoid auf die drei one2one-Klassenfaltungen an und dokumentiert info.output_shape: 80x5x100 (80 Klassen, höchstens 100 Boxen pro Klasse).
  • Die Parser-Knoten sind der one2one-Kopf (/model.23/one2one_cv2.{0,1,2}/Conv für Boxen, /model.23/one2one_cv3.{0,1,2}/Conv für Klassen): eine Vorhersage pro Zelle, keine Anker. Es wird nichts dekodiert und auf dem Host läuft kein NMS.
  • HailoRT 5.1.1 liefert den rohen NMS-by-class-Puffer als flaches 1-D-FLOAT32-Array in kompaktem Layout: pro Klasse ein ganzzahliger Detektionszähler, gefolgt von genau dieser Anzahl an [ymin, xmin, ymax, xmax, score]-Zeilen, normalisiert auf [0, 1]. Der Parser stoppt beim ersten unplausiblen Klassen-Header, sodass der im schlimmsten Fall vorhandene Padding-Tail nicht als Daten gelesen wird; ragged NMS-by-score- und dichte (1,C,5,D) / (1,C,D,5)-Layouts werden ebenfalls weiterhin unterstützt.
  • Der IOU-Regler hat keine Wirkung (NMS läuft on-chip); der Konfidenzregler filtert die geparsten Detektionen.
  • Das HEF enthält normalize_in_net (mean 0 / std 255) und padding_color=114: die Anwendung letterboxt mit Grau (114) und übergibt rohe uint8-RGB-Pixel — keine manuelle Normalisierung.
  • Klassen-IDs 0..79 indizieren direkt die standardmäßige COCO-Klassenliste.
  • Die Diagnose der ersten Inferenz ist in der Produktion deaktiviert (_OUTPUT_LOGGED = True); setzen Sie sie in web_detection.py auf False, um bei der Validierung eines neuen HEF den Typ, die Form, den Wertebereich und die Zeilen pro Klasse der Rohausgabe auszugeben.

Entwicklungshinweise

  • Quellmodule: src/hailo10h_yolov10{n,s,b,x}/ im Repository reComputer-Hailo10H-CV
  • Container: ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10{n,s,b,x}:latest
  • Auf Hailo-8 (R20-Demo) sind nur n/b/x veröffentlicht; die Hailo-10H-Builds decken alle vier Varianten ab.
  • Modelllizenz: AGPL-3.0 (Upstream THU-MIG/yolov10).

Eingaben und Ausgaben

Eingabe: Bild, Video oder USB-Kameraframe. Ausgabe: Erkennungsboxen, Klassen, Konfidenzen und annotierte MJPEG Vorschau.