从 YOLOv1 到 YOLOv2

一、YOLOv1:把检测变成 "回归问题" 的开创性尝试

YOLOv1 的核心魅力在于 "简单直接"------ 如其名 "You Only Look Once",用一个 CNN 网络就能完成从 "输入图像" 到 "边界框 + 类别" 的端到端预测,彻底跳过了 "生成候选框" 的步骤。

1. 核心思想:网格划分 + 回归预测

YOLOv1 将输入图像(448×448×3)划分为7×7 的网格(S×S),每个网格负责检测 "中心落在该网格内" 的物体。每个网格会输出:

  • 2 个边界框(Bounding Box,B=2),每个边界框包含 5 个参数:(x,y,w,h,c)。其中(x,y)是边界框中心相对于网格的偏移量,(w,h)是边界框宽高相对于整幅图像的比例,c是置信度(表示框内有物体的概率 × 框与物体的 IOU)。
  • 20 个类别概率(对应 PASCAL VOC 数据集的 20 类),表示网格内物体属于某类的概率。

最终网络输出一个7×7×30 的张量,计算逻辑是:S×S×(B×5 + C)(C=20 类,B=2,即 7×7×(2×5+20)=7×7×30)。

2. 网络架构:基于 GoogLeNet 修改,无全连接层冗余

YOLOv1 的网络基于 GoogLeNet 改进,共 20 层卷积层(提取特征)+2 层全连接层(输出预测结果),关键设计:

  • 输入图像先缩放到 448×448,经过多轮 "卷积 + ReLU" 提取特征,中间用最大池化(MaxPool)降采样。
  • 最后通过全连接层将特征映射为 7×7×30 的张量,没有多余的候选框生成模块,速度极快(实测 FPS 达 58,远超当时的 Faster R-CNN)。

3. 关键细节:损失函数与 NMS

(1)损失函数:分模块优化误差

为了平衡 "位置预测""置信度""类别概率" 的误差,YOLOv1 的损失函数做了针对性设计:

  • 位置误差 :对边界框的(x,y,w,h)误差加权(权重 λ=5),避免因多数网格无物体导致位置误差被掩盖;其中wh用平方根计算,减少小框位置误差的影响。
  • 置信度误差:分 "有物体的网格" 和 "无物体的网格"------ 无物体的置信度误差权重 λ=0.5,避免模型过度倾向于预测 "无物体"。
  • 分类误差:仅对 "有物体的网格" 计算类别概率误差。
(2)NMS(非极大值抑制):剔除重复检测框

由于每个网格输出 2 个边界框,且相邻网格可能检测同一物体,需要用 NMS 筛选:

  • 对所有边界框按置信度排序,保留置信度最高的框。
  • 计算剩余框与该框的 IOU,若 IOU 大于阈值(通常 0.5),则剔除(认为是重复框)。
  • 重复上述步骤,得到最终检测结果。

4. YOLOv1 的优缺点:快是核心,但有明显局限

  • 优点:速度快(实时检测首选)、架构简单(端到端训练易上手)、泛化性强(能检测训练集中未见过的物体类型)。
  • 缺点
    1. 每个网格仅预测 1 个类别,若多个物体中心落在同一网格(如密集场景),会漏检或错检。
    2. 小物体检测效果差(网格划分较粗,7×7 网格难以捕捉小物体细节)。
    3. 边界框长宽比固定(仅 2 个框),对不规则形状物体适配性低。

二、YOLOv2:针对性补短板,实现 "更快更强" 的升级

YOLOv2 的目标很明确 ------ 解决 YOLOv1 的痛点,同时保持实时性。最终在 VOC2007 数据集上,mAP 从 v1 的 63.4 提升到 78.6,且速度未降,堪称 "全面进化"。下面拆解它的 8 大核心改进:

1. Batch Normalization(批量归一化):提升收敛性与精度

  • 改进点:去掉 YOLOv1 的 Dropout(避免过拟合效果有限),在每一层卷积后加入 BN 层,对输入特征归一化。
  • 效果:网络收敛更快,无需手动调参;mAP 直接提升 2%,且成为后续 CNN 网络的 "标配"。

2. 高分辨率训练:解决 "训练 - 测试分辨率不匹配"

  • YOLOv1 的问题:训练时用 224×224 图像(适配 ImageNet 预训练),测试时突然切换到 448×448,模型 "水土不服"。
  • 改进点:先在 224×224 上预训练分类网络,再用 448×448 图像微调 10 轮,让模型适应高分辨率特征。
  • 效果:mAP 提升约 4%,小物体细节捕捉更准。

3. 新网络架构 DarkNet-19:更轻量,特征提取更强

  • 改进点 :替换 YOLOv1 的 GoogLeNet,设计 19 层卷积 + 5 层池化的 DarkNet-19:
    • 用 1×1 卷积压缩通道数(减少参数,降低计算量),再用 3×3 卷积提取特征。
    • 去掉全连接层,最终输出 13×13 的特征图(5 次降采样,比 v1 的 7×7 更细,适配小物体)。
  • 优势:参数更少(比 v1 轻量),特征提取能力更强,为后续改进打下基础。

