YOLO-V5自定义数据训练:从标注到模型部署完整教程
YOLO-V5自定义数据训练:从标注到模型部署完整教程
如果你正在寻找一个能快速上手、效果稳定、部署灵活的目标检测方案,那么YOLO-V5绝对值得你花时间深入了解。它不像那些只停留在论文里的模型,而是真正为工程师和开发者设计的工具链。今天,我就带你走一遍完整的流程:从准备自己的数据开始,一步步训练出专属的检测模型,最后把它部署到实际场景中。
整个过程听起来复杂,但跟着步骤走,你会发现其实很清晰。我们不需要深究复杂的数学公式,重点是掌握“怎么做”和“为什么这么做”。无论你是想识别生产线上的零件缺陷,还是监控场景中的特定行为,这套方法都能直接套用。
1. 环境准备:十分钟搞定基础配置
开始之前,我们需要一个干净、稳定的开发环境。这里强烈推荐使用 Anaconda 来管理Python环境,它能帮你避免各种依赖包冲突的“玄学”问题。
1.1 创建专用虚拟环境
打开你的终端(Windows用Anaconda Prompt,Mac/Linux用Terminal),执行以下命令:
# 创建一个名为yolov5的虚拟环境,并指定Python版本为3.9
conda create -n yolov5 python=3.9 -y
# 激活这个环境
conda activate yolov5
为什么是Python 3.9?因为这是目前PyTorch生态兼容性最广、社区支持最好的版本之一,能最大程度减少环境问题。
1.2 安装核心依赖:PyTorch
接下来安装最重要的PyTorch框架。请根据你的电脑硬件情况选择对应的命令:
情况一:你有NVIDIA显卡,并且已经安装了CUDA 11.8 (可以通过 nvidia-smi 命令查看CUDA版本)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
情况二:你的电脑没有独立显卡,或者只有CPU (比如很多笔记本电脑)
pip install torch torchvision torchaudio
1.3 获取YOLO-V5源码并安装其他依赖
现在来获取YOLO-V5的官方代码库:
# 克隆Ultralytics维护的YOLO-V5仓库
git clone https://github.com/ultralytics/yolov5.git
# 进入项目目录
cd yolov5
# 安装项目所需的所有Python包
pip install -r requirements.txt
这个 requirements.txt 文件包含了OpenCV、Matplotlib、Pandas等二十多个常用库,一条命令就能全部装好。
1.4 快速验证:用预训练模型检测一张图片
环境装好了,怎么知道能不能用呢?最简单的方法就是跑个例子看看:
python detect.py --source data/images/bus.jpg --weights yolov5s.pt
这条命令做了三件事:
- 加载一个预训练好的小模型(
yolov5s.pt) - 对项目自带的示例图片
bus.jpg进行推理 - 把检测结果保存到
runs/detect/exp/目录
打开生成的图片,如果能看到公交车上用框标出了“人”,说明你的环境完全正常,可以进入下一步了。
小提示:
yolov5s是“小(small)”模型,速度最快,适合快速验证和CPU运行。如果你有GPU且需要更高精度,可以试试yolov5m(中)或yolov5l(大)。
2. 数据准备:为模型准备“教材”
模型训练就像教孩子认东西,你得先准备好“教材”——也就是标注好的数据。这部分工作决定了模型最终能学得多好。
2.1 理解YOLO的数据格式要求
YOLO-V5要求数据按特定方式组织。假设我们要训练一个识别“猫”和“狗”的模型,目录结构应该是这样的:
my_pet_dataset/ # 数据集根目录
├── images/ # 存放所有图片
│ ├── train/ # 训练集图片
│ │ ├── cat_001.jpg
│ │ ├── dog_001.jpg
│ │ └── ...
│ └── val/ # 验证集图片(用于评估模型)
│ ├── cat_101.jpg
│ ├── dog_101.jpg
│ └── ...
├── labels/ # 存放所有标注文件
│ ├── train/ # 训练集标注
│ │ ├── cat_001.txt
│ │ ├── dog_001.txt
│ │ └── ...
│ └── val/ # 验证集标注
│ ├── cat_101.txt
│ ├── dog_101.txt
│ └── ...
└── data.yaml # 数据集配置文件(最重要!)
关键点来了:每个图片文件都对应一个同名的 .txt 标注文件。比如 cat_001.jpg 的标注就在 cat_001.txt 里。
2.2 标注文件怎么写?
标注文件的内容格式很简单,每行代表图片中的一个物体:
<class_id> <x_center> <y_center> <width> <height>
class_id:类别编号,从0开始(0=猫,1=狗)x_center,y_center:边界框中心点的坐标(相对值,0~1之间)width,height:边界框的宽度和高度(相对值,0~1之间)
“相对值”是什么意思? 假设图片尺寸是 800×600 像素,你标注了一个框,中心点在 (400, 300),框的宽高是 (160, 120)。那么:
x_center= 400 / 800 = 0.5y_center= 300 / 600 = 0.5width= 160 / 800 = 0.2height= 120 / 600 = 0.2
所以这一行就是:0 0.5 0.5 0.2 0.2
一张图片有多个物体就写多行。例如:
0 0.3 0.4 0.15 0.2 # 一只猫
1 0.7 0.6 0.25 0.3 # 一只狗
2.3 创建数据集配置文件
最后,在数据集根目录创建 data.yaml 文件:
# 训练和验证图片的路径(相对路径或绝对路径)
train: ./my_pet_dataset/images/train
val: ./my_pet_dataset/images/val
# 类别数量
nc: 2
# 类别名称,按class_id顺序排列
names: ['cat', 'dog']
这个文件告诉YOLO-V5:数据在哪里、有几个类别、分别叫什么名字。
2.4 标注工具推荐
手动计算坐标太麻烦?用工具吧:
- LabelImg:开源免费,支持Windows/Mac/Linux,图形化界面,直接生成YOLO格式
pip install labelImg labelImg - Roboflow:在线标注平台,支持团队协作,还能自动做数据增强
- CVAT:功能强大的开源标注系统,适合企业级项目
数据质量黄金法则:宁可要100张标注精准的图片,也不要1000张标注粗糙的图片。模糊的、遮挡严重的、角度极端的样本,该舍弃就舍弃。
3. 模型训练:让模型学习你的数据
数据准备好了,现在开始训练。YOLO-V5支持“迁移学习”——不用从零开始,而是在预训练模型的基础上,用你的数据微调。
3.1 启动训练命令
在yolov5项目目录下,运行:
python train.py \
--img 640 \ # 输入图片尺寸(像素)
--batch 16 \ # 每次训练处理的图片数量
--epochs 50 \ # 整个数据集训练多少轮
--data ../my_pet_dataset/data.yaml \ # 你的数据集配置文件
--weights yolov5s.pt \ # 从哪个预训练模型开始
--cfg models/yolov5s.yaml \ # 模型结构配置文件
--name my_pet_detector # 这次训练的名字
参数解释:
| 参数 | 作用 | 常见值 |
|---|---|---|
--img | 图片输入尺寸 | 640(默认),可增大到1280检测小物体 |
--batch | 批次大小 | 取决于GPU显存,16-32较常见 |
--epochs | 训练轮数 | 30-100,数据少可适当增加 |
--data | 数据配置路径 | 你的 data.yaml 文件路径 |
--weights | 初始权重 | yolov5s.pt(小模型,推荐入门) |
--name | 实验名称 | 任意有意义的名称,用于区分不同训练 |
3.2 训练过程监控
训练开始后,你会看到类似这样的输出:
Epoch gpu_mem box obj cls labels img_size
0/49 2.1G 0.05123 0.02011 0.008761 22 640
1/49 2.1G 0.04689 0.01845 0.007892 18 640
...
box:边界框定位损失(越小越好)obj:物体置信度损失(越小越好)cls:分类损失(越小越好)
训练结束后,所有结果都保存在 runs/train/my_pet_detector/ 目录下。最重要的几个文件:
weights/best.pt:效果最好的模型权重(我们要用的)weights/last.pt:最后一轮的模型权重results.png:训练过程可视化图表
打开 results.png,你会看到多条曲线,最需要关注的是 mAP@0.5 这条线(通常为橙色)。它表示在IoU阈值为0.5时的平均精度,数值越高(接近1),说明模型检测越准。
3.3 实用训练技巧
如果你的数据集很小(比如只有几百张图片):
python train.py --data data.yaml --weights yolov5s.pt --epochs 100 --freeze 10
--freeze 10 会冻结前10层网络(主干特征提取部分),只训练后面的检测头,防止过拟合。
如果你的GPU显存不够:
python train.py --batch 8 --accumulate 2
--batch 8 减小批次大小,--accumulate 2 表示每2个批次更新一次梯度,相当于模拟批次大小为16的效果。
如果想加快训练速度:
python train.py --cache ram
--cache ram 把整个数据集缓存到内存中,大幅减少磁盘IO时间,适合数据集能完全放入内存的情况。
4. 模型验证与测试:看看训练效果如何
训练完成后,别急着用,先验证一下模型在验证集上的表现:
python val.py \
--weights runs/train/my_pet_detector/weights/best.pt \
--data ../my_pet_dataset/data.yaml \
--img 640 \
--task val
这个命令会输出详细的评估指标:
Class Images Instances P R mAP50 mAP50-95
all 100 342 0.892 0.867 0.901 0.672
cat 50 167 0.912 0.880 0.918 0.685
dog 50 175 0.873 0.854 0.884 0.659
P:精确率(Precision)——模型认为是猫/狗的框里,有多少真的是猫/狗R:召回率(Recall)——所有真实的猫/狗,有多少被模型找出来了mAP50:IoU阈值为0.5时的平均精度(主要看这个)mAP50-95:IoU阈值从0.5到0.95的平均精度(更严格的指标)
一般来说,mAP50 达到0.8以上就算不错,0.9以上就很好了。
4.1 用测试图片看看实际效果
找几张训练时没见过的图片,看看模型的实际表现:
python detect.py \
--source ../test_images/ \ # 测试图片目录
--weights runs/train/my_pet_detector/weights/best.pt \
--conf 0.5 \ # 置信度阈值(只显示置信度>0.5的检测框)
--name my_test_run
结果会保存在 runs/detect/my_test_run/。打开看看,框的位置准不准?有没有漏检或误检?这是最直观的检验方式。
5. 模型部署:让模型真正跑起来
训练好的模型不能只在实验室里跑,得部署到实际场景中。YOLO-V5支持多种部署方式。
5.1 基础推理:图片、视频、摄像头
单张图片检测:
python detect.py --source test.jpg --weights best.pt
批量处理整个文件夹:
python detect.py --source input_images/ --weights best.pt
处理视频文件:
python detect.py --source video.mp4 --weights best.pt
摄像头实时检测:
python detect.py --source 0 --weights best.pt # 0表示默认摄像头
5.2 编程调用:集成到你的Python项目中
很多时候我们需要把检测功能集成到自己的系统里。下面是一个完整的Python脚本示例:
import torch
import cv2
from pathlib import Path
# 设置设备(自动选择GPU或CPU)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f'使用设备: {device}')
# 加载模型
model = torch.hub.load('ultralytics/yolov5', 'custom',
path='runs/train/my_pet_detector/weights/best.pt',
force_reload=True)
model.to(device)
model.eval() # 设置为评估模式
# 准备图片
img_path = 'test_cat.jpg'
img = cv2.imread(img_path) # 用OpenCV读取
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # BGR转RGB
# 推理
results = model(img_rgb, size=640) # size可调整,需与训练时一致
# 处理结果
predictions = results.pandas().xyxy[0] # 获取检测结果(pandas DataFrame格式)
print(f"检测到 {len(predictions)} 个物体:")
for _, row in predictions.iterrows():
label = row['name']
confidence = row['confidence']
x1, y1, x2, y2 = int(row['xmin']), int(row['ymin']), int(row['xmax']), int(row['ymax'])
print(f" - {label}: 置信度 {confidence:.2f}, 位置 [{x1}, {y1}, {x2}, {y2}]")
# 在图片上画框
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(img, f'{label} {confidence:.2f}',
(x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# 保存结果
output_path = 'detected_' + Path(img_path).name
cv2.imwrite(output_path, img)
print(f"结果已保存到: {output_path}")
# 也可以直接显示
cv2.imshow('Detection Result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这个脚本展示了如何加载模型、处理图片、解析结果并可视化。你可以把它嵌入到Web服务、桌面应用或自动化脚本中。
5.3 模型导出:适配不同平台
为了在不同设备上高效运行,我们需要把PyTorch模型转换成特定格式:
导出为ONNX(跨平台通用格式):
python export.py --weights best.pt --include onnx --img 640 --batch 1
导出为TensorRT(NVIDIA GPU加速):
python export.py --weights best.pt --include engine --img 640 --batch 1
导出为CoreML(苹果设备):
python export.py --weights best.pt --include coreml --img 640 --batch 1
导出为TFLite(安卓/嵌入式设备):
python export.py --weights best.pt --include tflite --img 640 --batch 1
导出的模型文件可以直接在对应平台上运行,无需安装PyTorch环境。
5.4 性能优化技巧
如果推理速度不够快:
- 尝试更小的模型(从
yolov5l换到yolov5s) - 减小输入尺寸(从
--img 640降到--img 416) - 使用TensorRT或ONNX Runtime加速
- 开启半精度推理(FP16)
如果检测精度不够高:
- 检查数据标注质量
- 增加训练轮数(
--epochs) - 使用更大的模型(从
yolov5s换到yolov5l) - 增大输入尺寸(从
--img 640升到--img 1280) - 调整置信度阈值(
--conf,默认0.25)
6. 总结:从数据到部署的完整闭环
走完这一整套流程,你应该已经掌握了YOLO-V5自定义训练的核心要点。让我们回顾一下关键步骤:
- 环境搭建:用Anaconda创建独立环境,安装PyTorch和YOLO-V5依赖
- 数据准备:按规范组织图片和标注,创建
data.yaml配置文件 - 模型训练:用迁移学习在自有数据上微调,监控训练过程
- 模型验证:评估模型在验证集上的表现,确保达到预期效果
- 模型部署:将训练好的模型应用到实际场景中,支持多种格式导出
YOLO-V5最大的优势不是学术上的突破,而是工程上的友好性。清晰的文档、活跃的社区、丰富的预训练模型,都让它成为工业界落地目标检测的首选。
遇到问题怎么办?记住这几个资源:
- 官方文档:https://docs.ultralytics.com
- GitHub Issues:https://github.com/ultralytics/yolov5/issues
- 社区讨论:很多具体问题都能找到现成答案
现在,你可以用自己的数据试试了。从简单的开始,比如识别办公室里的“水杯”、“键盘”、“鼠标”,熟悉整个流程后,再挑战更复杂的场景。
训练第一个模型时可能会遇到各种问题,这很正常。重要的是保持耐心,仔细检查每一步:数据格式对不对?配置文件路径对吗?GPU内存够不够?大多数问题都能通过仔细排查解决。
目标检测的世界很大,YOLO-V5只是一个开始。但有了这个扎实的基础,你就能更快地探索更高级的应用,比如多目标跟踪、实例分割、3D检测等等。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐
所有评论(0)