YOLOv5 目标检测算法详解(一)
YOLOv5 目标检测算法详解(一)
一、YOLOv5 算法概述
YOLOv5 是YOLO系列目标检测算法的最新版本,相比YOLOv4在网络结构、损失函数和数据增强等方面进行了优化和改进。本教程将从数据预处理、网络架构、损失函数等多个方面详细讲解YOLOv5。
二、数据预处理
2.1 图像缩放与归一化
YOLOv5在处理不同尺寸的输入图像时,需要先将其统一为指定尺寸。常见的输入尺寸包括:
- 416×416
- 608×608
- 640×640
缩放算法步骤
假设原始图片尺寸为 523×699,目标尺寸为 416×416:
第一步:计算缩放比例
缩放比例 = min(目标宽度/原始宽度, 目标高度/原始高度)= min(416/523, 416/699)= min(0.7956, 0.5951)= 0.5951
第二步:计算缩放后的尺寸
新宽度 = 原始宽度 × 0.5951 = 523 × 0.5951 ≈ 311
新高度 = 原始高度 × 0.5951 = 699 × 0.5951 ≈ 416
第三步:计算灰边填充
为了保持原图宽高比,需要对不足的部分用灰色填充:
左右灰边 = (416 - 311) / 2 = 52.5
上下灰边 = (416 - 416) / 2 = 0
最终得到 416×416 的图像,两侧各有约 52.5 像素的灰色边框。
2.2 为什么使用灰色边框?
- 保持原图比例:不会扭曲或变形原图内容
- 保留原始信息:对象大小和形状保持一致
- 提高检测精度:避免因强行缩放导致的信息丢失
2.3 32倍数对齐
YOLOv5要求输入图像的宽高必须是32的倍数。这是因为:
- YOLOv5 含有5个下采样层(stride为2),总下采样倍数为 32(2^5 = 32)
- 确保特征图能够完整对应原图,避免信息丢失
三、马赛克数据增强(Mosaic Data Augmentation)
3.1 基本概念
马赛克数据增强是将4张图片随机拼接成一张图片的方法,具有以下优势:
3.2 优点
1. 增加数据多样性
- 在复杂背景下训练模型
- 提高模型泛化能力
2. 提升小目标检测能力
- 单张图片中多个物体拼接后变得更小
- 迫使模型学习检测微小目标
- 增加训练样本的丰富度
3. 加快训练速度
- 在相同的迭代次数内,看到更多的目标变化
- 提高训练效率
3.3 拼接方式
+--------+--------+
| 图1 | 图2 |
+--------+--------+
| 图3 | 图4 |
+--------+--------+
四张不同的图片在随机位置上进行拼接,生成单一的训练样本。
四、YOLOv5 网络架构
4.1 整体结构
YOLOv5 的网络结构主要包括三部分:
输入 (X) → Backbone(骨干网络) → Neck(颈部) → Head(输出头) → 输出 (Y)
4.2 主要模块
Backbone 骨干网络
- Focus结构(在某些版本中已移除)
- CSPDarknet 网络
- C3 模块
- SPPF 空间金字塔池化(YOLOv5 相比 YOLOv4 的改进)
Neck 颈部
- 特征融合结构
- FPN(特征金字塔网络)
- PANet 结构
- 融合不同尺度的特征信息
Head 输出头
- 分类分支:预测对象类别
- 定位分支:预测边界框坐标 (x, y, w, h)
- 置信度分支:预测目标存在的概率
4.3 SPPF vs SPP
SPP (Spatial Pyramid Pooling)
- 在YOLOv4中使用
- 使用多个最大池化层进行多尺度特征提取
SPPF (Spatial Pyramid Pooling Fast)
- YOLOv5的改进版本
- 计算更快,参数更少
- 性能相同,但效率更高
五、目标检测输出
5.1 输出格式
YOLOv5 的每个检测框包含以下信息:
(x, y, w, h, confidence, class_1_prob, class_2_prob, ..., class_n_prob)
其中:
- (x, y):边界框中心坐标
- (w, h):边界框宽度和高度
- confidence:该框包含目标的置信度
- class_prob:各类别的概率
5.2 网格敏感性消除
消除网格偏差,使模型对任意位置的目标均衡敏感。
5.3 正负样本匹配
- 正样本:与真实框重叠度高(IoU)的预测框
- 负样本:与真实框重叠度低的预测框
- 匹配机制决定了训练的收敛速度和最终精度
六、损失函数
6.1 损失函数组成
YOLOv5 的总损失包括:
Total Loss = 分类损失 + 定位损失 + 置信度损失
6.2 与YOLOv4对比
- 相似之处:基本损失函数设计相同
- 改进之处:在样本匹配和权重分配上进行了优化
- 原因:YOLOv5 在YOLOv4发布后2-3个月推出,参考了YOLOv4的成熟方案并进行了微调
七、推理与训练阶段区别
7.1 训练阶段(Training)
输入图片 X ↓
模型前向传播↓
获得预测结果 Ŷ↓
计算损失函数 Loss↓
反向传播计算梯度↓
更新权重参数 W、B↓
迭代下一个batch
7.2 推理阶段(Inference)
输入图片 X ↓
模型前向传播(权重W、B已固定)↓
获得预测结果 Ŷ↓
输出检测结果
关键区别:
- 推理阶段没有损失函数计算和反向传播
- 权重参数保持不变
- 推理速度更快
八、输入尺寸灵活性
8.1 训练时
- 输入必须是统一尺寸(如416×416)
- 便于batch processing
- 保证显存使用一致
8.2 推理时
- 可以使用不同尺寸的图片
- 可以是非正方形(如416×320)
- 只需确保宽高是32的倍数
8.3 尺寸选择建议
- 416×416:平衡精度和速度
- 608×608:更高精度,计算量大
- 640×640:标准尺寸,推荐使用
- 非正方形:可在推理时快速处理特定尺寸的图像
九、学习路径建议
- 深入学习YOLOv4:理解基础概念和网络设计
- 理解YOLOv5改进点:掌握优化细节
- 代码实践:从框架代码入手,逐步理解实现细节
- 模型优化:学习模型压缩、加速等技巧
十、常见问题解答
Q:为什么要使用灰色边框而不是直接缩放?
A:灰色边框保持原图比例,避免对象变形,有利于模型学习正确的目标特征。
Q:输入必须是正方形吗?
A:训练时最好用正方形以提高效率;推理时可以是任意形状,只需是32的倍数。
Q:SPPF相比SPP有什么优势?
A:计算速度快,参数少,精度相同。
Q:32倍数对齐的原因是什么?
A:YOLOv5有5个下采样层,总下采样倍数为32(2^5=32),确保特征图完整对应。