4. 聚类生成先验框:适配数据集,比手动选框更优

  • YOLOv1 的问题:边界框长宽比手动设定,不一定适配数据集。
  • 改进点:用 K-means 聚类分析训练集中的边界框,以 "1-IOU" 为距离 metric(避免 IOU 小的框被误判为相似),最终选 5 个聚类中心作为 "先验框"(Anchor Box)。
  • 效果:先验框更贴合数据分布,检测召回率提升(后续引入 Anchor 后,召回率从 81% 到 88%)。

5. 引入 Anchor Box:增加检测框数量,解决 "多物体重叠"

  • 改进点 :在 DarkNet-19 输出的 13×13 特征图上,每个网格对应 5 个 Anchor Box,每个 Anchor 预测(tx,ty,tw,th,c)+ 类别概率,最终检测框数量从 v1 的 7×7×2=98 个,提升到 13×13×5=845 个。
  • 区别于 Faster R-CNN:Anchor Box 通过聚类生成,而非手动设定固定比例,适配性更强。

6. Directed Location Prediction(定向位置预测):避免收敛不稳定

  • YOLOv1 的问题:直接预测边界框中心相对于图像的偏移,可能导致坐标超出图像范围,模型收敛难。
  • 改进点 :预测边界框中心相对于 "网格左上角" 的偏移,并用 Sigmoid 函数(σ)将偏移量限制在 0-1 之间(确保中心落在当前网格内):
    • 公式:bx = σ(tx) + Cxby = σ(ty) + Cy(Cx、Cy 是网格左上角坐标)。
    • 宽高:bw = Pw×e^twbh = Ph×e^th(Pw、Ph 是 Anchor 的宽高,避免负数)。
  • 效果:坐标预测更稳定,模型收敛速度加快。

7. Fine-Grained Features(细粒度特征融合):提升小物体检测

  • 问题:DarkNet-19 深层特征图(13×13)感受野大,适合大物体,但小物体特征易丢失。
  • 改进点:融合浅层 16×16 特征图(感受野小,细节丰富)与深层 13×13 特征图,通过 "拆分 - 叠加" 操作,让模型同时捕捉小物体细节和大物体上下文。

8. Multi-Scale 训练:动态适配不同尺度物体

  • 改进点:训练时每 10 轮随机改变输入图像尺寸(32 的倍数,从 320×320 到 608×608),迫使模型适应不同尺度的物体。
  • 优势:模型鲁棒性更强,既能检测小物体(320×320 输入,特征图更细),也能检测大物体(608×608 输入,感受野更大)。

三、总结:YOLOv1 到 v2 的演进逻辑 ------ 解决痛点,守住核心

YOLO 系列的早期成功,本质是 "围绕实时性,逐步补全精度短板":

  • YOLOv1:开创 one-stage 检测范式,用 "回归思维" 简化检测流程,核心是 "快",但受限于网格划分、边界框数量,精度有瓶颈。
  • YOLOv2:针对性解决 v1 的小物体检测差、多物体重叠漏检、收敛不稳定等问题,通过 Anchor、特征融合、Multi-Scale 等改进,实现 "精度提升 + 速度保持",为后续 YOLOv3、v5 的迭代奠定了基础。
相关推荐
newxtc5 小时前
【 广州产权交易所-注册安全分析报告-无验证方式导致安全隐患】
开发语言·人工智能·selenium·安全·yolo
weixin_418007605 小时前
用opencv来识别信用卡的号码 Vs 使用yolo+paddleocr
人工智能·opencv·yolo
起个名字费劲死了9 小时前
Pytorch Yolov11目标检测+Android部署 留贴记录
pytorch·yolo·目标检测·安卓
甜辣uu19 小时前
【源码讲解+复现】YOLOv10: Real-Time End-to-End Object Detection
人工智能·yolo·目标检测·nms-free
程序猿小D1 天前
【完整源码+数据集+部署教程】 【运输&加载码头】仓库新卸物料检测系统源码&数据集全套:改进yolo11-DRBNCSPELAN
python·yolo·计算机视觉·目标跟踪·数据集·yolo11·仓库新卸物料检测系统
飞翔的佩奇1 天前
【完整源码+数据集+部署教程】烟叶植株计数与分类系统源码和数据集:改进yolo11-TADDH
python·yolo·计算机视觉·目标跟踪·分类·数据集·yolo11
程序猿小D1 天前
【完整源码+数据集+部署教程】 【零售和消费品&存货】【无人零售】自动售卖机饮料检测系统源码&数据集全套:改进yolo11-KernelWarehouse
python·yolo·计算机视觉·目标跟踪·数据集·yolo11·自动售卖机饮料检测系统
程序猿小D1 天前
【完整源码+数据集+部署教程】 【零售和消费品&存货】条形码检测系统源码&数据集全套:改进yolo11-TADDH
python·yolo·计算机视觉·目标跟踪·数据集·yolo11·条形码检测系统
zy_destiny2 天前
【工业场景】用YOLOv8实现抽烟识别
人工智能·python·算法·yolo·机器学习·计算机视觉·目标跟踪