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.

49 descargas
Tamaño
9.2 MB
Precisión
RKNN / Hailo HEF

Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.

Primeros pasos

Desplegar
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

API REST

Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.

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

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

ElementoValor
PlacareComputer R Series con Raspberry Pi CM5
AceleradorHailo-10H por PCIe, expuesto como /dev/hailo0
RuntimeHailoRT 5.1.1
Python en el contenedor3.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:

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

La versión esperada de HailoRT para estas imágenes es 5.1.1.

Ejecución con el vídeo de demostración

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

Abre http://<Board_IP>:8000 para ver la vista previa web.

Modo cámara USB

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

Sustituye yolov7 por yolov7_tiny, yolov7e6 o yolov7x para usar otra variante.

Archivos HEF

ModeloEntradaTamañoNotas
yolov7.hef640x640x328,106,752 (28.1 MB)parámetros 36.91M, ops 104.51G, mAP de hardware 48.8, 63.6 FPS
yolov7_tiny.hef640x640x39,199,616 (9.2 MB)parámetros 6.22M, ops 13.74G, mAP de hardware 36.3, 288 FPS
yolov7e6.hef1280x1280x373,072,640 (73.1 MB)parámetros 97.20M, ops 515.12G, mAP de hardware 53.1, 16.4 FPS
yolov7x.hef640x640x356,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:

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

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ás nms_postprocess(<model>_nms_config.json, meta_arch=yolov5, engine=cpu); la configuración de NMS usa nms_scores_th 0.2, nms_iou_th 0.6 y max_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).
  • yolov7e6 usa 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 /255 está 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 en False en web_detection.py para 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 repositorio reComputer-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.