文章目录
1.论文信息
题目 | You Only Look Once: Unified, Real-Time Object Detection |
---|---|
作者 | Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi |
年份 | 2016 |
期刊 | CVPR |
论文地址 | https://arxiv.org/pdf/1506.02640.pdf |
项目地址 | https://pjreddie.com/darknet/yolo/ |
2. 论文创新点
- 区别于分类问题,采用回归问题,直接对输入图像应用算法并输出类别和bbox,检测速度非常快,可达实时;
- 使用全图作为背景信息,背景错误比较少;
- 可以学习到高度泛化的特征,泛化能力较强
3.欲解决的问题
- 先前的目标检测算法帧率无法达到实时
4.解决方案
4.1 概述
- 网络结构图如上所示。
- 首先,将输入图像resize到448x448大小作为神经网络的输入;
- 其次,运行卷积神经网络,输出bbox、bbox中包含目标的置信度以及类别概率;
- 最后,采用NMS筛选bbox。
4.2 Unified Detection
- 检测流程图如上所示。
- 将输入图像划分为SxS个网格(文中7x7),每个网格负责检测中心落在该网格的物体;每个网格预测B个bbox(文中为2)以及bbox包含目标的置信度
-
c
o
n
f
i
d
e
n
c
e
=
Pr
(
Object
)
∗
I
O
U
pred
truth
confidence=\operatorname{Pr}(\text {Object}) * I O U_{\text {pred}}^{\text {truth}}
confidence=Pr(Object)∗IOUpredtruth
其中, P r ( Object ) {Pr}(\text {Object}) Pr(Object)表示包含目标的概率;如果网格中不含目标,置信度为0;否则置信度是预测框与真值框的IOU - 每个bbox输出5个参数:x,y,w,h以及置信度
参数 | 含义 |
---|---|
(x,y) | 预测框中心与网格边界的相对距离 |
(w,h) | 预测框的宽高相对于整幅图像宽高的比例 |
置信度 | 预测框与真值框的IOU |
- 每个网格输出C个条件类别概率 Pr ( Class i ∣ Object ) \operatorname{Pr}\left(\text { Class }_{i} | \text { Object }\right) Pr( Class i∣ Object ),即在网格包含目标的前提下,目标属于某一类的概率
-
Pr
(
Class
i
∣
Object
)
∗
Pr
(
Object
)
∗
IOU
pred
truth
=
Pr
(
Class
i
)
∗
IOU
pred
truth
\operatorname{Pr}\left(\text { Class }_{i} | \text { Object }\right) * \operatorname{Pr}(\text { Object }) * \operatorname{IOU}_{\text {pred }}^{\text {truth }}=\operatorname{Pr}\left(\text { Class }_{i}\right) * \operatorname{IOU}_{\text {pred }}^{\text {truth }}
Pr( Class i∣ Object )∗Pr( Object )∗IOUpred truth =Pr( Class i)∗IOUpred truth
将网格的条件类别概率与bbox的置信度相乘,得到bbox的具体类别的置信度 - PASCAL VOC数据集中,S=7,B=2,C=20;因此最后张量大小为7x7x30(由 S × S × ( B ∗ 5 + C ) S \times S \times(B * 5+C) S×S×(B∗5+C)可得,其中5代表bbox的5个输出)
4.3 网络设计
- 网络结构图如上所示。
- 受GoogLeNet的启发,网络采用了24个卷积层和2个全连接层;卷积层用来提取特征,全连接层用来预测目标位置以及类别概率,没有采用Inception模块,采用了1x1以及3x3卷积层代替。
4.4 训练
- 首先,采用ImageNet1000比赛数据集预训练卷积层,使用网络的前20个卷积层、1个平均池化层以及1个全连接层作为预训练网络;
- 其次,将预训练的结果应用到检测中,加入剩下的4个卷积层以及2个全连接层,同时将输入图像的分辨率提升到448x448;
- 再次,将所有预测结果归一化,使用Leaky Relu作为激活函数;同时为了防止过拟合,在第一个全连接层后面加上一个比率为0.5的正则化层;
- 最后,为了提高精度,对原始图像做了数据增强。
4.5 损失函数
- 公式如上所示
- 对于8维的坐标预测,赋予大权重 λ coord \lambda_{\text {coord }} λcoord (文中取5);对于不含目标的bbox的置信度,赋予小权重 λ noobj \lambda_{\text {noobj }} λnoobj (文中取0.5);其余权重都取1;
- 其中, I 0 b j i j I \begin{array}{l}{0 \mathrm{bj}} \\ {i j}\end{array} I0bjij判断第i个网格中第j个bbox是否包含这个目标, I i 0 b j I_{i}^{0 b j} Ii0bj判断是否有目标中心落在第i个网格中;
- 小的预测框对IOU的影响更大,因此对宽高做开平方处理,如下图所示,当横轴发生一定位移时,纵轴位移小bbox比大bbox更大。
5.几点思考
5.1 损失函数为何不全部采用均方误差
- 8维的定位误差与20维的分类误差权值一样不合理;
- 不含目标的bbox的置信度为0,这些bbox占大多数,所以这些bbox对梯度更新的贡献会远远大于含有目标的bbox的贡献,这会导致网络的不稳定甚至不收敛
5.2 如何确定网格中有目标
- 网格是对输入图像(文中448x448)不断提取特征然后下采样得到,将图像划分为7x7个网格,输入图像的64个像素点就对应了一个网格;
- 根据目标的标注信息可以获得目标的中心点坐标在输入图像中的位置,即可以获得目标中心点属于哪个网格
6.论文结果
- 帧率45FPS;
- mAP在VOC2007为63.4%
7.待解决的问题
- 检测精度低于其他state-of-the-art目标检测算法;
- 容易产生目标的定位错误;
- 小目标检测效果一般,特别是密集的小目标,因为一个网格最多只能检测2个目标