CV / YOLOv10
YOLOv10
reComputer R Series (CM5 + Hailo-10H)
YOLOv10n/s/b/x 目标检测模型,支持 reComputer RK3576/RK3588(RKNN)以及 reComputer R Series + Hailo-8 或 Hailo-10H。
选择你正在使用的设备,设置指南和文档将相应更新。
快速开始
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模型详情
reComputer R Series (CM5 + Hailo-10H)YOLOv10 on reComputer R Series (CM5 + Hailo-10H)
YOLOv10n / YOLOv10s / YOLOv10b / YOLOv10x 通过 HailoRT 在 Hailo-10H 上执行 COCO 80 类目标检测。编译出的 HEF 使用 one2one 头并在片上完成 NMS(HPP),因此宿主只解析 NMS 之后的结果,不做框解码也不跑 NMS。
本页面向搭载 PCIe Hailo-10H 加速器的 reComputer R Series (CM5 + Hailo-10H)。
硬件与主机设置
| 项目 | 值 |
|---|---|
| 开发板 | reComputer R Series 搭配 Raspberry Pi CM5 |
| 加速器 | Hailo-10H(PCIe 接口),以 /dev/hailo0 暴露 |
| 运行时 | HailoRT 5.1.1 |
| 容器内 Python | 3.13, aarch64 |
在主机上安装 Hailo-10H 软件包,并在启动容器前确认驱动与设备就绪:
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot
# After reboot
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0这些镜像要求的 HailoRT 版本为 5.1.1。
使用演示视频运行
YOLOv10n:
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.mp4YOLOv10s:
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.mp4YOLOv10b:
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.mp4YOLOv10x:
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浏览器打开 http://<Board_IP>:8000 查看网页预览。
USB 摄像头模式
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把 yolov10n 换成 yolov10s、yolov10b 或 yolov10x 即可切换变体。
HEF 文件
| 模型 | 大小 | 说明 |
|---|---|---|
yolov10n.hef | 5,230,592 (5.0 MB) | 参数量 2.3M,运算量 6.8G,mAP 38.5(全精度) |
yolov10s.hef | 10,182,656 (9.7 MB) | 参数量 7.2M,运算量 21.7G,mAP 45.85(全精度) |
yolov10b.hef | 19,619,840 (18.7 MB) | 参数量 20.15M,运算量 92.09G,mAP 52.0(全精度) |
yolov10x.hef | 26,251,264 (25.0 MB) | 参数量 31.72M,运算量 160.56G,mAP 53.7(全精度) |
四个变体都是同一 THU-MIG YOLOv10 家族在 Hailo Model Zoo v5.4.0 上的 Hailo-10H 编译产物。
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
POST http://<Board_IP>:8000/api/models/yolov10n/predictcurl -X POST "http://<Board_IP>:8000/api/models/yolov10n/predict" \
-F "file=@test.jpg"| 接口 | 方法 | 用途 |
|---|---|---|
/ | GET | 网页预览界面 |
/api/models/yolov10{n,s,b,x}/predict | POST | 检测结果(JSON) |
/api/video_feed | GET | MJPEG 预览流 |
实现说明
- Model Zoo
base/yolov10.yaml使用hpp=true与device_pre_post_layers.nms=true、meta_arch=yolov8,对三个 one2one 类别卷积在片上做 sigmoid,info.output_shape为 80x5x100(80 类,每类最多 100 个框)。 - parser 节点是 one2one 头(
/model.23/one2one_cv2.{0,1,2}/Conv负责框、/model.23/one2one_cv3.{0,1,2}/Conv负责类别):每个格子一个预测、无锚框。宿主不做任何解码,也不跑 NMS。 - HailoRT 5.1.1 返回的 NMS-by-class 结果是扁平的一维 FLOAT32 紧凑缓冲区:每类先是一个整数形式的检测数量,随后仅跟该数量的
[ymin, xmin, ymax, xmax, score]行,数值归一化到 [0, 1]。解析在遇到第一个不合理的类别头时停止,因此最坏情况预留的填充尾部不会被当作数据;ragged NMS-by-score 与稠密(1,C,5,D)、(1,C,D,5)布局同样保留支持。 - IOU 滑块不生效(NMS 在片上完成);置信度滑块用于过滤解析出的检测结果。
- HEF 已内置
normalize_in_net(mean 0 / std 255)与padding_color=114:应用用灰色(114)做 letterbox,并把原始 uint8 RGB 像素送入网络,无需手工归一化。 - 类别 ID 0..79 直接索引标准 COCO 类别表。
- 首次推理诊断在生产中关闭(
web_detection.py中_OUTPUT_LOGGED = True);验证新 HEF 时改为False可打印原始输出的类型、形状、取值范围与逐类数据。
开发说明
- 源码模块:
reComputer-Hailo10H-CV仓库中的src/hailo10h_yolov10{n,s,b,x}/ - 容器:
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov10{n,s,b,x}:latest - Hailo-8(R20 演示)仅发布 n/b/x;Hailo-10H 编译产物覆盖全部四个变体。
- 模型许可:AGPL-3.0(upstream THU-MIG/yolov10)。
输入与输出
输入:图像、视频或 USB 摄像头画面。输出:检测框、类别、置信度和带标注的 MJPEG 预览。