1. 环境准备从零搭建YOLOv5训练环境第一次接触YOLOv5时我最头疼的就是环境配置。记得当时为了一个CUDA版本问题折腾了整整两天现在回想起来其实只要按步骤来就能避免90%的坑。下面是我总结的最稳环境搭建方案首先确保你的机器有NVIDIA显卡GTX 1060以上推荐然后安装最新版Anaconda。这里有个小技巧创建虚拟环境时建议用Python 3.8实测这个版本与PyTorch的兼容性最好conda create -n yolov5 python3.8 conda activate yolov5接下来安装PyTorch时要注意CUDA版本匹配。到[NVIDIA控制面板]查看你的驱动版本然后对照PyTorch官网的兼容表选择安装命令。比如我的RTX 3090用的是pip install torch1.10.0cu113 torchvision0.11.1cu113 -f https://download.pytorch.org/whl/torch_stable.html最后克隆YOLOv5官方仓库并安装依赖git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt常见问题排查遇到matplotlib弹窗报错试试在代码开头添加import matplotlib; matplotlib.use(Agg)CUDA out of memory调小batch_size或者换更小的模型版本如yolov5s安装超时换成国内镜像源我常用清华源pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt2. 数据准备COCO数据集处理技巧COCO数据集有超过33万张图片但直接使用原始数据集会遇到几个坑。我第一次训练时没做预处理结果光是加载数据就花了20分钟。后来发现这几个优化点能显著提升效率数据集下载与解压官方提供的coco2017数据集压缩包有18GB建议用axel多线程下载axel -n 10 http://images.cocodataset.org/zips/train2017.zip unzip train2017.zip -d ../datasets/coco关键目录结构应该这样组织datasets/ └── coco/ ├── images/ │ ├── train2017/ # 训练集图片 │ └── val2017/ # 验证集图片 └── labels/ ├── train2017/ # 训练集标注 └── val2017/ # 验证集标注标注格式转换是新手最容易出错的地方。COCO提供的标注是JSON格式需要转换成YOLO格式的txt文件。用这个Python脚本可以一键转换from pycocotools.coco import COCO import os coco COCO(annotations/instances_train2017.json) cat_ids coco.getCatIds() for img_id in coco.getImgIds(): img_info coco.loadImgs(img_id)[0] ann_ids coco.getAnnIds(imgIdsimg_id) anns coco.loadAnns(ann_ids) with open(flabels/train2017/{img_info[file_name].replace(.jpg, .txt)}, w) as f: for ann in anns: cat_id ann[category_id] bbox ann[bbox] # 转换bbox为YOLO格式...3. 模型配置YOLOv5的调参艺术YOLOv5的配置文件就像汽车的操控面板每个参数都影响着训练效果。这是我调试过上百次后总结的黄金配置模型选择yolov5s手机端部署首选7.2M参数yolov5m平衡型21.2M参数yolov5l高精度场景46.5M参数data.yaml配置示例train: ../datasets/coco/images/train2017 val: ../datasets/coco/images/val2017 nc: 80 # COCO类别数 names: [person, bicycle, car, ..., toothbrush]hyp.scratch-low.yaml调参技巧lr0: 0.01 # 初始学习率大batch可调高 lrf: 0.2 # 最终学习率lr0*lrf momentum: 0.937 # SGD动量 weight_decay: 0.0005 # 权重衰减系数 fl_gamma: 0.0 # focal loss gamma类别不平衡时调为1.5 hsv_h: 0.015 # 图像HSV-Hue增强幅度 hsv_s: 0.7 # 饱和度增强 hsv_v: 0.4 # 明度增强关键参数经验值参数小模型建议值大模型建议值作用说明batch_size16-328-16显存不足时减小epochs100-30050-200简单数据集可减少image_size6401280分辨率越高越耗时optimizerSGDAdamW小数据AdamW更优4. 训练与监控实战中的避坑指南启动训练命令看似简单但里面的门道很多。这是我常用的训练命令模板python train.py \ --img 640 \ --batch 32 \ --epochs 300 \ --data data/coco.yaml \ --cfg models/yolov5s.yaml \ --weights \ --name coco_yolov5s \ --cache ram # 使用内存缓存加速训练过程监控有三大神器TensorBoard实时查看指标变化tensorboard --logdir runs/train权重文件分析用utils/loggers.py中的plot_results可视化显存监控nvidia-smi -l 1每秒刷新显存使用常见报错解决方案CUDA out of memory# 尝试减小batch_size或image_size --batch 16 --img 512标签文件找不到# 检查data.yaml中的路径是否正确 --data ./data/coco.yaml训练速度慢# 启用--cache参数 --cache disk/ram中途调整技巧发现过拟合添加--patience 20早停效果不佳尝试--rect矩形训练模式恢复训练--weights runs/train/exp/weights/last.pt5. 模型评估与优化训练完成后别急着用先做全面体检。这是我常用的评估组合拳标准COCO评估python val.py \ --data data/coco.yaml \ --weights runs/train/coco_yolov5s/weights/best.pt \ --batch 32 \ --task test \ --save-json关键指标解读mAP0.5IoU阈值0.5时的平均精度mAP0.5:0.95不同IoU阈值下的综合精度speed包括前处理、推理、后处理时间模型剪枝实战 如果想部署到移动端可以用这个通道剪枝脚本import torch from models.yolo import Model model Model(models/yolov5s.yaml) model.load_state_dict(torch.load(weights/best.pt)) # 计算通道重要性 importance compute_channel_importance(model) # 剪掉重要性0.1的通道 pruned_model prune_model(model, threshold0.1) torch.save(pruned_model.state_dict(), pruned.pt)部署优化技巧转ONNX时添加动态轴torch.onnx.export(..., dynamic_axes{input: {0: batch}, output: {0: batch}})TensorRT加速trtexec --onnxyolov5s.onnx --saveEngineyolov5s.engine安卓部署建议用NCNN框架6. 进阶技巧与实战经验经过几十次COCO数据集训练我总结出这些提升效果的关键点数据增强组合拳# hyp.yaml中调整这些参数 mosaic: 1.0 # 马赛克增强概率 mixup: 0.2 # mixup增强概率 copy_paste: 0.3 # 目标复制粘贴增强类别不平衡解决方案过采样少数类修改data.py中的load_image_and_labels使用Focal Loss设置hyp.yaml中的fl_gamma2.0自定义损失权重# 在loss.py中修改class权重 self.class_weights torch.tensor([1.0, 2.0, ..., 0.5])模型融合技巧# 加权融合多个模型 model1 torch.load(weights/best1.pt) model2 torch.load(weights/best2.pt) for p1, p2 in zip(model1.parameters(), model2.parameters()): p1.data 0.7*p1.data 0.3*p2.data实际项目中的经验遇到小目标检测效果差试试增加image_size到1280推理速度不够快用--half开启FP16推理想试试最新技术可以切换YOLOv5的--evolve超参数进化模式