零基础入门YOLO-V5目标检测训练全流程
在工业质检线上,一张张产品图像飞速流过摄像头,系统必须在毫秒级内判断是否存在划痕、缺损;在智能交通路口,算法要实时识别出车辆、行人和信号灯——这些场景背后,都离不开一个核心技术:实时目标检测。
而提到高效部署的目标检测方案,绕不开的名字就是YOLO(You Only Look Once)系列。它用“一帧定乾坤”的方式取代传统两阶段检测流程,将定位与分类合二为一,实现了速度与精度的惊人平衡。其中,YOLOv5虽非 Joseph Redmon 原班人马出品,却凭借其简洁工程结构和开箱即用的特性,迅速成为工业落地中最受欢迎的选择之一。
更关键的是,它的门槛足够低。哪怕你是第一次接触深度学习的学生,只要跟着步骤走,也能在半天之内跑通整个训练链路。本文就带你从零开始,不跳任何细节,完成一次完整的 YOLOv5 训练实战。
所有资源均提供国内网盘链接 + 官方地址,避免因网络问题卡住进度。
为什么是 YOLOv5?不只是快那么简单
YOLO 自2016年问世以来,历经十代演进,早已不是“牺牲精度换速度”的代名词。如今的 YOLO 系列,在保持高帧率的同时,mAP 指标也稳居前列,真正做到了“又快又准”。
而 YOLOv5 的优势,远不止推理速度快:
- 极致部署友好:原生支持导出为 ONNX、TensorRT 格式,轻松部署到 Jetson、树莓派甚至手机端。
- 模块化设计清晰:backbone、neck、head 分离明确,想加个注意力机制或更换 CSP 结构?改几行 YAML 就能实现。
- 自动化程度高:数据自动下载、预训练权重一键加载、训练过程可视化全都有。
- 迁移学习极快:哪怕只有几百张样本,微调后也能达到可用精度。
这使得它成为学生做毕设、工程师打比赛、企业做原型验证时的首选工具。更重要的是,社区活跃、文档齐全、报错好查——对新手极其友好。
数据准备:别让格式问题毁了你的第一轮训练
模型能不能学会“看”,取决于你给它的“教材”是否规范。YOLOv5 接受两种输入:
- 图像文件(
.jpg,.png) - 对应的文本标注文件(
.txt)
我们以官方推荐的轻量数据集COCO128为例。它包含128张来自 MS COCO 的图片,涵盖80个类别,适合快速验证流程。
下载与目录结构
你可以通过 GitHub 自动下载(需科学上网):
https://github.com/ultralytics/yolov5#datasets或者使用国内镜像免翻墙获取:
COCO128 百度网盘 提取码:
abcd
解压后应形成如下结构:
coco128/ ├── images/ │ └── train2017/ │ ├── 000000000036.jpg │ └── ... └── labels/ └── train2017/ ├── 000000000036.txt └── ...⚠️ 注意:每张图必须有同名
.txt文件对应,即使没有目标也要保留空文件。
标签格式:归一化的边界框坐标
YOLO 使用一种特殊的标注格式:归一化中心坐标 + 宽高比例。
每个.txt文件中的一行代表一个目标:
<class_id> <x_center> <y_center> <width> <height>所有数值都是相对于图像宽高的比例值,范围在[0,1]之间。
举个例子:
假设图像尺寸为 640×480,有一个“人”(class_id=0),其真实框左上角 (100,150),右下角 (300,400):
- 宽 = 200,高 = 250
- 中心点 x = 200,y = 275
- 归一化:
- x_center = 200 / 640 ≈ 0.3125
- y_center = 275 / 480 ≈ 0.5729
- width = 200 / 640 ≈ 0.3125
- height = 250 / 480 ≈ 0.5208
最终写入文件的内容就是:
0 0.3125 0.5729 0.3125 0.5208✅ 实际操作建议:不要手动计算!用脚本批量转换更安全。
如果你已有 Pascal VOC、LabelMe 或 COCO 格式的数据集,可以用以下工具自动转成 YOLO 格式:
- labelImg:图形化标注神器,直接导出 YOLO 格式
- 自定义 Python 脚本(可参考我之前写的《多种标注格式互转指南》)
环境搭建:用 Conda 隔离依赖,少踩90%的坑
项目再简单,环境配不对也白搭。强烈建议使用conda创建独立环境,避免污染全局 Python。
步骤一:安装 Miniconda
前往官网下载安装包:https://docs.conda.io/en/latest/miniconda.html
Windows 用户推荐使用 Anaconda Prompt 执行后续命令。
步骤二:创建虚拟环境
conda create -n yolov5 python=3.9 conda activate yolov5激活成功后,命令行前缀会显示(yolov5)。
✅ 建议使用 Python 3.7~3.10,过高版本可能导致某些包不兼容。
步骤三:安装 PyTorch(CPU/GPU任选)
YOLOv5 基于 PyTorch 构建,必须先装好框架。
CPU 版本(无显卡可用)
conda install pytorch torchvision torchaudio cpuonly -c pytorchGPU 版本(推荐,需 NVIDIA 显卡)
访问 PyTorch 官网 获取匹配 CUDA 版本的命令。
常见示例(CUDA 11.8):
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia🔍 查看 CUDA 版本:
bash nvidia-smi
验证安装:
import torch print(torch.__version__) print(torch.cuda.is_available()) # 应返回 True(GPU版)步骤四:安装 YOLOv5 依赖
下载项目代码
官方 GitHub 地址:
git clone https://github.com/ultralytics/yolov5.git国内备份链接(免翻墙):
YOLOv5_v6.1 百度网盘 提取码:
efgh
进入项目根目录,安装依赖:
pip install -r requirements.txt💡 若安装慢,可换清华源加速:
bash pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后不应有任何红色错误提示。
开始训练:一条命令启动你的第一个模型
万事俱备,现在可以正式训练了!
第一步:配置数据集路径
YOLOv5 使用 YAML 文件管理数据信息。编辑data/coco128.yaml:
train: ../coco128/images/train2017 val: ../coco128/images/train2017 nc: 80 names: ['person', 'bicycle', 'car', ..., 'toothbrush']⚠️ 路径是相对路径,请确保能正确访问到图像和标签文件夹。
第二步:选择模型大小
YOLOv5 提供多个预设模型,位于models/目录下:
| 模型 | 特点 |
|---|---|
yolov5s.yaml | 小模型,速度快,适合移动端 |
yolov5m.yaml | 平衡速度与精度 |
yolov5l.yaml | 更高精度,更大体积 |
yolov5x.yaml | 最大模型,最高精度 |
本次选用最小最快的yolov5s进行演示。
打开yolov5s.yaml,你会看到类似结构:
nc: 80 depth_multiple: 0.33 width_multiple: 0.50 backbone: [[-1, 1, Conv, [64, 6, 2, 2]], [-1, 1, Conv, [128, 3, 2]], ...无需修改,默认即可。
第三步:运行训练命令
在项目根目录执行:
python train.py \ --img 640 \ --batch 16 \ --epochs 100 \ --data coco128.yaml \ --cfg models/yolov5s.yaml \ --weights '' \ --device cpu💡 使用 GPU 改为
--device 0
参数说明:
| 参数 | 含义 |
|---|---|
--img 640 | 输入图像缩放到 640×640 |
--batch 16 | 每批处理 16 张图 |
--epochs 100 | 总共训练 100 轮 |
--data | 数据配置文件 |
--cfg | 模型结构定义文件 |
--weights | 初始化权重(空表示从头训练) |
--device | 设备选择 |
首次运行会自动下载 backbone 权重(如有需要),然后开始训练。
第四步:观察训练日志
终端输出类似:
Epoch gpu_mem box obj cls total targets img_size 1/100 2.1G 0.0786 0.0523 0.0215 0.1524 24 640 2/100 2.1G 0.0721 0.0498 0.0197 0.1416 26 640 ...同时生成runs/train/exp/文件夹,包含:
weights/best.pt:最佳模型权重(按 mAP@0.5 保存)weights/last.pt:最新一轮权重results.png:loss 和 mAP 曲线图train_batch*.jpg:数据增强后的样本可视化
📈 关注
results.png中的 mAP@0.5 曲线,理想情况下应稳步上升。
推理测试:看看模型到底学会了什么
训练结束后,用detect.py测试效果。
运行命令:
python detect.py \ --weights runs/train/exp/weights/best.pt \ --source ../coco128/images/train2017/000000000036.jpg \ --img 640 \ --conf-thres 0.4参数解释:
| 参数 | 作用 |
|---|---|
--weights | 加载训练好的模型 |
--source | 输入源(支持单图、多图、视频、摄像头) |
--img | 推理时图像大小 |
--conf-thres | 置信度阈值,低于则过滤 |
运行后结果保存在runs/detect/exp,会生成带检测框的图像。
检测结果示意图
训练输出详解:读懂每一个文件的意义
每次训练都会新建一个exp文件夹(如 exp2、exp3),记录完整实验信息:
| 文件/目录 | 用途 |
|---|---|
weights/best.pt | 最佳模型,用于部署 |
weights/last.pt | 最终模型,可用于继续训练(断点续训) |
results.csv | 每 epoch 的 loss、precision、recall、mAP 数据 |
results.png | 可视化训练趋势 |
opt.yaml | 本次训练的所有超参数记录 |
hyp.yaml | 超参数配置(学习率、增强策略等) |
train_batch*.jpg | 数据增强效果展示,检查是否有异常裁剪 |
✅ 生产部署优先使用
best.pt,因其在验证集上表现最优。
常见问题排查清单
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
ModuleNotFoundError | 依赖未装全 | 重新运行pip install -r requirements.txt |
CUDA out of memory | 显存不足 | 减小 batch size 或换用 yolov5n/s 模型 |
No labels found | label 路径错误 | 检查 yaml 中路径是否指向正确的labels文件夹 |
loss=nan | 学习率太高或标签越界 | 检查标签值是否超出 [0,1] 范围 |
AssertionError: No labels in ... | label 文件夹为空 | 确保每个 image 都有对应的 txt 文件(哪怕为空) |
特别提醒:标签中的坐标一旦出现负数或大于1的值,会导致 loss 发散甚至训练崩溃。建议在数据预处理阶段加入合法性校验。
写在最后:这只是起点
恭喜你完成了人生第一次 YOLOv5 全流程训练!你现在已掌握:
- 如何组织符合规范的数据集
- 如何搭建稳定运行的训练环境
- 如何启动并监控训练过程
- 如何进行推理测试与结果分析
但这仅仅是开始。下一步你可以尝试:
🔹用自己的数据训练专属模型
🔹调整超参数提升性能(修改hyp.scratch-low.yaml)
🔹启用 Mosaic/AutoAugment 增强泛化能力
🔹导出 ONNX/TensorRT 模型用于边缘设备部署
🔹结合 Flask/FastAPI 搭建 Web 检测服务
后续我会推出系列实战教程:
- 《YOLOv5 轻量化改进实战》
- 《如何在 Jetson Nano 上部署 YOLOv5》
- 《YOLOv5 + DeepSORT 实现多目标追踪》
如果你在实操中遇到任何问题,欢迎留言交流,我会持续更新答疑内容。
🎯 让我们一起把 AI 真正落地到现实世界中去!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考