文章目录
1. 论文主要内容
1.0. Abstract 摘要
-
提出了一种叫YOLO的目标检测算法,这种算法将检测问题看成是计算bounding boxes回归和class概率问题,这种end-to-end的方法一次性就可以实现边框和种类的预测。
-
速度相当快,可以达到45 frames per second。快速版网络是每秒155帧,mAP是其他实时检测方法的2倍。和其他的state-of-the-art detection systems方法对比,YOLO有更多的位置检测(指的是位置上下或者左右变差,即IOU比较小)错误,更少的误检(将背景检测成物体的情况)。YOLO和其他算法(DPM和R-CNN)相比可以学到更加通用的特征(就是泛化能力强的意思)。
1.1. Introduction 简介
人视觉是一眼就分辨出物体的,所以两阶段的检测方法不够合理,应该使用单阶段的检测方法。古老的DPM使用的是滑动窗口的检测方法,最近的(2016年的最近),像R-CNN使用region proposal的方法,他们都是先产生框,然后分类,之后再去除重复框。两阶段方法因为检测过程复杂(a complex pipeline)有两个缺点:检测时速度慢,训练时优化困难。
YOLO单阶段的检测方法(unified model),直接从像素点 一次性(同时) 预测出bounding box coordinates 和 class probabilities。这个方法有三个优点。
第一个,快(extremely fast)。Titan X 上是每秒45帧,0.025秒的延时。快版本(另一个小网络YOLO)可以实现150fps。
第二个,有全局特性(globally about the image/sees the entire image)。误检率只有R-CNN的一半。
第三个,泛化能力强(learns generalizable representations of objects)。在训练natural images和测试artwork时,YOLO的表现都比DPM和R-CNN好很多。
1.2. Unified Detection 单阶段检测
原文:
The Model. Our system models detection as a regres- sion problem. It divides the image into an S×S grid and for each grid cell predicts B bounding boxes, confidence for those boxes, and C class probabilities. These predictions are encoded as an S × S × (B ∗ 5 +C) tensor.
解读如下:
将图片均分成 7*7的网格(S × S grid),一共就有49个格子单元(grid cell),每个格子单元负责预测自己所在位置的物体,每一个物体都只使用一个格子单元来预测(grid cell is responsible for detecting that object)。S = 7
每一个格子单元预测2个方框(B bounding boxes)以及置信度(使用IOU表示),即Pr(Object) ∗ IOU,一共就有98个方框。如果这个方框框住了物体,置信度就是IOU的值,没有框柱就是0(其实也是IOU的值,没框柱IOU=0)。B = 2
一个方框需要预测5个数据来描述,即方框的位置信息(x, y, w, h)和置信度(confidence)。
一个网格单元有20个类别概率(C conditional class probabilities)即Pr(Classi|Object),这个类别概率只和物体种类有关,和B值无关。C = 20
测试时候的计算公式是:
Pr(Classi|Object) ∗ Pr(Object) ∗ IOU = Pr(Classi) ∗ IOU = 得分
Pr(Object) ∗ IOU:每一个方框是否包含物体,以及包含的程度(IOU),与物体种类(C = 20)无关。
Pr(Classi|Object):每一个网格单元是20种类别的概率,与方框(B=2)无关。
得分:同时表示了方框中的物体是20个类别的可能性,以及方框框的好不好的程度。可理解为类别概率 * IOU。
1.3. Network Design 网络设计
用神经网路实现的,其中24个卷积网络层提取特征,2个全连接层预测坐标和概率。最终输出是 7 * 7 * 30的张量。
快速版YOLO只使用了9个卷积层和更少的过滤器(fewer filter)。
1.4. Training 训练
在ImageNet 1000类竞赛上预训练,预训练时只使用前20层,后面接一个pool层和一个全连接层。预训练一个星期。
预训练完之后添加缺失4个卷积层和2个全连接层(这6个层赋值随机权重),把图片大小从 224 * 224 增大到 448 * 448 继续训练。
算法需要方框的坐标信息x,y,w,h都转换成0到1之间的数。x,y通过与特性网格单元的坐标计算得到0,1之间的数,w,h通过除以图片的宽度和高度得到0,1之间的数。
**函数使用的是:
Loss函数:
作者没有直接使用平方和误差的原因。第一个,直接使用平方和误差处理会将物体的种类误差和位置误差权重相同,实际上应该是有区别的。第二个,因为有大量网格单元没有物体,梯度计算过程就会更加偏重大量不重要的类别概率为0的,并偏轻少量重要的概率不为0的数据。
解决方法:为了平衡,作者在Loss中增加了坐标偏差的权重(λcoord = 5),减小了类别概率为0的权重(λnoobj =0.5)
作者没有直接使用平方和误差的原因。第三个,相同的距离偏差对不同大小的方框来说重要性是不相同的(同样的距离偏差对小方框的影响明显应该是大于对大方框的影响的),但这个特性没有在平方和误差中体现。
解决方法:作者提出了一个部分解决这个(partially address this)问题的方法,不直接使用宽度和高度计算平方和误差,而是先取宽度和高度根号后再计算平方和误差。(大于1的两个数分别开根号后,两者之间的差值会比原来小;小于1的两个数分别开根号后,两者之间的差值会比原来大,如4,9开根号前后的差是从5降到了1;0.09与0.04开根号前后的差是从0.05上升到了0.1)。