Yolov5自定义数据集全流程指南:从训练到调优
2025.09.18 18:05浏览量:0简介:本文详细阐述Yolov5在自定义图片数据集上的训练、测试及模型调优全流程,包含数据准备、环境配置、训练参数优化及性能评估方法,助力开发者高效构建高性能目标检测模型。
Yolov5自定义图片训练测试及模型调优(详细过程)
一、环境准备与数据集构建
1.1 环境配置要点
- 硬件要求:推荐使用NVIDIA GPU(CUDA 11.x支持),内存≥16GB,存储空间≥50GB(含数据集与模型文件)
- 软件依赖:
conda create -n yolov5 python=3.8
conda activate yolov5
pip install torch torchvision torchaudio # 根据CUDA版本选择对应版本
git clone https://github.com/ultralytics/yolov5.git
cd yolov5 && pip install -r requirements.txt
- 版本兼容性:Yolov5 v6.0+需PyTorch 1.7+,建议使用最新稳定版(如v7.0)
1.2 自定义数据集规范
- 目录结构:
dataset/
├── images/
│ ├── train/ # 训练集图片(占比70%)
│ ├── val/ # 验证集图片(占比20%)
│ └── test/ # 测试集图片(占比10%)
└── labels/
├── train/ # 训练集标注(YOLO格式)
├── val/
└── test/
- 标注文件格式:每行包含
class x_center y_center width height
(归一化至[0,1]),示例:0 0.5 0.5 0.2 0.3 # 第0类,中心点(0.5,0.5),宽高占比20%/30%
- 数据增强建议:
- 水平翻转(
--hflip 0.5
概率) - 马赛克增强(默认开启,
--mosaic 1.0
) - 随机缩放(
--scale 0.8,1.2
)
- 水平翻转(
二、模型训练全流程
2.1 配置文件调整
- 修改
data/custom.yaml
:train: ../dataset/images/train
val: ../dataset/images/val
test: ../dataset/images/test
nc: 3 # 类别数
names: ['class1', 'class2', 'class3'] # 类别名称
- 模型选择:
- 小目标检测:
yolov5s.yaml
(轻量级,FPN+PAN结构) - 多尺度检测:
yolov5m.yaml
(平衡速度与精度) - 高精度需求:
yolov5l.yaml
或yolov5x.yaml
(需更大显存)
- 小目标检测:
2.2 训练命令与参数
python train.py --img 640 --batch 16 --epochs 100 \
--data custom.yaml --cfg yolov5s.yaml \
--weights yolov5s.pt --name custom_model \
--cache ram # 使用RAM加速数据加载
- 关键参数说明:
--img
:输入分辨率(建议640/1280,大图需更多显存)--batch
:批次大小(根据GPU内存调整,如V100可用32)--epochs
:训练轮次(通常50-300轮,每轮约5分钟)--optimizer
:可选SGD(默认Adam)--lr0
:初始学习率(默认0.01,小数据集可降至0.001)
2.3 训练日志分析
- 关键指标监控:
box_loss
:边界框回归损失(应<0.05)obj_loss
:目标置信度损失(应<0.1)cls_loss
:分类损失(多类别时关注)mAP@0.5
:IoU=0.5时的平均精度(核心指标)
- 可视化工具:
或直接查看tensorboard --logdir runs/train/custom_model
runs/train/custom_model/results.png
三、模型测试与评估
3.1 测试命令
python val.py --data custom.yaml --weights runs/train/custom_model/weights/best.pt \
--img 640 --batch 16 --conf 0.001 --iou 0.65
- 参数解释:
--conf
:置信度阈值(默认0.001,可调至0.5过滤低置信度检测)--iou
:NMS的IoU阈值(默认0.45,密集场景可增至0.6)
3.2 评估指标解读
- mAP@0.5:0.95:IoU从0.5到0.95的平均精度(更严格)
- F1-score:精确率与召回率的调和平均(平衡检测质量)
- 速度指标:
FPS
:每秒帧数(V100上YOLOv5s可达140FPS)Inference time
:单图推理时间(<10ms为佳)
四、模型调优策略
4.1 超参数优化
- 学习率调整:
或使用学习率调度器:# 在train.py中修改优化器参数
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.937, weight_decay=0.0005)
scheduler = torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr=0.01, steps_per_epoch=len(dataloader), epochs=100)
- 批次归一化:
- 增加
--sync-bn
参数(多GPU训练时启用同步BN) - 调整
--batch-size
与--img
的组合(如1280分辨率时batch减至8)
- 增加
4.2 结构优化技巧
- 特征金字塔调整:
- 修改
yolov5s.yaml
中的depth_multiple
和width_multiple
(默认0.33/0.5) - 示例:加深网络(
depth_multiple=0.5
)但保持宽度不变
- 修改
- 注意力机制集成:
- 在
models/yolo.py
中添加SE模块:class SEBlock(nn.Module):
def __init__(self, channel, reduction=16):
super().__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.fc = nn.Sequential(
nn.Linear(channel, channel // reduction),
nn.ReLU(inplace=True),
nn.Linear(channel // reduction, channel),
nn.Sigmoid()
)
def forward(self, x):
b, c, _, _ = x.size()
y = self.avg_pool(x).view(b, c)
y = self.fc(y).view(b, c, 1, 1)
return x * y.expand_as(x)
- 在
4.3 训练技巧
- 预热训练:
# 在train.py中添加预热阶段
warmup_epochs = 3
if epoch < warmup_epochs:
lr = 0.01 * (epoch / warmup_epochs)
for param_group in optimizer.param_groups:
param_group['lr'] = lr
- 类别不平衡处理:
- 修改损失函数权重(
data/custom.yaml
中添加weights: [1.0, 2.0, 0.5]
) - 使用过采样/欠采样策略
- 修改损失函数权重(
五、部署与优化
5.1 模型导出
python export.py --weights runs/train/custom_model/weights/best.pt \
--include torchscript onnx engine # 支持多格式导出
- 格式选择:
torchscript
:PyTorch原生部署onnx
:跨平台兼容(推荐TensorRT加速)engine
:NVIDIA TensorRT优化模型
5.2 性能优化案例
- TensorRT加速:
trtexec --onnx=best.onnx --saveEngine=best.engine --fp16 # FP16量化
- 速度提升:YOLOv5s从140FPS→320FPS(T4 GPU)
- 精度损失:<1% mAP下降
- 量化感知训练:
# 在train.py中启用量化模拟
model.qconfig = torch.quantization.get_default_qat_qconfig('fbgemm')
torch.quantization.prepare_qat(model, inplace=True)
六、常见问题解决方案
训练不收敛:
- 检查数据标注质量(使用
utils/label_checker.py
) - 降低初始学习率至0.0001
- 增加训练轮次至200轮
- 检查数据标注质量(使用
显存不足:
- 减小
--batch-size
(如从16→8) - 降低
--img
分辨率(如从640→416) - 启用梯度累积(修改训练循环)
- 减小
过拟合处理:
- 增加数据增强强度(
--augment true
) - 添加Dropout层(在
models/yolo.py
中修改) - 使用早停机制(监控验证集mAP)
- 增加数据增强强度(
本指南系统覆盖了Yolov5自定义训练的全生命周期,从环境搭建到模型部署均提供了可复现的解决方案。实际项目中,建议采用渐进式优化策略:先确保基础训练流程正确,再逐步调整超参数和网络结构,最后通过量化/剪枝实现部署优化。对于工业级应用,需特别注意数据质量管控和模型鲁棒性测试。
发表评论
登录后可评论,请前往 登录 或 注册