一、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),避免因多数网格无物体导致位置误差被掩盖;其中w
和h
用平方根计算,减少小框位置误差的影响。 - 置信度误差:分 "有物体的网格" 和 "无物体的网格"------ 无物体的置信度误差权重 λ=0.5,避免模型过度倾向于预测 "无物体"。
- 分类误差:仅对 "有物体的网格" 计算类别概率误差。
(2)NMS(非极大值抑制):剔除重复检测框
由于每个网格输出 2 个边界框,且相邻网格可能检测同一物体,需要用 NMS 筛选:
- 对所有边界框按置信度排序,保留置信度最高的框。
- 计算剩余框与该框的 IOU,若 IOU 大于阈值(通常 0.5),则剔除(认为是重复框)。
- 重复上述步骤,得到最终检测结果。
4. YOLOv1 的优缺点:快是核心,但有明显局限
- 优点:速度快(实时检测首选)、架构简单(端到端训练易上手)、泛化性强(能检测训练集中未见过的物体类型)。
- 缺点 :
- 每个网格仅预测 1 个类别,若多个物体中心落在同一网格(如密集场景),会漏检或错检。
- 小物体检测效果差(网格划分较粗,7×7 网格难以捕捉小物体细节)。
- 边界框长宽比固定(仅 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) + Cx
,by = σ(ty) + Cy
(Cx、Cy 是网格左上角坐标)。 - 宽高:
bw = Pw×e^tw
,bh = 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 的迭代奠定了基础。