当前位置: 首页 > news >正文

YOLOv5从入门到部署:手把手教你完成自定义数据集训练与模型优化

1. 为什么选择YOLOv5做目标检测

第一次接触YOLOv5是在2020年,当时需要做一个工业质检项目。对比了当时主流的Faster R-CNN、SSD等方案后,最终选择了YOLOv5。原因很简单:它够快、够准、够简单。现在三年过去了,YOLOv5依然是工业界落地最多的目标检测框架之一。

YOLOv5最大的优势在于它的工程化程度。相比学术论文里的模型,YOLOv5从数据准备到模型部署的全流程都做了深度优化。举个例子,同样的RTX 3060显卡,YOLOv5s模型训练COCO数据集只需要2天,而其他框架可能需要3-4天。在部署阶段,YOLOv5提供的export.py能一键转换成ONNX/TensorRT格式,这对嵌入式设备特别友好。

不过要注意的是,YOLOv5有多个版本(v6.0/v6.1/v7.0等),不同版本之间有些API不兼容。我建议新手直接从最新的v7.0开始,因为它的文档最全,社区支持也最好。另外,YOLOv5有四种预训练模型:

  • YOLOv5n(Nano):2.6M参数
  • YOLOv5s(Small):7.2M参数
  • YOLOv5m(Medium):21.2M参数
  • YOLOv5l(Large):46.5M参数

对于大多数应用场景,YOLOv5s已经足够用了。只有在需要检测特别小的物体时(比如遥感图像中的车辆),才需要考虑更大的模型。

2. 环境搭建与数据准备

2.1 快速搭建开发环境

我习惯用conda管理Python环境,这样可以避免包冲突。以下是具体步骤:

conda create -n yolov5 python=3.8 conda activate yolov5 pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113 pip install yolov5

这里有个坑要注意:PyTorch的CUDA版本必须和本地显卡驱动匹配。可以用nvidia-smi查看驱动支持的CUDA版本。如果装错了版本,训练时会报"CUDA out of memory"的错误。

2.2 数据标注实战技巧

LabelImg是最常用的标注工具,但我更推荐使用CVAT(Computer Vision Annotation Tool)。它不仅支持本地使用,还能团队协作。安装方法:

docker run -d -p 8080:8080 --name cvat openvino/cvat_server

标注时要注意几个细节:

  1. 标注框要紧贴物体边缘,但不要重叠
  2. 对于遮挡物体,按可见部分标注
  3. 每个类别至少准备200张图片(实际项目建议500+)
  4. 保持长宽比,避免极端尺寸(如1000x10)

标注完成后,数据目录应该这样组织:

dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/

3. 模型训练与调优

3.1 训练参数详解

YOLOv5的train.py有30多个参数,但新手只需要关注这几个:

python train.py \ --weights yolov5s.pt \ --data data/custom.yaml \ --epochs 100 \ --batch-size 16 \ --img 640 \ --device 0 \ --hyp data/hyps/hyp.scratch-low.yaml

重点参数说明:

  • --img 640:输入图像尺寸,越大精度越高但速度越慢
  • --batch-size:根据显存调整(RTX 3090可以设到32)
  • --hyp:超参数文件,控制学习率、数据增强等

训练过程中可以用TensorBoard监控:

tensorboard --logdir runs/train

3.2 数据增强策略

YOLOv5默认会启用Mosaic增强,这对小数据集特别有效。如果想自定义增强策略,修改data/hyps/hyp.scratch-low.yaml:

hsv_h: 0.015 # 色调增强幅度 hsv_s: 0.7 # 饱和度增强幅度 hsv_v: 0.4 # 明度增强幅度 degrees: 10.0 # 旋转角度范围 translate: 0.1 # 平移范围 scale: 0.5 # 缩放范围

有个实用技巧:当发现模型对某些角度识别不好时,可以增大degrees值;如果颜色变化影响识别,就降低hsv_h。

4. 模型评估与部署

4.1 关键指标解读

训练完成后,在runs/train/exp目录下会生成results.png:

  • mAP@0.5:IoU阈值为0.5时的平均精度
  • mAP@0.5:0.95:IoU阈值从0.5到0.95的平均精度
  • precision:查准率(预测正确的比例)
  • recall:查全率(实际被检出的比例)

一般来说:

  • mAP@0.5 > 0.9 说明模型优秀
  • mAP@0.5 < 0.5 需要重新调整数据或参数

4.2 模型部署实战

部署到生产环境推荐用TensorRT加速:

