YOLO算法
理解YOLO(You Only Look Once)算法的关键在于抓住其核心设计思想:将目标检测问题转化为单次全局回归任务,通过一次前向传播直接预测所有目标的边界框和类别。
核心步骤拆解
输入与网格划分
- 输入图像:统一缩放至固定尺寸(如416x416),方便批量处理。
- 网格划分:将图像分割为 ( S × S ) 的网格(如7x7),每个网格对应输出特征图中的一个单元格。
边界框预测(Bounding Box Prediction)
- 每个网格预测多个边界框(如YOLOv1中每个网格预测2个框):
- 每个框预测5个值:( (x, y, w, h, confidence) )
- ( x, y ):框中心相对于当前网格的偏移量(范围0~1)。
- ( w, h ):框的宽高相对于整张图像的归一化比例。
- ( confidence ):置信度 = ( P(Object) × IOU )(存在物体的概率 × 预测框与真实框的交并比)。
- 每个框预测5个值:( (x, y, w, h, confidence) )
- 关键点:即使一个网格内有多个物体,YOLOv1只能检测到有限数量(由预设的边界框数量 ( B ) 决定),这是早期YOLO的局限。
类别预测
- 每个网格独立预测类别:输出 ( C ) 个类别的条件概率 ( P(\(Class_i\) | Object) ),表示“如果该网格有物体,它属于每个类别的概率”。
- 最终类别置信度 = ( P(\(Class_i\) | Object) × confidence )。
输出整合
- 最终输出是一个 ( S × S × (B × 5 + C) ) 的张量。
例如:YOLOv1(S=7, B=2, C=20)输出7x7x30的矩阵,每个网格包含:- 2个边界框(每个框5个值:x,y,w,h,confidence)
- 20个类别的概率
后处理:非极大值抑制(NMS)
- 过滤冗余框:同一物体可能被多个网格或边界框检测到,NMS会保留置信度最高的框,抑制与其重叠度高的低置信度框。
YOLO从v1到v3的演进
1. YOLOv1(2016):单阶段检测的奠基
核心设计
- 输入:448x448图像 → 划分为7x7网格(每个网格预测2个边界框)。
- 输出:7x7x30张量(2个框×5参数 + 20类概率)。
- 网络结构:24层卷积 + 4层全连接(类似GoogLeNet简化版)。
关键技术
- 全局回归:直接预测边界框坐标(无锚框)。
- 损失函数:综合坐标误差、置信度误差和类别误差。
坐标误差权重更高(避免定位偏差)。 - 端到端训练:直接优化检测任务。
优点与局限
- 优点:速度极快(45 FPS),全局推理。
- 缺点:
- 定位粗糙:网格划分导致小目标漏检。
- 召回率低:每个网格仅预测2个框,密集目标处理差。
- 全连接层限制:丢失空间信息,泛化能力弱。
2. YOLOv2(2017):精度与速度的平衡
核心改进
- 引入锚框(Anchor Boxes):
预定义不同长宽比的边界框模板(如5种),模型预测偏移量而非直接坐标,提升对多尺度目标的适应性。 - 网络结构升级:
使用Darknet-19(19层卷积 + 5层池化),全卷积结构(无全连接层),保留空间信息。 - 关键技术突破:
- Batch Normalization:加速收敛,防止过拟合。
- 高分辨率微调:先在448x448图像上微调分类网络,提升检测精度。
- 多尺度训练(Multi-Scale Training):每隔10个batch随机缩放输入图像(320x320到608x608),增强模型鲁棒性。
- 维度聚类(Dimension Clusters):通过K-means聚类真实框尺寸,确定更合理的锚框比例。
- 细粒度特征融合:将浅层特征(26x26)与深层特征拼接,提升小目标检测。
输出与性能
- 输入:416x416 → 输出13x13网格(每个网格预测5个锚框)。
- mAP提升:从YOLOv1的63.4%提升到78.6%(VOC 2007)。
局限
- 多尺度目标仍依赖锚框:预定义锚框可能不匹配特定场景。
- 特征融合较简单:小目标检测仍有提升空间。
3. YOLOv3(2018):多尺度预测与深度网络
核心改进
- 网络结构升级:
使用Darknet-53(53层卷积,含残差连接),平衡深度与速度。 - 多尺度预测(FPN思想):
在3个不同尺度的特征图上预测(13x13, 26x26, 52x52),分别负责大、中、小目标。 - 关键技术突破:
- 特征金字塔网络(FPN):通过上采样融合不同层特征,增强多尺度检测能力。
- 更丰富的锚框:每个尺度预测3种锚框(共9种尺寸),覆盖更多目标形状。
- 改进的损失函数:
使用二元交叉熵(代替Softmax)支持多标签分类(如“人”和“女人”可同时存在)。 - 更深的网络:Darknet-53的残差结构缓解梯度消失,提升特征提取能力。
输出与性能
- 输入:416x416 → 输出3个尺度(13x13, 26x26, 52x52)。
- mAP提升:在COCO数据集上达到33.0% mAP,速度保持30 FPS(Titan X GPU)。
优点与局限
- 优点:
- 显著改善小目标检测(多尺度预测)。
- 支持更复杂的场景(如密集人群)。
- 缺点:
- 计算量增加(需权衡速度与精度)。
- 对极端尺度目标(如极大或极小物体)仍有挑战。
对比总结:YOLOv1 vs v2 vs v3
| 特性 | YOLOv1 | YOLOv2 | YOLOv3 |
|---|---|---|---|
| 核心改进 | 单阶段全局回归 | 锚框、多尺度训练 | 多尺度预测、Darknet-53 |
| 网络结构 | 24层卷积 + 全连接层 | Darknet-19(全卷积) | Darknet-53(残差结构) |
| 锚框 | 无 | 5种预定义锚框 | 9种锚框 + 多尺度预测 |
| 输入分辨率 | 448x448 | 416x416(多尺度训练) | 416x416(多尺度预测) |
| 特征融合 | 无 | 浅层与深层特征拼接 | 多尺度特征金字塔(FPN) |
| 主要优势 | 速度快,简单 | 精度显著提升,保留速度 | 多尺度检测,复杂场景适应性强 |
| 典型问题 | 小目标漏检,定位粗糙 | 锚框依赖预定义尺寸 | 计算量增加,极端目标检测不足 |
演进逻辑解析
- 从直接回归到锚框:
YOLOv1直接预测坐标,灵活性差;v2引入锚框,通过偏移量预测提升定位精度。 - 从单尺度到多尺度:
v1的单一网格无法处理多尺度目标;v2通过多尺度训练增强鲁棒性;v3通过FPN实现真正的多尺度预测。 - 从浅层网络到深层网络:
Darknet-19到Darknet-53的演进,结合残差连接,平衡了深度与计算效率。 - 从分类到多标签:
v3使用二元交叉熵,支持同一目标多标签分类(如“车”和“出租车”),更贴近现实场景。
总结
- YOLOv1:开创单阶段检测范式,奠定基础但精度受限。
- YOLOv2:通过锚框和网络优化,实现速度与精度的平衡。
- YOLOv3:引入多尺度预测和深度残差网络,显著提升复杂场景检测能力。
本文来自博客园,作者:漫漫长夜何时休,转载请注明原文链接:https://www.cnblogs.com/ag-chen/p/18872204

浙公网安备 33010602011771号