YOLOv8 目标检测:从训练到部署全流程(接单高频需求)
口罩检测、安全帽检测、车辆识别、缺陷检测......目标检测是接单和毕设里最高频的需求,YOLOv8 是目前上手最快、效果最稳的选择。这篇从数据准备到部署一条龙,代码直接抄。
前言
如果说让我只推荐一个"学了就能接单"的深度学习方向,我选目标检测。原因很简单:需求量大(各行各业都要"识别出画面里有什么")、技术成熟(YOLO 系一统江湖)、而且用自己的数据训练一个能用的检测模型,比想象中简单。
YOLOv8 是 Ultralytics 团队的开源项目,把训练、推理、导出全封装成了几行代码。我做过口罩检测、工地安全帽检测两个项目,用的都是这套流程,这篇全部分享出来。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
一、YOLOv8 是什么
YOLO(You Only Look Once)是一类单阶段目标检测模型,特点是一次前向同时输出所有目标的位置和类别,速度极快。YOLOv8 是目前最新的官方版本,几大优点:
- API 极其简单:训练、推理、导出都是一行调用;
- 自带预训练权重:yolov8n(最小,6MB)/ s / m / l / x 五档,没数据也能先用通用模型跑通流程;
- 一套代码通吃:检测(detect)、分割(segment)、分类(classify)。

二、安装与数据准备
bat
pip install ultralytics
数据格式(YOLO 格式):图片 + 同名 txt 标签,目录结构如下:
bash
dataset/
├── images/train/*.jpg
├── labels/train/*.txt # 每行: 类别id cx cy w h(归一化坐标)
├── images/val/*.jpg
├── labels/val/*.txt
└── data.yaml # 数据集配置
标签 txt 里每一行代表一个目标,五个数字分别是"类别编号、中心x、中心y、宽、高",全部归一化到 0~1。比如一张 640x640 的图上,中心在 (320,320)、大小为 200x150 的"helmet"目标,写:
0 0.5 0.5 0.3125 0.234375
标注工具推荐 LabelImg (简单)或 Label Studio (功能全),标完自动导出成这个格式。注意:类别编号从 0 开始 ,和 data.yaml 里的 names 顺序一一对应。
data.yaml 长这样:
yaml
train: dataset/images/train
val: dataset/images/val
nc: 2
names: ["helmet", "no_helmet"]
准备多少数据?每个类别至少 100~300 张,目标太小或遮挡多就再多一些。标注质量比数量重要,宁可少而精。
三、训练(核心代码,就三行)
python
from ultralytics import YOLO
model = YOLO("yolov8n.pt") # 加载预训练权重(自动下载,几十 MB)
model.train(data="data.yaml", epochs=50, imgsz=640, device=0)
几个要点:
device=0用 GPU,device="cpu"用 CPU(很慢,建议有独显);- 预训练权重做起点,收敛快、效果稳,这就是"迁移学习";
- 训练产物在
runs/detect/train/下,best.pt是验证集效果最好的权重; - 日志里主要看
mAP50(目标检测的核心指标,0.5 及格、0.7 以上算不错)。
四、推理测试
python
from ultralytics import YOLO
model = YOLO("runs/detect/train/weights/best.pt")
results = model("test.jpg")
r = results[0]
for box in r.boxes:
print("类别:", int(box.cls),
"置信度:", round(float(box.conf), 3),
"坐标:", box.xyxy.tolist())
results.save() # 标注好的结果图存到 runs/detect/predict/
r.boxes 里每个目标都有类别、置信度、坐标(xyxy 格式)。结果图直接可视化,一眼看出检测效果好坏。
运行验证 :训练结束终端会打印 mAP50 等指标(0.5 及格、0.7 以上不错);推理时终端逐行打印"类别 / 置信度 / 坐标",并在 runs/detect/predict/ 生成带框的结果图------看到框和数字,说明训练→推理链路已通。
五、导出部署(交付的一步)
python
model.export(format="onnx") # 生成 best.onnx,几秒完成
导出成 ONNX 后,就可以用上一篇文章《PyTorch 模型导出 ONNX》的 FastAPI 套路封装成接口:输入图片,输出检测框列表。要追求极致速度还可以 format="tensorrt"(N 卡专用,加速明显)。
交付物:best.onnx(或 best.pt)+ 推理代码 + 说明,客户拿去就能用。
六、常见坑
| 坑 | 解决 |
|---|---|
| 中文路径/数据集路径报错 | 一律用英文路径;data.yaml 里的路径写对 |
| 类别编号错乱 | 标注从 0 开始,必须和 data.yaml 的 names 顺序一致 |
| 训练 loss 不降 | 数据太少或标注不准;先用预训练权重多跑几轮;数据增强 ultralytics 默认已开 |
| CPU 训练太慢 | 换 yolov8n 小模型先跑通流程;或租一块 GPU 云主机 |
| 误报多 | 推理时加置信度阈值:model.predict("x.jpg", conf=0.5) |
七、总结
流程就一条线:标注数据 → 写 data.yaml → train → 推理验证 → export(onnx) → 部署。
目标检测是接单和毕设里最"实"的方向之一:口罩检测、安全帽检测、车辆计数、产品缺陷检测,全是这套代码换个数据集的事。学会了,就是一条稳定的变现路径。
觉得有用点个赞收藏,有问题评论区见,看到都会回。