CV / YOLOv10

YOLOv10

reComputer R Series (CM5 + Hailo-10H)

YOLOv10 object detection for reComputer RK3576, RK3588, and R Series with Hailo-8 or Hailo-10H.

80 downloads
Size
7.36 MB
Memory
4GB+
Precision
RKNN / Hailo HEF

Choose the device you're using, the set up guide and documentation will update accordingly.

Getting Started

Deploy
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

Model Details

reComputer R Series (CM5 + Hailo-10H)

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

YOLOv10n / YOLOv10s / YOLOv10b / YOLOv10x perform COCO 80-class object detection on Hailo-10H through HailoRT. The compiled HEF runs NMS on-chip (HPP) with the one2one head, so the host parses the post-NMS result and never decodes boxes or runs NMS itself.

This page targets reComputer R Series (CM5 + Hailo-10H) with a PCIe Hailo-10H accelerator.

Hardware and Host Setup

ItemValue
BoardreComputer R Series with Raspberry Pi CM5
AcceleratorHailo-10H over PCIe, exposed as /dev/hailo0
RuntimeHailoRT 5.1.1
Python in container3.13, aarch64

Install the Hailo-10H packages on the host and confirm that the driver and device are ready before starting the container:

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

The expected HailoRT version for these images is 5.1.1.

Run With Demo Video

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

Open http://<Board_IP>:8000 to view the web preview.

USB Camera Mode

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

Swap yolov10n for yolov10s, yolov10b or yolov10x to use another variant.

HEF Files

ModelSizeNotes
yolov10n.hef5,230,592 (5.0 MB)2.3M params, 6.8G ops, 38.5 mAP (full precision)
yolov10s.hef10,182,656 (9.7 MB)7.2M params, 21.7G ops, 45.85 mAP (full precision)
yolov10b.hef19,619,840 (18.7 MB)20.15M params, 92.09G ops, 52.0 mAP (full precision)
yolov10x.hef26,251,264 (25.0 MB)31.72M params, 160.56G ops, 53.7 mAP (full precision)

All four variants are Hailo Model Zoo v5.4.0 Hailo-10H builds of the same THU-MIG YOLOv10 family.

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"
EndpointMethodPurpose
/GETWeb preview UI
/api/models/yolov10{n,s,b,x}/predictPOSTDetections (JSON)
/api/video_feedGETMJPEG preview stream

Implementation Notes

  • The Model Zoo base/yolov10.yaml uses hpp=true and device_pre_post_layers.nms=true with meta_arch=yolov8, applies sigmoid on the three one2one class convolutions and documents info.output_shape: 80x5x100 (80 classes, at most 100 boxes per class).
  • The parser nodes are the one2one head (/model.23/one2one_cv2.{0,1,2}/Conv box, /model.23/one2one_cv3.{0,1,2}/Conv class): one prediction per grid cell, no anchors. Nothing is decoded and no NMS runs on the host.
  • HailoRT 5.1.1 returns the raw NMS-by-class buffer as a flat 1-D FLOAT32 array in compact layout: per class one integer-valued detection count followed by only that many [ymin, xmin, ymax, xmax, score] rows, normalized to [0, 1]. The parser stops at the first implausible class header, so the worst-case padding tail is not read as data; ragged NMS-by-score and dense (1,C,5,D) / (1,C,D,5) layouts stay supported as well.
  • The IOU slider has no effect (NMS is on-chip); the confidence slider filters the parsed detections.
  • The HEF bakes normalize_in_net (mean 0 / std 255) and padding_color=114: the app letterboxes with gray (114) and feeds raw uint8 RGB pixels — no manual normalization.
  • Class IDs 0..79 index the standard COCO class list directly.
  • First-inference diagnostics are disabled in production (_OUTPUT_LOGGED = True); set it to False in web_detection.py to dump the raw output type, shape, value range and per-class rows when validating a new HEF.

Development Notes

  • Source modules: src/hailo10h_yolov10{n,s,b,x}/ in the reComputer-Hailo10H-CV repository
  • Containers: ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10{n,s,b,x}:latest
  • On Hailo-8 (R20 demo) only n/b/x are published; the Hailo-10H builds cover all four variants.
  • Model licence: AGPL-3.0 (upstream THU-MIG/yolov10).

Inputs and Outputs

Input: image, video, or USB camera frame. Output: detection boxes, classes, confidences, and annotated MJPEG preview.