✅ YOLOv5 改进点与优化详解
一、前言
YOLOv5 是由 Ultralytics 团队开发的目标检测模型,虽然不是原始 YOLO 系列的“官方版本”,但它在工业界得到了广泛应用,因其:
本文将基于以下来源进行解析:
二、YOLOv5 的核心改进点与优化方向
改进方向 | 内容 |
---|
✅ 主干网络优化 | CSPDarknet53(CSP 结构) |
✅ Neck 特征融合 | PANet(Path Aggregation Network) |
✅ Head 输出结构 | 解耦头设计(Decoupled Detection Head) |
✅ 损失函数优化 | CIoU Loss + 分类损失分离 |
✅ 数据增强策略 | Mosaic + Copy-Paste 增强 |
✅ 标签分配机制 | 自动锚框匹配 + SimOTA 动态标签分配(部分版本引入) |
✅ 推理优化 | ONNX / TensorRT 支持良好 |
✅ 部署友好性 | 支持导出为 ONNX、TorchScript、TensorRT 等格式 |
三、YOLOv5 的主干网络改进(Backbone)
✅ 使用结构:
- CSPDarknet53(Cross Stage Partial Darknet53)
- 与 YOLOv4 相同,但做了轻量化调整
📌 改进意义:
优点 | 说明 |
---|
✅ 减少重复计算 | CSP 结构将通道拆分,提升梯度传播效率 |
✅ 更适合 GPU 并行 | 提高训练吞吐量 |
✅ 保持精度前提下更轻 | 适用于边缘设备部署 |
四、YOLOv5 的特征融合结构(Neck)
✅ 使用结构:
- PANet(Path Aggregation Network)
- 与 YOLOv4 相同,但在实现上更加简洁
📌 改进意义:
优点 | 说明 |
---|
✅ 多层级信息聚合 | 加强上下文感知能力 |
✅ 小目标识别更好 | 低层特征通过路径增强保留更多细节 |
✅ 快速收敛 | 有利于边界框回归任务 |
五、YOLOv5 的输出结构改进(Head)
✅ 使用结构:
每个 bounding box 的预测分为三个分支:
[
Conv → Detect Layer → Output:
- Reg(x, y, w, h)位置参数
- Obj(objectness)是否有物体
- Cls(class)类别概率
]
📌 改进意义:
优点 | 说明 |
---|
✅ 分离定位、分类、对象置信度 | 更细粒度控制各分支训练 |
✅ 提升小目标识别能力 | 分支独立优化 |
✅ 更易部署到推理框架 | 输出结构清晰,适配 ONNX/TensorRT |
六、YOLOv5 的损失函数优化
✅ 损失函数组成:
- 定位损失:CIoU Loss
- 分类损失:BCEWithLogitsLoss(Binary Cross Entropy)
- 对象置信度损失:BCEWithLogitsLoss
📌 改进意义:
改进点 | 说明 |
---|
✅ 使用 CIoU 替代 IoU | 提升边界框回归精度 |
✅ 分支独立损失计算 | 更精细地控制训练过程 |
✅ 支持 Focal Loss(可选) | 缓解类别不平衡问题 |
七、YOLOv5 的数据增强策略
✅ 使用增强方式:
数据增强方法 | 是否默认启用 |
---|
✅ Mosaic | ✅ 是(默认开启) |
✅ RandomAffine | ✅ 是(旋转、平移等) |
✅ HSV 扰动 | ✅ 是 |
✅ CutOut / Copy-Paste | ✅ 可选(需配置) |
📌 改进意义:
优点 | 说明 |
---|
✅ 提升小目标识别 | Mosaic 增加样本多样性 |
✅ 抗干扰能力更强 | HSV 扰动增强泛化能力 |
✅ 更好的背景建模 | Copy-Paste 提升遮挡场景识别 |
八、YOLOv5 的标签分配机制(Label Assignment)
✅ 使用策略:
- 静态 anchor 匹配(传统做法)
- SimOTA(在
yolov5l
, yolov5x
等大模型中引入)
📌 SimOTA 的作用(来自官方文档):
- 自动选择最合适的正样本;
- 不仅考虑 IoU,还考虑分类置信度;
- 类似 YOLOX 中的 SimOTA;
⚠️ 注意:SimOTA 在 yolov5s 中未启用,在 yolov5m/yolov5l/yolov5x 中逐步加入。
📌 改进意义:
优点 | 说明 |
---|
✅ 动态正样本匹配 | 提升训练稳定性 |
✅ 抑制冗余预测 | 减少误检 |
✅ 更合理利用标注信息 | 提升 mAP 和召回率 |
九、YOLOv5 的 NMS 后处理优化
✅ 默认使用:
📌 实现方式:
nms_kind=diounms # 使用 DIoU 替代 IoU
beta_nms=0.6 # Soft-NMS 使用的 beta 参数
iou_thresh=0.45 # NMS 阈值
score_thresh=0.25 # 置信度阈值
📌 改进意义:
优点 | 说明 |
---|
✅ 提升密集目标识别 | DIoU 更精确地判断框重叠 |
✅ 减少误删正确框 | Soft-NMS 对重叠框做降权处理 |
✅ 可灵活配置 | 可根据实际场景切换策略 |
十、YOLOv5 的自动锚框匹配(AutoAnchor)
✅ 支持功能:
- 自动聚类 anchor boxes(基于训练集分布)
- 如果你传入自定义数据集,YOLOv5 可自动聚类 anchor boxes
📌 实现方式:
python train.py --data data.yaml --weights yolov5s.pt --img 640 --autoanchor
系统会自动运行 K-Means 聚类,输出最适合当前数据集的 anchor boxes。
📌 改进意义:
优点 | 说明 |
---|
✅ 更适配新任务 | 针对特定数据集优化 anchor 设置 |
✅ 提升召回率 | anchor 更贴近实际目标尺寸 |
✅ 可解释性强 | anchor 数量固定为 9(3 层 × 3 个) |
十一、YOLOv5 的推理优化与部署支持
✅ 支持格式:
格式 | 是否支持 |
---|
✅ ONNX | ✅ 官方提供 export.py 导出脚本 |
✅ TorchScript | ✅ 支持 torchscript 导出 |
✅ TensorRT | ✅ 支持 ONNX → TensorRT 转换 |
✅ OpenVINO | ✅ 支持 ONNX 导出后转换 |
✅ CoreML / TFLite / PB | ✅ 可通过 export.py 生成 |
📌 改进意义:
优点 | 说明 |
---|
✅ 部署方便 | 支持多种推理引擎 |
✅ 推理速度快 | 轻量化结构设计 |
✅ 模型大小可控 | yolov5s ~ 7MB,yolov5x ~ 80MB |
十二、YOLOv5 的输入尺寸优化(多尺度训练)
✅ 支持方式:
- 输入图像尺寸可变,默认为 640×640;
- 支持
--img-size 320
到 --img-size 1280
; - 支持
--rect
图像矩形缩放,减少 padding 影响
📌 改进意义:
优点 | 说明 |
---|
✅ 更适应不同分辨率任务 | 如无人机视角、卫星图等 |
✅ 提升推理速度 | 小尺寸输入加速推理 |
✅ 减少无效像素影响 | Rect 缩放减少黑边区域 |
十三、YOLOv5 的完整改进总结表
改进方向 | 内容 | 是否论文提出 | 是否开源实现 |
---|
主干网络 | CSPDarknet53 | ❌ 第三方提出 | ✅ Ultralytics 实现 |
Neck 结构 | PANet | ❌ 第三方提出 | ✅ Ultralytics 实现 |
Head 结构 | Decoupled Head | ✅ Ultralytics 设计 | ✅ 实现 |
损失函数 | CIoU + BCE | ✅ 官方实现 | ✅ 实现 |
数据增强 | Mosaic + CopyPaste | ✅ 官方实现 | ✅ 实现 |
标签分配 | SimOTA(大模型) | ✅ 引用 YOLOX 方法 | ✅ 实现 |
自动锚框 | AutoAnchor 聚类 | ✅ 官方实现 | ✅ 实现 |
推理优化 | ONNX / TensorRT 支持 | ✅ 官方工具链 | ✅ 实现 |
十四、YOLOv5 的性能对比(来自 Ultralytics 官方 Benchmarks)
模型 | mAP@COCO | FPS(V100) | 模型大小 |
---|
YOLOv5s | ~36.5% | ~220 | ~7MB |
YOLOv5m | ~44.9% | ~76 | ~29MB |
YOLOv5l | ~49.0% | ~30 | ~43MB |
YOLOv5x | ~51.2% | ~18 | ~80MB |
十五、YOLOv5 的局限性(来自社区反馈)
局限性 | 说明 |
---|
❌ 没有论文支撑 | 依赖社区维护与实验验证 |
❌ SimOTA 未全量启用 | 仅在大模型中启用 |
❌ anchor 设置复杂 | 新任务仍需手动配置或 autoanchor |
❌ 缺乏注意力机制 | 相比 YOLOv7/YOLOv8 略显简单 |
十六、结语
它的核心改进包括:
- ✅ CSPDarknet53 主干网络;
- ✅ PANet 特征融合;
- ✅ Decoupled Head(解耦头);
- ✅ CIoU Loss;
- ✅ Mosaic 数据增强;
- ✅ 自动 Anchor 匹配;
- ✅ DIoU-NMS 后处理;
- ✅ 部署友好(ONNX / TensorRT);
📌 欢迎点赞 + 收藏 + 关注我,我会持续更新更多关于目标检测、YOLO系列、深度学习等内容!