python export.py \ --weights runs/train/exp/weights/best.pt \ --include engine \ --device 0 \ --half

部署时常见问题解决方案:

  1. 如果推理速度慢,尝试启用--half使用FP16精度
  2. 出现"Unable to load model",检查CUDA/cuDNN版本
  3. 内存不足时,减小--img-size

对于视频流处理,可以用这个模板代码:

import cv2 from yolov5 import YOLOv5 model = YOLOv5("yolov5s.engine") cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() results = model.predict(frame) rendered = results.render()[0] cv2.imshow("YOLOv5", rendered) if cv2.waitKey(1) == ord('q'): break

5. 进阶优化技巧

5.1 模型剪枝与量化

当需要在边缘设备部署时,可以对模型进行优化:

python -m yolov5.export \ --weights yolov5s.pt \ --include onnx \ --dynamic \ --simplify

然后用ONNX Runtime量化:

python -m onnxruntime.tools.convert_onnx_models_to_ort yolov5s.onnx

实测在Jetson Nano上,量化后的模型推理速度能提升2-3倍。

5.2 解决常见问题

问题1:过拟合症状:训练集mAP很高但验证集很低 解决方法:

  • 增加数据增强
  • 减小模型尺寸(换yolov5n)
  • 添加Dropout层

问题2:漏检症状:某些类别recall很低 解决方法:

  • 检查标注质量
  • 增加该类别样本数量
  • 调整anchor boxes

问题3:误检症状:出现大量错误预测 解决方法:

  • 提高confidence阈值
  • 增加负样本(不包含目标的图像)
  • 使用更复杂的模型(yolov5m/l)
http://www.jsqmd.com/news/834290/

相关文章:

  • 如何快速掌握Nintendo Switch游戏备份:nxdumptool完整使用教程
  • AI智能体安全防护框架:从提示注入防御到工具调用安全实践
  • 告别手动抢茅台!这个免费开源的全自动预约系统让你轻松提升成功率
  • 如何快速掌握开源在线演示工具PPTist:专业用户的终极指南
  • 避坑指南:用MMDetection跑通Deformable DETR时,我遇到的5个典型报错及解决方法
  • 浏览器插件开发实战:基于AI的网页智能助手实现方案
  • IDEA 2018.2.3 下 Maven 依赖包消失?别慌,可能是版本兼容性在作祟
  • 广州全区上门回收黄金,正规平台高价回收各类贵金属与奢品 - 金掌柜黄金回收
  • 用Logisim搞定Educoder交通灯实训:从数码管驱动到状态机集成的保姆级避坑指南
  • 展望2027:未来三年AI Agent的技术路线图
  • Applite:3步告别命令行,用这款免费开源工具轻松管理macOS应用
  • 从 C 的混乱到 Rust 的优雅:字符串处理为什么这么难
  • 从内存视角拆解float和double:用C语言和调试器带你‘看见’IEEE754的二进制世界
  • YouTube播放列表自动化导出工具:从API调用到结构化数据实战
  • Codesys ST语言PID调参避坑指南:从仿真到实战,手把手教你搞定温控/电机项目
  • 浏览器音乐解锁工具:让你的加密音乐文件重获自由
  • 从零构建自动化监控看板:基于autoshow的轻量级数据可视化实践
  • 3分钟掌握mootdx:Python通达信数据读取的终极解决方案
  • Kali Linux定制化便携U盘:打造专业渗透测试移动工作站
  • Speechless:三步完成微博PDF备份的终极免费Chrome扩展
  • 广州全区域上门回收黄金,正规平台免费上门估价结算 - 金掌柜黄金回收
  • 终极免费离线OCR解决方案:Umi-OCR完整使用指南
  • 树莓派3B+无屏幕无网线,保姆级WiFi配置与SSH远程桌面一条龙教程
  • Taotoken 多模型聚合能力如何赋能 Hermes Agent 的复杂工作流
  • 从Vue2到Vue3:v-for和template的‘键’变之旅,别再写错地方了
  • 广州专业上门回收黄金,全城覆盖一站式贵金属奢品回收 - 金掌柜黄金回收
  • 超越芯片复位:Zynq Watchdog搭配CPLD,实现整板电源监控与恢复的进阶玩法
  • D2DX:如何让经典暗黑破坏神2在现代PC上焕发新生?
  • 通过taotoken审计日志追溯api调用详情与安全分析
  • Pearcleaner:如何彻底清理Mac应用残留文件?终极免费解决方案指南