1. 环境准备:从零搭建YOLO训练基地
第一次接触YOLO训练的朋友可能会被复杂的依赖环境吓到,其实只要按步骤操作,半小时就能搞定。我去年给工厂做零件缺陷检测系统时,曾经在五台不同配置的机器上反复搭建环境,总结出了这套通用流程。
1.1 显卡驱动与CUDA安装
先检查你的显卡是否支持CUDA,这是GPU加速的关键。在cmd里输入nvidia-smi,如果看到类似下面的输出,说明驱动已安装:
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 535.86.05 Driver Version: 535.86.05 CUDA Version: 12.2 | |-------------------------------+----------------------+----------------------+重点看右上角的CUDA Version,这表示当前驱动支持的最高CUDA版本。如果报错,先去 NVIDIA官网 下载最新驱动。
CUDA Toolkit安装有个坑要注意:不是版本越新越好!必须和PyTorch支持的版本匹配。比如PyTorch 2.0最高只支持CUDA 11.7,你装12.x就会出问题。建议到 PyTorch官网 查看推荐版本。
安装CUDA时记得勾选:
- CUDA Toolkit
- CUDA Samples(用于验证)
- 开发组件(VS集成)
1.2 cuDNN配置技巧
下载cuDNN需要注册NVIDIA账号,建议选择与CUDA对应的版本。解压后把bin、include、lib三个文件夹的内容复制到CUDA安装目录(默认在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7)。
验证是否成功:运行C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\extras\demo_suite下的bandwidthTest.exe和deviceQuery.exe,看到Result = PASS就OK。
1.3 Conda环境管理
用conda创建独立环境能避免包冲突。我习惯用Python 3.8,因为某些库对新版本支持不好:
conda create -n yolo python=3.8 conda activate yolo安装PyTorch时一定要用官网生成的命令。比如对于CUDA 11.7:
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia验证GPU是否可用:
import torch print(torch.cuda.is_available()) # 应该输出True print(torch.rand(2,3).cuda()) # 应该显示tensor在GPU上2. YOLO项目配置实战
2.1 源码获取与IDE配置
推荐直接从Ultralytics的GitHub仓库克隆最新代码:
git clone https://github.com/ultralytics/yolov5 cd yolov5用PyCharm打开项目后,记得设置解释器为conda环境。有个常见问题:PyCharm可能找不到conda,这时需要手动指定conda.exe路径(一般在Anaconda3/Scripts/conda.exe)。
2.2 依赖安装避坑指南
requirements.txt里有些包需要特殊处理:
- 注释掉torch相关行(因为前面已经单独安装了GPU版)
- opencv-python可能会报错,改用:
pip install opencv-python-headless国内用户建议换源加速:
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/2.3 快速验证环境
运行detect.py测试预训练模型:
python detect.py --weights yolov5s.pt --source data/images/bus.jpg如果看到runs/detect/exp目录下生成带检测框的图片,说明环境配置成功。第一次运行会自动下载yolov5s.pt模型(约14MB)。
3. 数据集制作与训练技巧
3.1 数据标注规范
推荐用LabelImg或CVAT进行标注,保存为YOLO格式的txt文件,每行格式:
<class_id> <x_center> <y_center> <width> <height>坐标都是相对图像宽高的比例值(0-1之间)。
目录结构建议这样组织:
dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/3.2 数据增强策略
修改data/hyps/hyp.scratch-low.yaml可以调整增强参数:
hsv_h: 0.015 # 色调变化幅度 hsv_s: 0.7 # 饱和度变化幅度 flipud: 0.0 # 上下翻转概率 mosaic: 1.0 # 马赛克增强概率对于小样本数据集(<1000张),建议:
- 调高mosaic概率
- 启用mixup增强
- 增加旋转角度范围
3.3 训练参数调优
关键参数在train.py的parse_opt()函数中:
parser.add_argument('--epochs', type=int, default=300) parser.add_argument('--batch-size', type=int, default=16) parser.add_argument('--imgsz', '--img', type=int, default=640)根据显卡显存调整batch-size:
- 8GB显存:batch=8-12
- 16GB显存:batch=16-32
启动训练:
python train.py --data coco128.yaml --cfg yolov5s.yaml --weights '' --batch-size 164. 模型导出与部署
4.1 导出ONNX格式
python export.py --weights runs/train/exp/weights/best.pt --include onnx遇到opset版本问题可以指定版本:
python export.py --weights best.pt --include onnx --opset 124.2 TensorRT加速
先用onnx2trt转换:
trtexec --onnx=best.onnx --saveEngine=best.engine --fp16在Python中调用:
import tensorrt as trt with open("best.engine", "rb") as f: runtime = trt.Runtime(trt.Logger(trt.Logger.WARNING)) engine = runtime.deserialize_cuda_engine(f.read())4.3 常见部署问题
问题1:ONNX推理结果与原模型不一致
- 检查export时的imgsz是否和训练一致
- 确认预处理(归一化参数)是否相同
问题2:TensorRT性能反而下降
- 尝试禁用fp16模式
- 调整workspace大小
问题3:边缘设备部署内存不足
- 使用--dynamic参数导出动态尺寸模型
- 量化成INT8格式
记得训练完成后用val.py验证模型性能:
python val.py --weights best.pt --data coco128.yaml --img 640最后分享一个实用技巧:用--exist-ok参数可以避免每次训练生成新exp目录。我在调试阶段会这样写:
python train.py --exist-ok --name defect_detect