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.
Kies het apparaat dat je gebruikt. De installatiehandleiding en documentatie worden dienovereenkomstig bijgewerkt.
Aan de slag
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.mp4REST API
Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "yolov7-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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
| Onderdeel | Waarde |
|---|---|
| Board | reComputer R Series met Raspberry Pi CM5 |
| Versneller | Hailo-10H via PCIe, beschikbaar als /dev/hailo0 |
| Runtime | HailoRT 5.1.1 |
| Python in de container | 3.13, aarch64 |
Installeer de Hailo-10H-pakketten op de host en controleer of stuurprogramma en apparaat gereed zijn voordat u de container start:
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot
# After reboot
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0De verwachte HailoRT-versie voor deze images is 5.1.1.
Uitvoeren met de demo-video
YOLOv7:
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.mp4YOLOv7-tiny:
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.mp4YOLOv7e6:
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.mp4YOLOv7x:
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.mp4Open http://<Board_IP>:8000 voor de webpreview.
USB-cameramodus
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 0Vervang yolov7 door yolov7_tiny, yolov7e6 of yolov7x voor een andere variant.
HEF-bestanden
| Model | Invoer | Grootte | Opmerkingen |
|---|---|---|---|
yolov7.hef | 640x640x3 | 28,106,752 (28.1 MB) | parameters 36.91M, ops 104.51G, hardware mAP 48.8, 63.6 FPS |
yolov7_tiny.hef | 640x640x3 | 9,199,616 (9.2 MB) | parameters 6.22M, ops 13.74G, hardware mAP 36.3, 288 FPS |
yolov7e6.hef | 1280x1280x3 | 73,072,640 (73.1 MB) | parameters 97.20M, ops 515.12G, hardware mAP 53.1, 16.4 FPS |
yolov7x.hef | 640x640x3 | 56,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:
| Variant | Endpoint |
|---|---|
| YOLOv7 | POST /api/models/yolov7/predict |
| YOLOv7-tiny | POST /api/models/yolov7_tiny/predict |
| YOLOv7e6 | POST /api/models/yolov7e6/predict |
| YOLOv7x | POST /api/models/yolov7x/predict |
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)plusnms_postprocess(<model>_nms_config.json, meta_arch=yolov5, engine=cpu); de NMS-config gebruiktnms_scores_th 0.2,nms_iou_th 0.6enmax_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. yolov7e6gebruikt 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 opFalseinweb_detection.pyom 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 dereComputer-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.