CV / YOLOv7

YOLOv7

reComputer R Series (CM5 + Hailo-10H)

COCO-Objekterkennung mit YOLOv7, beschleunigt mit RKNN auf reComputer RK3576 und RK3588 sowie über HailoRT auf der reComputer R Series mit Hailo-10H.

49 Downloads
Größe
9.2 MB
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-yolov7_tiny \
  --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/yolov7_tiny:latest \
  python web_detection.py --model_path model/yolov7_tiny.hef --video_path video/test.mp4

REST API

Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "yolov7-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "yolov7-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

Modelldetails

reComputer R Series (CM5 + Hailo-10H)

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

YOLOv7 / YOLOv7-tiny / YOLOv7e6 / YOLOv7x führen COCO-Objekterkennung (80 Klassen) auf Hailo-10H über HailoRT aus. Das kompilierte HEF führt das NMS on-chip aus (HPP, meta_arch=yolov5, höchstens 80 Boxen pro Klasse), sodass die Anwendung nur den kompakten NMS-by-class-Puffer auswertet, den HailoRT 5.1.1 zurückgibt.

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

YOLOv7:

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

YOLOv7-tiny:

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

YOLOv7e6:

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

YOLOv7x:

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

Ersetzen Sie yolov7 durch yolov7_tiny, yolov7e6 oder yolov7x für eine andere Variante.

HEF-Dateien

ModellEingabeGrößeHinweise
yolov7.hef640x640x328,106,752 (28.1 MB)Parameter 36.91M, Ops 104.51G, Hardware-mAP 48.8, 63.6 FPS
yolov7_tiny.hef640x640x39,199,616 (9.2 MB)Parameter 6.22M, Ops 13.74G, Hardware-mAP 36.3, 288 FPS
yolov7e6.hef1280x1280x373,072,640 (73.1 MB)Parameter 97.20M, Ops 515.12G, Hardware-mAP 53.1, 16.4 FPS
yolov7x.hef640x640x356,406,016 (56.4 MB)Parameter 71.46M, Ops 189.68G, Hardware-mAP 51.0, 34.7 FPS

Alle vier Varianten sind Hailo-10H-Builds aus Hailo Model Zoo v5.4.0. mAP und FPS sind die vom Model Zoo veröffentlichten Hailo-10H-Werte.

Source: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v5.4.0/hailo10h/yolov7.hef (yolov7_tiny.hef, yolov7e6.hef, yolov7x.hef in the same directory).

REST API

Jede Variante hat einen eigenen Endpunkt:

VarianteEndpunkt
YOLOv7POST /api/models/yolov7/predict
YOLOv7-tinyPOST /api/models/yolov7_tiny/predict
YOLOv7e6POST /api/models/yolov7e6/predict
YOLOv7xPOST /api/models/yolov7x/predict
bash
curl -X POST "http://<Board_IP>:8000/api/models/yolov7/predict" \
  -F "file=@bus.jpg" -F "conf=0.25"

Die Antwort enthält predictions-Einträge mit den Feldern class, confidence und box.

Implementierungshinweise

  • Das ALLS-Rezept besteht aus change_output_activation(sigmoid) plus nms_postprocess(<model>_nms_config.json, meta_arch=yolov5, engine=cpu); die NMS-Konfiguration verwendet nms_scores_th 0.2, nms_iou_th 0.6 und max_proposals_per_class 80, sodass der Host weder Box-Dekodierung noch NMS ausführt.
  • Die HPP-Ausgabe auf HailoRT 5.1.1 ist der flache, kompakte NMS-by-class-Puffer (pro Klasse: Detektionsanzahl, gefolgt von entsprechend vielen [ymin, xmin, ymax, xmax, score]-Zeilen, alle auf [0, 1] normalisiert). Leser mit festen Schrittweiten richten jede Klasse nach der ersten falsch aus; der Parser stoppt beim ersten unplausiblen Klassenkopf und behält außerdem Handler für die ragged NMS-by-score- und dichten (1,C,5,D) / (1,C,D,5)-Layouts.
  • yolov7e6 verwendet eine 1280x1280x3-Eingabe; die anderen drei verwenden 640x640x3. Die Anwendung liest die Größe beim Start aus dem HEF.
  • Die Vorverarbeitung letterboxt auf die HEF-Eingabegröße mit grauer (114) Auffüllung, konvertiert BGR nach RGB und übergibt rohe uint8-Daten; die /255-Normalisierung ist in das HEF kompiliert.
  • 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 beim Validieren eines neuen HEF den Typ, die Form, den Wertebereich und die Zeilen pro Klasse der Rohausgabe auszugeben.

Entwicklungshinweise

  • Quellmodule: src/hailo10h_yolov7/, src/hailo10h_yolov7_tiny/, src/hailo10h_yolov7e6/, src/hailo10h_yolov7x/ im Repository reComputer-Hailo10H-CV
  • Container: ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov7{,_tiny,e6,x}:latest
  • Das Hailo Model Zoo veröffentlicht außerdem Hailo-8-Builds aller vier Varianten (v2.19.0 / v2.20.0); hier werden bisher nur die Hailo-10H-Module veröffentlicht.
  • Modelllizenz: GPL-3.0 (Upstream WongKinYiu/yolov7).

Eingaben und Ausgaben

Input: image, video frame, or camera frame. Output: COCO classes, confidence scores, and boxes.