CV / YOLOv10

YOLOv10

reComputer R Series (CM5 + Hailo-10H)

Modelos de detección de objetos YOLOv10n/s/b/x para reComputer RK3588/RK3576 (RKNN) y reComputer R Series con Hailo-8 o Hailo-10H.

91 descargas
Tamaño
7.36 MB
Memoria
4GB+
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-yolov10n \
  --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/yolov10n:latest \
  python web_detection.py --model_path model/yolov10n.hef --video_path video/test.mp4

Detalles del modelo

reComputer R Series (CM5 + Hailo-10H)

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

YOLOv10n / YOLOv10s / YOLOv10b / YOLOv10x realizan detección de objetos COCO de 80 clases en Hailo-10H mediante HailoRT. El HEF compilado ejecuta el NMS en chip (HPP) con la cabeza one2one, por lo que el host solo analiza el resultado post-NMS y nunca decodifica cajas ni ejecuta NMS por su cuenta.

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

YOLOv10n:

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

YOLOv10s:

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

YOLOv10b:

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

YOLOv10x:

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

Sustituye yolov10n por yolov10s, yolov10b o yolov10x para usar otra variante.

Archivos HEF

ModeloTamañoNotas
yolov10n.hef5,230,592 (5.0 MB)parámetros 2.3M, ops 6.8G, mAP 38.5 (precisión completa)
yolov10s.hef10,182,656 (9.7 MB)parámetros 7.2M, ops 21.7G, mAP 45.85 (precisión completa)
yolov10b.hef19,619,840 (18.7 MB)parámetros 20.15M, ops 92.09G, mAP 52.0 (precisión completa)
yolov10x.hef26,251,264 (25.0 MB)parámetros 31.72M, ops 160.56G, mAP 53.7 (precisión completa)

Las cuatro variantes son builds para Hailo-10H del Hailo Model Zoo v5.4.0 de la misma familia THU-MIG YOLOv10.

Source: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v5.4.0/hailo10h/yolov10n.hef (yolov10s.hef, yolov10b.hef, yolov10x.hef in the same directory).

REST API

text
POST http://<Board_IP>:8000/api/models/yolov10n/predict
bash
curl -X POST "http://<Board_IP>:8000/api/models/yolov10n/predict" \
  -F "file=@test.jpg"
EndpointMétodoPropósito
/GETInterfaz de vista previa web
/api/models/yolov10{n,s,b,x}/predictPOSTDetecciones (JSON)
/api/video_feedGETStream de vista previa MJPEG

Notas de implementación

  • El Model Zoo base/yolov10.yaml usa hpp=true y device_pre_post_layers.nms=true con meta_arch=yolov8, aplica sigmoid en las tres convoluciones de clase one2one y documenta info.output_shape: 80x5x100 (80 clases, como máximo 100 cajas por clase).
  • Los nodos del analizador son la cabeza one2one (/model.23/one2one_cv2.{0,1,2}/Conv para la caja, /model.23/one2one_cv3.{0,1,2}/Conv para la clase): una predicción por celda de la cuadrícula, sin anclas. No se decodifica nada ni se ejecuta NMS en el host.
  • HailoRT 5.1.1 devuelve el búfer NMS-by-class en bruto como un array FLOAT32 plano de 1-D en disposición compacta: por clase, un contador de detecciones con valor entero seguido únicamente de esas filas [ymin, xmin, ymax, xmax, score], normalizadas a [0, 1]. El analizador se detiene en la primera cabecera de clase no plausible, por lo que la cola de relleno del peor caso no se lee como datos; las disposiciones ragged NMS-by-score y las densas (1,C,5,D) / (1,C,D,5) siguen admitiéndose.
  • El deslizador de IOU no tiene efecto (el NMS está en chip); el deslizador de confianza filtra las detecciones analizadas.
  • El HEF incorpora normalize_in_net (mean 0 / std 255) y padding_color=114: la aplicación aplica letterbox con gris (114) y envía uint8 RGB sin normalizar.
  • Los IDs de clase 0..79 indexan directamente la lista estándar de 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_yolov10{n,s,b,x}/ en el repositorio reComputer-Hailo10H-CV
  • Contenedores: ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10{n,s,b,x}:latest
  • En Hailo-8 (demo R20) solo se publican n/b/x; las builds para Hailo-10H cubren las cuatro variantes.
  • Licencia del modelo: AGPL-3.0 (upstream THU-MIG/yolov10).

Entradas y salidas

Entrada: imagen, vídeo o fotograma de cámara USB. Salida: cuadros de detección, clases, niveles de confianza y vista previa MJPEG anotada.