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.
Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.
Erste Schritte
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.mp4Modelldetails
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
| Element | Wert |
|---|---|
| Board | reComputer R Series mit Raspberry Pi CM5 |
| Beschleuniger | Hailo-10H über PCIe, verfügbar als /dev/hailo0 |
| Runtime | HailoRT 5.1.1 |
| Python im Container | 3.13, aarch64 |
Installieren Sie die Hailo-10H-Pakete auf dem Host und prüfen Sie Treiber und Gerät, bevor Sie den Container starten:
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot
# After reboot
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0Die erwartete HailoRT-Version für diese Images ist 5.1.1.
Ausführung mit dem Demo-Video
YOLOv10n:
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.mp4YOLOv10s:
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.mp4YOLOv10b:
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.mp4YOLOv10x:
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
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 0Ersetzen Sie yolov10n durch yolov10s, yolov10b oder yolov10x für eine andere Variante.
HEF-Dateien
| Modell | Größe | Hinweise |
|---|---|---|
yolov10n.hef | 5,230,592 (5.0 MB) | Parameter 2.3M, Ops 6.8G, mAP 38.5 (volle Präzision) |
yolov10s.hef | 10,182,656 (9.7 MB) | Parameter 7.2M, Ops 21.7G, mAP 45.85 (volle Präzision) |
yolov10b.hef | 19,619,840 (18.7 MB) | Parameter 20.15M, Ops 92.09G, mAP 52.0 (volle Präzision) |
yolov10x.hef | 26,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
POST http://<Board_IP>:8000/api/models/yolov10n/predictcurl -X POST "http://<Board_IP>:8000/api/models/yolov10n/predict" \
-F "file=@test.jpg"| Endpunkt | Methode | Zweck |
|---|---|---|
/ | GET | Web-Vorschau-Oberfläche |
/api/models/yolov10{n,s,b,x}/predict | POST | Detektionen (JSON) |
/api/video_feed | GET | MJPEG-Vorschaustream |
Implementierungshinweise
- Der Model Zoo
base/yolov10.yamlnutzthpp=trueunddevice_pre_post_layers.nms=truemitmeta_arch=yolov8, wendet Sigmoid auf die drei one2one-Klassenfaltungen an und dokumentiertinfo.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}/Convfür Boxen,/model.23/one2one_cv3.{0,1,2}/Convfü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) undpadding_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 inweb_detection.pyaufFalse, 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 RepositoryreComputer-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.