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 )(存在物体的概率 × 预测框与真实框的交并比)。
  • 关键点:即使一个网格内有多个物体,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简化版)。

关键技术

  1. 全局回归:直接预测边界框坐标(无锚框)。
  2. 损失函数:综合坐标误差、置信度误差和类别误差。
    坐标误差权重更高(避免定位偏差)。
  3. 端到端训练:直接优化检测任务。

优点与局限

  • 优点:速度极快(45 FPS),全局推理。
  • 缺点
    • 定位粗糙:网格划分导致小目标漏检。
    • 召回率低:每个网格仅预测2个框,密集目标处理差。
    • 全连接层限制:丢失空间信息,泛化能力弱。

2. YOLOv2(2017):精度与速度的平衡

核心改进

  • 引入锚框(Anchor Boxes)
    预定义不同长宽比的边界框模板(如5种),模型预测偏移量而非直接坐标,提升对多尺度目标的适应性。
  • 网络结构升级
    使用Darknet-19(19层卷积 + 5层池化),全卷积结构(无全连接层),保留空间信息。
  • 关键技术突破
    1. Batch Normalization:加速收敛,防止过拟合。
    2. 高分辨率微调:先在448x448图像上微调分类网络,提升检测精度。
    3. 多尺度训练(Multi-Scale Training):每隔10个batch随机缩放输入图像(320x320到608x608),增强模型鲁棒性。
    4. 维度聚类(Dimension Clusters):通过K-means聚类真实框尺寸,确定更合理的锚框比例。
    5. 细粒度特征融合:将浅层特征(26x26)与深层特征拼接,提升小目标检测。

输出与性能

  • 输入:416x416 → 输出13x13网格(每个网格预测5个锚框)。
  • mAP提升:从YOLOv1的63.4%提升到78.6%(VOC 2007)。

局限

  • 多尺度目标仍依赖锚框:预定义锚框可能不匹配特定场景。
  • 特征融合较简单:小目标检测仍有提升空间。

3. YOLOv3(2018):多尺度预测与深度网络

核心改进

  • 网络结构升级
    使用Darknet-53(53层卷积,含残差连接),平衡深度与速度。
  • 多尺度预测(FPN思想)
    在3个不同尺度的特征图上预测(13x13, 26x26, 52x52),分别负责大、中、小目标。
  • 关键技术突破
    1. 特征金字塔网络(FPN)通过上采样融合不同层特征,增强多尺度检测能力。
    2. 更丰富的锚框:每个尺度预测3种锚框(共9种尺寸),覆盖更多目标形状。
    3. 改进的损失函数
      使用二元交叉熵(代替Softmax)支持多标签分类(如“人”和“女人”可同时存在)。
    4. 更深的网络: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)
主要优势 速度快,简单 精度显著提升,保留速度 多尺度检测,复杂场景适应性强
典型问题 小目标漏检,定位粗糙 锚框依赖预定义尺寸 计算量增加,极端目标检测不足

演进逻辑解析

  1. 从直接回归到锚框
    YOLOv1直接预测坐标,灵活性差;v2引入锚框,通过偏移量预测提升定位精度。
  2. 从单尺度到多尺度
    v1的单一网格无法处理多尺度目标;v2通过多尺度训练增强鲁棒性;v3通过FPN实现真正的多尺度预测。
  3. 从浅层网络到深层网络
    Darknet-19到Darknet-53的演进,结合残差连接,平衡了深度与计算效率。
  4. 从分类到多标签
    v3使用二元交叉熵,支持同一目标多标签分类(如“车”和“出租车”),更贴近现实场景。

总结

  • YOLOv1:开创单阶段检测范式,奠定基础但精度受限。
  • YOLOv2:通过锚框和网络优化,实现速度与精度的平衡。
  • YOLOv3:引入多尺度预测和深度残差网络,显著提升复杂场景检测能力。
posted @ 2025-05-12 10:13  漫漫长夜何时休  阅读(320)  评论(0)    收藏  举报