核心概述
- 论文名称:You Only Look Once: Unified, Real-Time Object Detection
- 核心创新:将目标检测重构为单阶段回归问题,单一卷积网络直接输出边界框坐标+类概率,端到端训练,实时性拉满
- 核心优势:速度快(基础版45FPS、Fast YOLO155FPS)、背景假阳性低、泛化能力强;不足:小目标检测差、定位误差较高
- 适用数据集:PASCAL VOC2007/2012(20类),输入尺寸固定为448×448
一、核心网络设计(论文2.1节)
1. 核心参数(固定)
S=7S=7S=7(图像划分为7×7网格)、B=2B=2B=2(每个网格预测2个边界框)、C=20C=20C=20(VOC20类别)
2. 输出张量
7×7×307×7×307×7×30(30=B×5+C30=B×5+C30=B×5+C,5为每个框的x/y/w/h/置信度,20为类概率)
3. 网络结构
- 基础版:24个卷积层(1×1降维+3×3卷积堆叠)+2个全连接层,基于Darknet框架
- Fast YOLO:9个卷积层,更少滤波器,速度更快、精度略降
- 激活函数:除最后一层线性激活 ,其余均为带泄漏ReLU (ϕ(x)=x(x>0),0.1x(x≤0)\phi(x)=x(x>0), 0.1x(x≤0)ϕ(x)=x(x>0),0.1x(x≤0))
4. 训练预处理
先在ImageNet上用224×224预训练前20个卷积层,再微调至448×448,添加4个卷积+2个全连接层
二、边界框坐标映射(核心!推理后处理)
1. 输出值定义(网络输出为相对值,范围0~1)
- bx/bybx/bybx/by:边界框中心相对于所在网格左上角的偏移量
- bw/bhbw/bhbw/bh:边界框宽高相对于整张图像的比例
- 置信度:Pr(Object)∗IOUpredtruthPr(Object)*IOU_{pred}^{truth}Pr(Object)∗IOUpredtruth,无目标为0,有目标为预测框与真实框的IOU
2. 映射公式(转原图绝对像素坐标)
设:原图宽imgwimg_wimgw、高imghimg_himgh;网格宽gridw=imgw/Sgrid_w=img_w/Sgridw=imgw/S、网格高gridh=imgh/Sgrid_h=img_h/Sgridh=imgh/S;目标网格为第iii行、第jjj列
- 框中心绝对坐标:centerx=(j+bx)∗gridwcenter_x=(j+bx)*grid_wcenterx=(j+bx)∗gridw、centery=(i+by)∗gridhcenter_y=(i+by)*grid_hcentery=(i+by)∗gridh
- 框宽高绝对像素:width=bw∗imgwwidth=bw*img_wwidth=bw∗imgw、height=bh∗imghheight=bh*img_hheight=bh∗imgh
- 可视化坐标转换:x1=centerx−width/2x1=center_x-width/2x1=centerx−width/2、y1=centery−height/2y1=center_y-height/2y1=centery−height/2、x2=centerx+width/2x2=center_x+width/2x2=centerx+width/2、y2=centery+height/2y2=center_y+height/2y2=centery+height/2(需限制0~img_w/img_h)
3. 关键后处理
非极大值抑制(NMS):IOU阈值0.3,消除同一目标的重复检测框,可提升23% mAP
三、损失函数(论文2.2节,多部分加权损失)
1. 设计痛点解决
- 类别不平衡:用λcoord=5\lambda_{coord}=5λcoord=5(提升坐标损失权重)、λnoobj=0.5\lambda_{noobj}=0.5λnoobj=0.5(降低无目标置信度损失权重)
- 尺度敏感性:预测w/h\sqrt{w}/\sqrt{h}w /h 而非w/h,缓解小框误差对IOU的影响
- 多框分配:每个网格仅让与真实框IOU最高的边界框负责检测,实现框的专门化
2. 损失函数公式(核心五部分)
Loss=λcoord∑∑1ijobj[(x−x^)2+(y−y^)2]+λcoord∑∑1ijobj[(w−w^)2+(h−h^)2]+∑∑1ijobj(C−C^)2+λnoobj∑∑1ijnoobj(C−C^)2+∑1iobj∑c(p(c)−p^(c))2 \begin{aligned} Loss&= \lambda_{coord} \sum\sum \mathbb{1}{ij}^{obj}[(x-\hat{x})^2+(y-\hat{y})^2] \\ &+ \lambda{coord} \sum\sum \mathbb{1}{ij}^{obj}[(\sqrt{w}-\sqrt{\hat{w}})^2+(\sqrt{h}-\sqrt{\hat{h}})^2] \\ &+ \sum\sum \mathbb{1}{ij}^{obj}(C-\hat{C})^2 \\ &+ \lambda_{noobj} \sum\sum \mathbb{1}_{ij}^{noobj}(C-\hat{C})^2 \\ &+ \sum \mathbb{1}i^{obj} \sum{c}(p(c)-\hat{p}(c))^2 \end{aligned} Loss=λcoord∑∑1ijobj[(x−x^)2+(y−y^)2]+λcoord∑∑1ijobj[(w −w^ )2+(h −h^ )2]+∑∑1ijobj(C−C^)2+λnoobj∑∑1ijnoobj(C−C^)2+∑1iobjc∑(p(c)−p^(c))2
- 1ijobj\mathbb{1}_{ij}^{obj}1ijobj:网格i的第j个框是否负责检测目标(是为1,否为0)
- 1ijnoobj\mathbb{1}_{ij}^{noobj}1ijnoobj:网格i的第j个框是否无目标(是为1,否为0)
- 仅对有目标的网格 计算类概率损失,仅对负责的框计算坐标损失
四、mAP计算(论文核心评估指标,VOC2007标准)
1. 核心前提
- IOU阈值:0.5(检测框与真实框IOU≥0.5为有效匹配)
- 评估逻辑:先算单个类别AP ,再对20类AP取算术平均得mAP
- 排序规则:同一类别检测框按置信度从高到低排序
2. 基础指标定义(目标检测仅统计TP/FP)
- TP(真阳性):类别正确+IOU≥0.5+匹配未被匹配过的真实框
- FP(假阳性):类别错误/IOU<0.5/匹配已被匹配的真实框/无对应真实框
- 召回率:Recall=TP/GTtotalRecall=TP/GT_{total}Recall=TP/GTtotal(真实框中被检测出的比例,单调不减)
- 精确率:Precision=TP/(TP+FP)Precision=TP/(TP+FP)Precision=TP/(TP+FP)(检测结果中正确的比例,单调不增)
3. 11点插值法计算AP(YOLOv1采用,VOC经典方法)
- 对排序后的检测框统计累计TP/FP,计算Recall、Precision数组
- 取召回率11个等距阈值:t∈[0,0.1,0.2,...,1.0]t∈[0,0.1,0.2,...,1.0]t∈[0,0.1,0.2,...,1.0]
- 对每个t,取Recall≥t时的最大Precision作为该点插值值
- AP=1/11×∑AP=1/11 × \sumAP=1/11×∑ 11个插值值
4. 最终mAP
mAP=(∑i=120APi)/20mAP=(\sum_{i=1}^{20}AP_i)/20mAP=(∑i=120APi)/20(YOLOv1在VOC2007上mAP=63.4%,Fast YOLO=52.7%)
五、关键实验结果(论文4节)
1. 速度&精度对比(VOC2007,Titan X GPU)
| 模型 | mAP | FPS |
|---|---|---|
| YOLOv1 | 63.4% | 45 |
| Fast YOLO | 52.7% | 155 |
| Faster R-CNN VGG16 | 73.2% | 7 |
2. 误差分析(与Fast R-CNN对比)
- YOLOv1:主要误差为**定位误差(19%)**,背景假阳性低(4.75%)
- Fast R-CNN:定位误差低(8.6%),背景假阳性高(13.6%)
3. 模型融合
YOLOv1+Fast R-CNN可将Fast R-CNN的mAP从71.8%提升至75.0%,利用YOLO低背景假阳性优势优化
4. 泛化能力
在艺术作品(毕加索数据集/People-Art)的行人检测中,性能衰减远小于R-CNN/DPM,因学习了目标的尺寸/形状/空间关系通用特征
六、代码资源&关键文件
1. 官方代码(Darknet框架,C/CUDA)
仓库地址:https://github.com/pjreddie/darknet
关键文件:
cfg/yolo.cfg:YOLOv1网络配置(7×7×30输出)src/yolo_layer.c:边界框解码/坐标映射src/loss.c:多部分损失函数实现scripts/voc_label.py:VOC数据集格式转换- 预训练权重:yolo-voc.weights(VOC2007+2012)、fast-yolo-voc.weights
2. Python复现(易调试,PyTorch)
仓库地址:https://github.com/ayooshkathuria/pytorch-yolo-v1
包含完整的网络实现、mAP计算、VOC数据集加载,直接适配论文实验
七、核心局限性(论文2.4节)
- 空间约束:7×7网格+每个网格1个类别,无法检测密集小目标(如鸟群)
- 尺度泛化差:难以适应未见过的目标宽高比/形态
- 特征粒度粗:多次下采样,依赖低粒度特征,定位精度有限
- 损失函数:平方和误差对大小框误差同等加权,小框微小偏差影响更大