YOLOv5环境配置与数据集制作全流程实战指南
从零开始搭建YOLOv5开发环境
对于刚接触深度学习的开发者来说,环境配置往往是第一个"拦路虎"。不同于常规Python项目,YOLOv5需要正确配置CUDA、cuDNN、PyTorch等组件才能发挥GPU加速效果。以NVIDIA GTX 1060显卡为例,我们需要先确定驱动版本(通过NVIDIA控制面板查看),然后选择兼容的CUDA 10.2和cuDNN 7.6.5组合。
关键组件版本对照表:
| 硬件/软件 | 推荐版本 | 验证方法 |
|---|---|---|
| NVIDIA驱动 | ≥456.71 | nvidia-smi |
| CUDA | 10.2 | nvcc --version |
| cuDNN | 7.6.5 | 检查cudnn64_7.dll |
| PyTorch | 1.8.1+cu102 | torch.version |
使用Anaconda创建独立环境能有效避免依赖冲突:
conda create -n yolov5 python=3.8 conda activate yolov5 conda install cudatoolkit=10.2 cudnn=7.6.5 -c conda-forge提示:建议使用清华镜像源加速安装,在.condarc中添加:
channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
PyCharm中需正确绑定Conda环境:
- 打开PyCharm → File → Settings → Project → Python Interpreter
- 点击齿轮图标 → Add → Conda Environment
- 选择Existing environment → 定位到Anaconda安装目录下的envs/yolov5/python.exe
验证GPU是否可用:
import torch print(torch.cuda.is_available()) # 应输出True print(torch.backends.cudnn.enabled) # 应输出True高效数据集标注技巧与工具链优化
LabelImg是常用的图像标注工具,但直接使用常会遇到各种问题。推荐以下优化方案:
常见问题解决方案:
- 资源文件缺失错误:执行
pyrcc5 -o libs/resources.py resources.qrc生成资源文件 - 标注效率低下:掌握快捷键组合(W创建框,D下一张,A上一张)
- 格式转换问题:标注前务必切换为YOLO格式(非Pascal VOC)
标注流程优化建议:
- 建立标准化目录结构:
/raw_images /class1 /class2 /labels /class1 /class2 - 使用批量预处理脚本统一图像尺寸:
from PIL import Image import os def resize_images(input_dir, output_dir, size=(640,640)): os.makedirs(output_dir, exist_ok=True) for img_name in os.listdir(input_dir): img_path = os.path.join(input_dir, img_name) with Image.open(img_path) as img: img = img.resize(size, Image.BILINEAR) img.save(os.path.join(output_dir, img_name))
标注质量检查清单:
- 每个目标物体都被完整标注
- 无重叠框(特殊情况需特殊处理)
- 类别命名一致(区分大小写)
- 标注框紧贴物体边缘
YOLOv5项目配置与模型训练实战
克隆官方仓库后,需要针对性调整配置:
git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt关键配置文件说明:
data/custom.yaml示例:train: ../datasets/mydata/images/train val: ../datasets/mydata/images/val nc: 2 # 类别数 names: ['person', 'car'] # 类别名称models/yolov5s.yaml修改点:nc: 2 # 与custom.yaml保持一致
训练参数优化建议:
python train.py --img 640 --batch 16 --epochs 300 --data custom.yaml --cfg yolov5s.yaml --weights yolov5s.pt训练监控指标解读:
- mAP@0.5:IoU阈值为0.5时的平均精度
- Precision:预测为正样本中真实正样本比例
- Recall:真实正样本中被正确预测的比例
- Box Loss:边界框回归损失值
注意:当验证集指标持续下降时,应考虑:
- 降低学习率(--lr参数)
- 增加数据增强(--augment参数)
- 提前终止训练(Ctrl+C)
自动化数据处理与模型部署技巧
手动处理数据集效率低下,推荐使用自动化脚本:
import yaml from sklearn.model_selection import train_test_split def create_yaml(dataset_path, classes): data = { 'train': f'{dataset_path}/images/train', 'val': f'{dataset_path}/images/val', 'nc': len(classes), 'names': classes } with open('data/custom.yaml', 'w') as f: yaml.dump(data, f)模型导出为生产环境格式:
python export.py --weights runs/train/exp/weights/best.pt --include onnx engine性能优化技巧:
- 使用TensorRT加速:
import tensorrt as trt logger = trt.Logger(trt.Logger.WARNING) with open("model.engine", "rb") as f, trt.Runtime(logger) as runtime: engine = runtime.deserialize_cuda_engine(f.read()) - 多线程预处理:
from torch.utils.data import DataLoader dataset = LoadImages(source, img_size=640) dataloader = DataLoader(dataset, batch_size=4, num_workers=4)
实时推理优化方案:
- 使用半精度(--half参数)
- 调整推理尺寸(--imgsz参数)
- 启用JIT编译(torch.jit.script)
常见问题排查与性能调优
环境问题排查清单:
CUDA不可用:
- 检查驱动版本:
nvidia-smi - 验证CUDA安装:
nvcc --version - 测试PyTorch GPU支持:
torch.cuda.is_available()
- 检查驱动版本:
训练过程崩溃:
- 降低batch size(--batch参数)
- 减少工作线程(--workers参数)
- 检查显存使用:
watch -n 1 nvidia-smi
性能瓶颈分析工具:
with torch.profiler.profile( activities=[torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA] ) as prof: result = model(inputs) print(prof.key_averages().table())模型优化方向:
- 知识蒸馏(使用大模型指导小模型)
- 量化训练(减少模型大小)
- 剪枝优化(移除冗余参数)
实际项目中,建议先使用小规模数据验证流程,再逐步扩大数据集规模。训练过程中要定期保存检查点(--save-period参数),并使用TensorBoard监控训练过程(--tb-log参数)。