CV / YOLOv7
YOLOv7
reComputer R Series (CM5 + Hailo-10H)
Detección de objetos COCO con YOLOv7 acelerada por RKNN en reComputer RK3576 y RK3588, y también mediante HailoRT en reComputer R Series con Hailo-10H.
Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.
Primeros pasos
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.mp4API REST
Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.
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())Detalles del modelo
reComputer R Series (CM5 + Hailo-10H)YOLOv7 on reComputer R Series (CM5 + Hailo-10H)
YOLOv7 / YOLOv7-tiny / YOLOv7e6 / YOLOv7x realizan detección de objetos COCO de 80 clases en Hailo-10H mediante HailoRT. El HEF compilado ejecuta el NMS en chip (HPP, meta_arch=yolov5, como máximo 80 cajas por clase), por lo que la aplicación solo analiza el búfer compacto NMS-by-class que devuelve HailoRT 5.1.1.
Esta página está dirigida a reComputer R Series (CM5 + Hailo-10H) con un acelerador PCIe Hailo-10H.
Hardware y configuración del host
| Elemento | Valor |
|---|---|
| Placa | reComputer R Series con Raspberry Pi CM5 |
| Acelerador | Hailo-10H por PCIe, expuesto como /dev/hailo0 |
| Runtime | HailoRT 5.1.1 |
| Python en el contenedor | 3.13, aarch64 |
Instala los paquetes de Hailo-10H en el host y confirma que el driver y el dispositivo están listos antes de iniciar el contenedor:
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot
# After reboot
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0La versión esperada de HailoRT para estas imágenes es 5.1.1.
Ejecución con el vídeo de demostración
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.mp4Abre http://<Board_IP>:8000 para ver la vista previa web.
Modo cámara USB
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 0Sustituye yolov7 por yolov7_tiny, yolov7e6 o yolov7x para usar otra variante.
Archivos HEF
| Modelo | Entrada | Tamaño | Notas |
|---|---|---|---|
yolov7.hef | 640x640x3 | 28,106,752 (28.1 MB) | parámetros 36.91M, ops 104.51G, mAP de hardware 48.8, 63.6 FPS |
yolov7_tiny.hef | 640x640x3 | 9,199,616 (9.2 MB) | parámetros 6.22M, ops 13.74G, mAP de hardware 36.3, 288 FPS |
yolov7e6.hef | 1280x1280x3 | 73,072,640 (73.1 MB) | parámetros 97.20M, ops 515.12G, mAP de hardware 53.1, 16.4 FPS |
yolov7x.hef | 640x640x3 | 56,406,016 (56.4 MB) | parámetros 71.46M, ops 189.68G, mAP de hardware 51.0, 34.7 FPS |
Las cuatro variantes son builds para Hailo-10H del Hailo Model Zoo v5.4.0. Los valores de mAP y FPS son los publicados por el Model Zoo para Hailo-10H.
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
Cada variante tiene su propio endpoint:
| Variante | 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"La respuesta contiene entradas predictions con los campos class, confidence y box.
Notas de implementación
- La receta de ALLS es
change_output_activation(sigmoid)másnms_postprocess(<model>_nms_config.json, meta_arch=yolov5, engine=cpu); la configuración de NMS usanms_scores_th 0.2,nms_iou_th 0.6ymax_proposals_per_class 80, por lo que el host no ejecuta decodificación de cajas ni NMS. - La salida HPP en HailoRT 5.1.1 es el búfer compacto plano NMS-by-class (por clase: un contador de detecciones seguido de ese mismo número de filas
[ymin, xmin, ymax, xmax, score], todas normalizadas a [0, 1]). Los lectores de paso fijo desalinean todas las clases posteriores a la primera; el analizador se detiene en la primera cabecera no plausible y además mantiene los manejadores para las disposiciones ragged NMS-by-score y las densas(1,C,5,D)/(1,C,D,5). yolov7e6usa una entrada de 1280x1280x3; las otras tres usan 640x640x3. La aplicación lee el tamaño del HEF al iniciarse.- El preprocesamiento aplica letterbox al tamaño de entrada del HEF con relleno gris (114), convierte BGR a RGB y envía uint8 RGB en bruto; la normalización
/255está compilada en el HEF. - Los IDs de clase 0..79 indexan directamente la lista estándar de clases COCO.
- Los diagnósticos de la primera inferencia están desactivados en producción (
_OUTPUT_LOGGED = True); ponlo enFalseenweb_detection.pypara volcar el tipo, la forma, el rango de valores y las filas por clase de la salida en bruto al validar un HEF nuevo.
Notas de desarrollo
- Módulos fuente:
src/hailo10h_yolov7/,src/hailo10h_yolov7_tiny/,src/hailo10h_yolov7e6/,src/hailo10h_yolov7x/en el repositorioreComputer-Hailo10H-CV - Contenedores:
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov7{,_tiny,e6,x}:latest - El Hailo Model Zoo también publica builds para Hailo-8 de las cuatro variantes (v2.19.0 / v2.20.0); hasta ahora aquí solo se publican los módulos de Hailo-10H.
- Licencia del modelo: GPL-3.0 (upstream WongKinYiu/yolov7).
Entradas y salidas
Input: image, video frame, or camera frame. Output: COCO classes, confidence scores, and boxes.