YOLOv1 与 YOLOv2 核心笔记:从单阶段检测开创到性能升级
YOLOv1 与 YOLOv2 核心笔记:从单阶段检测开创到性能升级
YOLO 系列是单阶段目标检测的里程碑,YOLOv1 开创 “端到端回归” 新思路,YOLOv2 则通过多维度优化实现 “更快、更强” 的检测效果。这份笔记系统梳理两代模型的核心设计、网络架构、缺陷与改进,清晰呈现技术迭代逻辑。
一、YOLOv1:单阶段目标检测的开创者
YOLOv1(2015 年提出)首次将目标检测任务转化为端到端的回归问题,用一个 CNN 网络同时预测物体类别与边界框,实现实时检测,奠定单阶段算法的基础。
1. 核心设计理念
- “You Only Look Once”:输入图像仅经过一次 CNN 前向传播,即可输出所有物体的类别与位置,无需生成候选区域(区别于 Two-Stage 算法);
- 检测任务回归化:不区分 “分类” 与 “定位” 子任务,直接预测边界框坐标(x,y,w,h)、置信度及类别概率,用一个损失函数统一优化;
- 实时性优势:推理速度达 45 FPS(CPU)、155 FPS(GPU),远超同期 Faster R-CNN(5 FPS),可应用于视频实时检测。
2. 网络架构与输出解读
(1)网络结构(基于 GoogLeNet 改进)
- 输入:448×448×3 RGB 图像(训练前期用 224×224 预训练分类,后期微调 448×448 适配检测);
- 特征提取:20 层卷积层(含 5 层最大池化)+2 层全连接层,逐步压缩特征图尺寸;
- 输出:7×7×30 的张量,对应 “7×7 网格” 的检测结果,具体维度含义如下:
- 7×7 网格:将输入图像划分为 7×7 个网格,每个网格负责检测 “中心落在该网格内” 的物体;
- 每个网格输出 30 维向量:包含 2 个边界框(B=2)+20 个类别概率(VOC 数据集 20 类),即:
- 2 个边界框:每个边界框含 5 个参数(x,y,w,h,c),共 2×5=10 维;
- x,y:边界框中心相对于网格左上角的偏移量(归一化到 0~1);
- w,h:边界框宽高相对于整幅图像的比例(归一化到 0~1);
- c:边界框置信度(反映 “框内有物体” 的概率与 IoU 的乘积);
- 20 个类别概率:网格包含某类物体的概率(条件概率,基于 “框内有物体”)。
- 2 个边界框:每个边界框含 5 个参数(x,y,w,h,c),共 2×5=10 维;
(2)输出公式
输出张量维度满足:S×S×(B×5+C)
,其中:
- S=7(网格数量),B=2(每个网格的边界框数),C=20(类别数);
- 代入得:7×7×(2×5+20)=7×7×30,与网络输出一致。
3. 损失函数:多任务统一优化
损失函数通过加权求和,平衡 “位置回归”“置信度”“类别预测” 三类误差,避免某类误差主导优化:
- 位置误差:仅对 “负责检测物体的边界框”(与 GT IoU 最大的框)计算,用平方误差优化 x,y,w,h;为避免大框小误差、小框大误差的不平衡,对 w,h 取平方根后计算;
- 置信度误差:
- 含物体的网格:优化预测置信度与 “GT IoU” 的误差,权重 λ_coord=5(提升位置精度);
- 不含物体的网格:优化预测置信度与 0 的误差,权重 λ_noobj=0.5(减少背景误检);
- 类别误差:仅对 “含物体的网格” 计算,优化预测类别概率与真实类别的平方误差。
4. 后处理:NMS(非极大值抑制)
YOLOv1 输出 7×7×2=98 个边界框,需通过 NMS 过滤重复框:
- 过滤置信度低于阈值(如 0.2)的框;
- 按置信度降序排列剩余框;
- 选取置信度最高的框 A,删除与 A 的 IoU > 阈值(如 0.5)的其他框;
- 重复步骤 3,直到候选框为空,输出最终检测结果。
5. 优势与缺陷
(1)优势
- 速度快:端到端架构,无候选区域生成步骤,实时性领先同期算法;
- 泛化能力强:对 unseen 数据(如艺术画、漫画)的检测效果优于 Two-Stage 算法,不易过拟合。
(2)核心缺陷
- 小物体检测差:7×7 网格粒度粗,小物体(如远处的行人)中心易落在同一网格,每个网格仅预测 1 个类别,无法区分重叠小物体;
- 边界框预测粗糙:每个网格仅 2 个边界框,且长宽比固定,对不规则形状物体适配性差;
- 定位精度低:相较于 Two-Stage 算法(如 Faster R-CNN),mAP 较低(VOC 2007 数据集 mAP=63.4%)。
二、YOLOv2:针对 v1 缺陷的全面升级
YOLOv2(2016 年提出)围绕 “提升精度、保持速度” 目标,通过 10 项改进实现性能飞跃,在 VOC 2007 数据集 mAP 提升至 78.6%,同时保持实时性(67 FPS)。
1. 核心改进:10 项优化措施
(1)Batch Normalization(批量归一化)
- 改进:移除 v1 的 Dropout,所有卷积层后添加 BN 层;
- 作用:归一化每层输入分布,加速模型收敛,减少过拟合,提升 2% mAP;
- 现状:已成为 CNN 网络的标准组件,几乎所有检测模型均采用。
(2)高分辨率微调(Hi-Res Classifier)
- v1 缺陷:训练前期用 224×224 预训练分类,测试时突然切换到 448×448,模型 “水土不服”;
- 改进:预训练后,用 448×448 图像额外微调 10 轮,让模型适应高分辨率输入;
- 效果:提升 4% mAP,增强小物体细节捕捉能力。
(3)新网络架构:DarkNet-19
- v1 缺陷:基于 GoogLeNet,全连接层参数量大,易过拟合;
- 改进:设计 DarkNet-19 网络,含 19 层卷积层 + 5 层最大池化层,无全连接层:
- 用 1×1 卷积压缩通道数(减少参数量),3×3 卷积提取特征;
- 输入尺寸改为 416×416(32 的倍数,便于后续降采样),最终输出 13×13 特征图(5 次降采样:416→208→104→52→26→13);
- 优势:参数量比 v1 减少,推理速度更快,特征提取能力更强。
(4)Anchor Box(锚框)引入
- v1 缺陷:每个网格仅 2 个边界框,依赖网络直接回归坐标,对新数据集适配性差;
- 改进:借鉴 Faster R-CNN 的 Anchor 机制,通过K-Means 聚类生成适配数据集的先验框:
- 聚类距离公式:用
d(box, centroid)=1-IoU(box, centroid)
替代欧氏距离,避免大框对聚类结果的主导; - 聚类结果:VOC 数据集聚类出 5 个先验框,COCO 数据集聚类出 9 个,覆盖不同尺寸与长宽比;
- 聚类距离公式:用
- 效果:边界框预测数量从 v1 的 98 个(7×7×2)提升至 169 个(13×13×1),召回率从 81% 提升至 88%。
(5)直接位置预测(Directed Location Prediction)
- v1 缺陷:直接预测边界框坐标偏移量,易导致坐标超出图像范围,模型收敛不稳定;
- 改进:预测 “相对于网格的偏移量”,并用 σ 函数限制在 0~1:
- 设网格左上角坐标为(Cx, Cy),先验框宽高为(Pw, Ph),模型预测(tx, ty, tw, th);
- 边界框最终坐标计算:
- \(b_x = σ(t_x) + C_x\)(σ(tx) 将偏移量限制在 0~1,确保 bx 在当前网格内);
- \(b_y = σ(t_y) + C_y\);
- \(b_w = P_w × e^{t_w}\)(指数确保宽高为正);
- \(b_h = P_h × e^{t_h}\);
- 最终坐标再乘以 “特征图与原图的缩放比”(如 32,416/13=32),映射回原图尺寸;
- 效果:避免坐标越界,模型收敛速度提升,定位精度更高。
(6)细粒度特征融合(Fine-Grained Features)
- v1 缺陷:最终特征图(7×7)感受野大,小物体特征易丢失;
- 改进:引入 “Passthrough 层”,将浅层 13×13×256 特征图与深层 26×26×128 特征图融合:
- 浅层特征图通过 “拆分堆叠”(将 26×26×128 拆分为 13×13×4×128=13×13×512),与深层 13×13×1024 特征图拼接为 13×13×1536;
- 效果:融合浅层细节特征与深层语义特征,提升小物体检测精度。
(7)多尺度训练(Multi-Scale Training)
- 改进:训练过程中,每 10 轮随机调整输入图像尺寸(32 的倍数),范围 320×320~608×608;
- 作用:迫使模型适应不同尺度的物体,增强泛化能力,对大 / 小物体检测均有提升;
- 注意:输入尺寸变化时,特征图尺寸同步变化(如 320×320→10×10 特征图,608×608→19×10 特征图),DarkNet-19 的全卷积架构确保适配。
2. 关键概念:感受野(Receptive Field)
YOLOv2 的 DarkNet-19 大量使用 “小卷积核堆叠”,核心依赖 “感受野” 原理:
- 定义:特征图上的一个像素,对应原始图像的区域大小,即 “该像素能‘看到’的原始图像范围”;
- 小卷积核优势:3 个 3×3 卷积核堆叠(步长 1)的感受野 = 7×7,与 1 个 7×7 卷积核相同,但参数量更少(27C² vs 49C²,C 为通道数),且多轮非线性激活(ReLU)能提取更细致的特征;
- DarkNet-19 应用:通过堆叠 3×3 卷积核,在减少参数量的同时,保证足够大的感受野(适配 416×416 输入)。
3. YOLOv2 vs YOLOv1:性能对比
指标 | YOLOv1(VOC 2007) | YOLOv2(VOC 2007) | 提升幅度 |
---|---|---|---|
mAP(平均精度) | 63.4% | 78.6% | +15.2% |
推理速度(GPU) | 45 FPS | 67 FPS | +22 FPS |
小物体检测能力 | 弱 | 强 | - |
边界框预测数量 | 98 个 | 169 个(13×13×1) | +71 个 |