CV / YOLOv7

YOLOv7

reComputer R Series (CM5 + Hailo-10H)

COCO-objectdetectie met YOLOv7, versneld door RKNN op reComputer RK3576 en RK3588, en via HailoRT op reComputer R Series met Hailo-10H.

49 downloads
Grootte
9.2 MB
Precisie
RKNN / Hailo HEF

Kies het apparaat dat je gebruikt. De installatiehandleiding en documentatie worden dienovereenkomstig bijgewerkt.

Aan de slag

Implementeren
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

Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.

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())

Modeldetails

reComputer R Series (CM5 + Hailo-10H)

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

YOLOv7 / YOLOv7-tiny / YOLOv7e6 / YOLOv7x voeren COCO-objectdetectie met 80 klassen uit op Hailo-10H via HailoRT. De gecompileerde HEF voert NMS on-chip uit (HPP, meta_arch=yolov5, maximaal 80 boxen per klasse), zodat de applicatie alleen de compacte NMS-by-class-buffer parseert die HailoRT 5.1.1 retourneert.

Deze pagina is gericht op reComputer R Series (CM5 + Hailo-10H) met een PCIe Hailo-10H-versneller.

Hardware en hostinstellingen

OnderdeelWaarde
BoardreComputer R Series met Raspberry Pi CM5
VersnellerHailo-10H via PCIe, beschikbaar als /dev/hailo0
RuntimeHailoRT 5.1.1
Python in de container3.13, aarch64

Installeer de Hailo-10H-pakketten op de host en controleer of stuurprogramma en apparaat gereed zijn voordat u de container start:

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

De verwachte HailoRT-versie voor deze images is 5.1.1.

Uitvoeren met de 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

Open http://<Board_IP>:8000 voor de webpreview.

USB-cameramodus

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

Vervang yolov7 door yolov7_tiny, yolov7e6 of yolov7x voor een andere variant.

HEF-bestanden

ModelInvoerGrootteOpmerkingen
yolov7.hef640x640x328,106,752 (28.1 MB)parameters 36.91M, ops 104.51G, hardware mAP 48.8, 63.6 FPS
yolov7_tiny.hef640x640x39,199,616 (9.2 MB)parameters 6.22M, ops 13.74G, hardware mAP 36.3, 288 FPS
yolov7e6.hef1280x1280x373,072,640 (73.1 MB)parameters 97.20M, ops 515.12G, hardware mAP 53.1, 16.4 FPS
yolov7x.hef640x640x356,406,016 (56.4 MB)parameters 71.46M, ops 189.68G, hardware mAP 51.0, 34.7 FPS

Alle vier varianten zijn Hailo-10H-builds uit Hailo Model Zoo v5.4.0. mAP en FPS zijn de door de Model Zoo gepubliceerde Hailo-10H-cijfers.

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

Elke variant heeft een eigen endpoint:

VariantEndpoint
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"

Het antwoord bevat predictions-items met de velden class, confidence en box.

Implementatienotities

  • Het ALLS-recept is change_output_activation(sigmoid) plus nms_postprocess(<model>_nms_config.json, meta_arch=yolov5, engine=cpu); de NMS-config gebruikt nms_scores_th 0.2, nms_iou_th 0.6 en max_proposals_per_class 80, zodat de host geen boxdecodering en geen NMS uitvoert.
  • De HPP-uitvoer op HailoRT 5.1.1 is de platte compacte NMS-by-class-buffer (per klasse: het aantal detecties gevolgd door dat aantal [ymin, xmin, ymax, xmax, score]-rijen, alle genormaliseerd naar [0, 1]). Bij lezers met een vaste stride staat elke klasse na de eerste verkeerd uitgelijnd; de parser stopt bij de eerste onwaarschijnlijke header en behoudt ook handlers voor de ragged NMS-by-score- en de dichte (1,C,5,D) / (1,C,D,5)-indelingen.
  • yolov7e6 gebruikt een invoer van 1280x1280x3; de andere drie gebruiken 640x640x3. De applicatie leest de grootte bij het opstarten uit de HEF.
  • De voorverwerking letterboxt naar de HEF-invoergrootte met grijze padding (114), converteert BGR naar RGB en voert ruwe uint8 in; de /255-normalisatie is in de HEF gecompileerd.
  • Klasse-ID's 0..79 indexeren direct de standaard COCO-klassenlijst.
  • De eerste-inferentiediagnostiek is in productie uitgeschakeld (_OUTPUT_LOGGED = True); zet deze op False in web_detection.py om het ruwe uitvoertype, de vorm, het waardenbereik en de rijen per klasse te dumpen bij het valideren van een nieuwe HEF.

Ontwikkelnotities

  • Bronmodules: src/hailo10h_yolov7/, src/hailo10h_yolov7_tiny/, src/hailo10h_yolov7e6/, src/hailo10h_yolov7x/ in de reComputer-Hailo10H-CV-repository
  • Containers: ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov7{,_tiny,e6,x}:latest
  • De Hailo Model Zoo publiceert ook Hailo-8-builds van alle vier varianten (v2.19.0 / v2.20.0); hier worden vooralsnog alleen de Hailo-10H-modules gepubliceerd.
  • Modellicentie: GPL-3.0 (upstream WongKinYiu/yolov7).

Invoer en uitvoer

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