针对你的具体需求:
任务 :检测文件夹中的图片(或视频流)中"两轮电动车骑行人员是否戴头盔"
部署环境 :一台无独立显卡的电脑 (即仅靠 CPU 运行)
要求 :有一定的实时性(如每秒处理多帧)
我们来综合分析是否适合使用 YOLOv8n。
✅ 结论先行:
推荐使用 YOLOv8n,但需配合模型优化(如 ONNX + CPU 推理加速),是当前最适合你场景的方案。
一、为什么 YOLOv8n 是合适的选择?
1. 模型轻量,适合 CPU 推理
- 参数量仅约 300万,模型文件 ~11MB
- 计算量小(~8.2 GFLOPs),对 CPU 压力小
- 在无 GPU 的情况下,是唯一能在 CPU 上实现"准实时"性能的 YOLOv8 版本
2. 推理速度快(在 CPU 上仍可用)
硬件 | YOLOv8n 近似 FPS(640×640) |
---|---|
Intel i5/i7 笔记本 CPU | 10 ~ 20 FPS |
Intel i7 台式机 / 服务器 CPU | 15 ~ 25 FPS(开启 ONNX 后更高) |
✅ 虽达不到 GPU 上的 200+ FPS,但在 CPU 上仍可实现 每秒处理 10~20 帧,满足"基本实时"需求(如监控视频 15 FPS)。
二、如何进一步提升 CPU 上的实时性?
✅ 推荐优化路径:YOLOv8n → 导出为 ONNX → 使用 ONNX Runtime 推理
步骤 1:导出为 ONNX 模型(一次操作)
python
from ultralytics import YOLO
# 加载训练好的模型
model = YOLO('yolov8n-helmet.pt') # 你训练的头盔检测模型
# 导出为 ONNX 格式(用于 CPU 高效推理)
model.export(format='onnx', imgsz=640)
生成 yolov8n-helmet.onnx
步骤 2:使用 ONNX Runtime 进行 CPU 加速推理
python
import onnxruntime as ort
import cv2
import numpy as np
# 加载 ONNX 模型
session = ort.InferenceSession('yolov8n-helmet.onnx', providers=['CPUExecutionProvider'])
# 图像预处理
img = cv2.imread('test.jpg')
img = cv2.resize(img, (640, 640))
img = img.transpose(2, 0, 1) # HWC -> CHW
img = img.astype(np.float32) / 255.0
img = np.expand_dims(img, axis=0)
# 推理
outputs = session.run(None, {session.get_inputs()[0].name: img})
# 后处理(NMS、解码输出等,可使用 ultralytics 的 utils 或自己实现)
⚡ ONNX Runtime 在 CPU 上比原生 PyTorch 快 30%~50%,且内存占用更低。
三、训练建议:如何让 YOLOv8n 更适合"头盔检测"?
1. 数据集要求
- 至少 1000~2000 张标注图像(骑行人员 + 是否戴头盔)
- 标注两类:
person
和helmet
(或with_helmet
/without_helmet
) - 覆盖白天、夜晚、雨天、遮挡、不同角度等场景
2. 训练命令(示例)
bash
yolo train model=yolov8n.pt data=helmet.yaml epochs=100 imgsz=640 batch=32
3. 推理时可加逻辑判断:
python
# 检测到 person 但附近无 helmet → 报警"未戴头盔"
四、实时性评估(CPU 环境)
方案 | 预估 FPS(i7 CPU) | 是否满足实时? |
---|---|---|
PyTorch 直接推理 | ~10-15 FPS | 勉强实时 |
ONNX + ONNX Runtime | ~18-25 FPS | ✅ 满足 15~20 FPS 实时需求 |
降低输入分辨率(如 320×320) | ~30+ FPS | ⚡ 更快,但精度略降 |
✅ 建议:使用
imgsz=640
训练,推理时可尝试320
或480
平衡速度与精度。
五、替代方案对比
模型 | CPU FPS | 精度 | 是否推荐 |
---|---|---|---|
YOLOv8n | 15~25 FPS | 中等(可微调) | ✅✅✅ 强烈推荐 |
YOLOv8s | 8~12 FPS | 较高 | ❌ 太慢,不推荐 |
YOLO-NAS Nano | 类似 | 类似 | 可试,但生态弱 |
MobileNet-SSD | 20+ FPS | 较低 | 可用,但精度不如 YOLO |
六、部署建议总结
项目 | 推荐方案 |
---|---|
模型选择 | ✅ YOLOv8n |
推理引擎 | ✅ ONNX + ONNX Runtime(CPU 优化) |
输入分辨率 | 640×640(训练),可 480×480(推理提速) |
实时性 | ✅ 可达 15~25 FPS,满足基本实时 |
后处理 | 添加"人有头但无头盔"逻辑判断 |
部署方式 | 脚本遍历文件夹 / 接入摄像头视频流 |
✅ 最终建议流程
- 收集并标注"骑电动车是否戴头盔"数据集
- 使用
yolov8n.pt
微调训练 - 导出为
.onnx
模型 - 使用 ONNX Runtime 在无显卡电脑上推理
- 实现文件夹批量处理或接入摄像头实时检测
如果你需要,我可以提供:
- 完整的 ONNX 推理代码模板
- 数据标注格式(YOLO 格式)
- 头盔检测的
data.yaml
示例 - 如何判断"未戴头盔"的逻辑代码