CV / YOLOv7

YOLOv7

reComputer R Series (CM5 + Hailo-10H)

通过 RKNN 在 reComputer RK3576/RK3588 上、以及通过 HailoRT 在 reComputer R Series + Hailo-10H 上运行的 YOLOv7 COCO 目标检测。

49 次下载
大小
9.2 MB
精度
RKNN / Hailo HEF

选择你正在使用的设备,设置指南和文档将相应更新。

快速开始

部署
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

REST API

使用 REST API 进行推理。复制以下命令。

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

模型详情

reComputer R Series (CM5 + Hailo-10H)

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

YOLOv7 / YOLOv7-tiny / YOLOv7e6 / YOLOv7x 通过 HailoRT 在 Hailo-10H 上执行 COCO 80 类目标检测。编译出的 HEF 在片上完成 NMS(HPP,meta_arch=yolov5,每类最多 80 个框),因此应用只解析 HailoRT 5.1.1 返回的逐类紧凑缓冲区。

本页面向搭载 PCIe Hailo-10H 加速器的 reComputer R Series (CM5 + Hailo-10H)。

硬件与主机设置

项目值
开发板reComputer R Series 搭配 Raspberry Pi CM5
加速器Hailo-10H(PCIe 接口),以 /dev/hailo0 暴露
运行时HailoRT 5.1.1
容器内 Python3.13, aarch64

在主机上安装 Hailo-10H 软件包,并在启动容器前确认驱动与设备就绪:

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

这些镜像要求的 HailoRT 版本为 5.1.1。

使用演示视频运行

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

浏览器打开 http://<Board_IP>:8000 查看网页预览。

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

把 yolov7 换成 yolov7_tiny、yolov7e6 或 yolov7x 即可切换变体。

HEF 文件

模型输入大小说明
yolov7.hef640x640x328,106,752 (28.1 MB)参数量 36.91M,运算量 104.51G,硬件 mAP 48.8,63.6 FPS
yolov7_tiny.hef640x640x39,199,616 (9.2 MB)参数量 6.22M,运算量 13.74G,硬件 mAP 36.3,288 FPS
yolov7e6.hef1280x1280x373,072,640 (73.1 MB)参数量 97.20M,运算量 515.12G,硬件 mAP 53.1,16.4 FPS
yolov7x.hef640x640x356,406,016 (56.4 MB)参数量 71.46M,运算量 189.68G,硬件 mAP 51.0,34.7 FPS

四个变体都是 Hailo Model Zoo v5.4.0 的 Hailo-10H 编译产物。mAP 与 FPS 为 Model Zoo 公布的 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

每个变体有独立的端点:

变体端点
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"

响应中的 predictions 条目包含 class、confidence 和 box 字段。

实现说明

  • ALLS 配方是 change_output_activation(sigmoid) 加 nms_postprocess(<model>_nms_config.json, meta_arch=yolov5, engine=cpu);NMS 配置为 nms_scores_th 0.2、nms_iou_th 0.6、max_proposals_per_class 80,因此宿主不做框解码也不跑 NMS。
  • HailoRT 5.1.1 的 HPP 输出是扁平的逐类紧凑缓冲区(每类:检测数量 + 该数量条 [ymin, xmin, ymax, xmax, score],全部归一化到 [0, 1])。按固定步长读取会让第一类之后的每一类错位;解析在遇到第一个不合理的类别头时停止,同时保留 ragged NMS-by-score 与 (1,C,5,D) / (1,C,D,5) 稠密布局的处理分支。
  • yolov7e6 使用 1280x1280x3 输入,其余三个是 640x640x3;应用在启动时从 HEF 读取输入尺寸。
  • 预处理把画面 letterbox 到 HEF 输入尺寸,填充灰色(114),BGR 转 RGB 后送入原始 uint8;/255 归一化已编译进 HEF。
  • 类别 ID 0..79 直接索引标准 COCO 类别表。
  • 首次推理诊断在生产中关闭(_OUTPUT_LOGGED = True);验证新 HEF 时在 web_detection.py 里改为 False 可打印原始输出的类型、形状、取值范围与逐类数据。

开发说明

  • 源码模块:reComputer-Hailo10H-CV 仓库中的 src/hailo10h_yolov7/、src/hailo10h_yolov7_tiny/、src/hailo10h_yolov7e6/、src/hailo10h_yolov7x/
  • 容器:ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov7{,_tiny,e6,x}:latest
  • Hailo Model Zoo 也发布了这四个变体的 Hailo-8 构建(v2.19.0 / v2.20.0);本仓库目前只发布 Hailo-10H 模块。
  • 模型许可:GPL-3.0(upstream WongKinYiu/yolov7)。

输入与输出

Input: image, video frame, or camera frame. Output: COCO classes, confidence scores, and boxes.