论文原文链接:https://www.computer.org/csdl/proceedings/cvpr/2016/8851/00/8851a779-abs.html
摘要
我们提出了YOLO网络,它是一种新的目标检测方法。之前方法将目标检测问题转化成分类问题来处理。在这篇文章中,我们把边界框回归和对应的目标分类统一成一个回归问题,即用一个单一的网络直接从一整张图片中预测出边界框和类别概率信息。由于整个检测流程是一个单一网络,它可以在检测任务上端到端地训练。
我们的检测框架非常快。我们的基本YOLO模型处理图片的速度可以达到每秒45帧的实时速度。一个更小的Fast YOLO网络,处理图片的速度可以达到每秒155帧,而它检测的mAP值是其他实时检测模型的2倍。相比于目前最好的检测系统,YOLO模型虽然有更大的定位误差,却对背景有更低的假正率。最终YOLO模型可以学到目标非常一般的特征。在从自然图片转化到其他领域的图片(如艺术品)上时,YOLO网络的性能要比其他的方法更好(包括DPM和R-CNN)。
动机
以R-CNN为代表的一系列检测算法需要先生成候选区域再对每个候选区域进行分类(类别预测)和回归(边界框回归),这样做虽然检测精度比较高,但检测速度却慢了很多。(在使用GPU时,基于ZF网络的Faster R-CNN的检测速度大约为18 fps,而YOLO模型的检测速度可以达到45-155 fps)
模型
YOLO模型的输入是一整张图片,首先将输入图片划分成S×S的小块(论文中S=7),对于每一个小块,都预测一个目标类别(softmax类别,假设类别数为C)和B个边界框(B个边界框对应同一个目标,论文中B=2),每个边界框用坐标信息和置信度来刻画(一共5个值),所以,最终模型一共会输出S×S×(B×5+C)。
在网络实现上,YOLO 模型是一个完整的卷积神经网络,如下:
上图所示的YOLO网络的输入图像大小为448×448×3,经过24个卷积层和2个全连接层后输出一个大小为7×7×30的张量。其中7×7对应上文中提到的S,30=C+B×(4+1)=20+2×(4+1),对应每一个小块上的输出向量,包含了该小块上的目标信息(类别、位置、置信度),因为该模型是用在VOC数据集上的,所以类别数C=20。
模型了解之后,下面就是损失函数的构造。从上面的分析中可以看初,损失函数应包含3部分:类别损失、位置损失、置信度损失。为了方便训练,作者采用了平方和损失函数,如下:
首先是位置损失,位置采用左上角的坐标和长宽表示,为了平衡大的边界框和小的边界框对损失的影响,作者用 w i \sqrt{w_i} wi和 h i \sqrt{h_i} hi来代替原来的宽和高;对于置信度损失,考虑到数据集中背景的数量要远大于目标的数量,通过引入 λ n o o b j \lambda_{noobj} λnoobj来平衡。对于类别损失,由于每个小块对应的 B B B个边界框都预测同一类目标,因此在类别损失中没有对每个小块中边界框求和这一项。
YOLO模型的这种设计最大的优点是模型结构简单,速度快。但也有其不足之处:
- 模型对于划分的每一个小块只预测一类目标,当有多个类别的目标离得很近的时候,YOLO模型很难同时预测出来;
- 由于YOLO是从图像的像素信息进行端到端直接预测出位置信息(没有候选框提取过程),因此当目标的长宽比等发生变化时,可能会对预测造成困难;
- 尽管采用了 w i \sqrt{w_i} wi和 h i \sqrt{h_i} hi,但还是不能很好地平衡不同大小的边界框的损失。作者在文中也提到,主要的误差来源是位置误差。
实验结果
可以看出,相比于R-CNN系列检测算法,YOLO模型的优势主要体现在速度上,最快的YOLO模型在GPU上可以达到155fps的检测速度,可以说是非常可观的。