You Only Look Once: Unified, Real-Time Object Detection (CVPR 2016)
Joseph Redmon, Santosh Divvala, Ross Girshic, Ali Farhadi
YOLO是继RCNN,fast-RCNN 和 faster-RCNN之后全新的one-stage目标检测框架
- Joseph Redmon: University of Washington, yolo + yolo9000 + yolov3
- Ross Girshick: Facebook, rbg大神,rcnn + fast-rcnn + faster-rcnn
Abstract
以前的目标检测工作重新利用分类器来执行检测。相反,我们将目标检测框架看作回归问题从空间上分割边界框和相关的类别概率。单个神经网络在一次评估中直接从完整图像上预测边界框和类别概率,可以实现端到端的训练和优化
1. Introduction
作者在YOLO算法中把物体检测(object detection)问题处理成回归问题,用一个卷积神经网络结构就可以从输入图像直接预测bounding box和类别概率。
- 速度快,将检测视为回归问题,可以达到45fps,Fast YOLO可以到达155fps
- YOLO是基于图像的全局信息进行预测的。这一点和基于sliding window以及region proposal等检测算法不一样。与Fast R-CNN相比,YOLO在误检测(将背景检测为物体)方面的错误率能降低一半多。
- YOLO可以学到物体的generalizable representations。可以理解为泛化能力强。
YOLO在精度上仍然落后于最先进的检测系统。虽然它可以快速识别图像中的目标,但一些目标的定位还不够精确,尤其是小的目标。
2. Unified Detection
YOLO结构上主要的特点就是 unified detection,不再是原来许多步骤组成的物体检测,这使得模型的运行速度快,可以直接学习图像的全局信息,且可以end-to-end训练。
将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。
每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。
这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,定义为:
如果没有object存在,那么confidence score应当是0,否则我们希望confidence score应该等于该box的IOU值
每个bounding box要预测(x, y, w, h)和confidence共5个值,x,y就是bounding box的中心坐标,与grid cell对齐(即相对于当前grid cell的偏移值),使得范围变成0到1;w和h进行归一化(分别除以图像的w和h,这样最后的w和h就在0到1范围).
每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。
注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的。在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:
等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。
得到每个box的class-specific
confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。
文章采用了PASCAL VOC数据集, 图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。
2.1 Network Design
YOLO的卷积层结构借鉴于GoogLeNet,下图即 YOLO神经网络结构。
- 前面是24层卷积神经网络,如下图,最终输出为7*7*1024的特征图。
- 后面是2层全连接网络。
- 第一层全连接输入7*7*1024,输出4096。
- 第二层全连接输入4096,输出7*7*30。
2.2 Training
YOLO 在 ImageNet
1000-class 的分类任务数据集 上进行 pretraining。预训练的网络是 Figure 3 中网络的前 20 层卷积层,加上一个 average-pooling layer,最后是一个 fully connected layer。
最后的输出中,包含了类别预测、box坐标预测,box confidence预测,需要设计损失函数,让三方面得到很好的平衡。
第一,8维的localization error和20维的classification error同等重要显然是不合理的;
- 更重视8维的坐标预测,给这些损失前面赋予更大的loss weight, 记为在pascal VOC训练中取5。
第二,如果一个网格中没有object(一幅图中这种网格很多),那么就会将这些网格中的box的confidence push到0,相比于较少的有object的网格,这种做法是overpowering的,这会导致网络不稳定甚至发散。
- 对没有object的box的confidence loss,赋予小的loss weight,记为在pascal VOC训练中取0.5。
第三, 对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。
- 将box的width和height取平方根代替原本的height和width,可缓解这一问题。
第四,一个网格预测多个bounding box,在训练时我们希望每个object(ground true box)只有一个bounding box专门负责(一个object 一个bbox)。具体做法是与ground true box(object)的IOU最大的bounding box 负责该ground true box(object)的预测。这种做法称作bounding box predictor的specialization(专职化)。每个预测器会对特定(sizes,aspect ratio or classed of object)的ground true box预测的越来越好。
训练的时候:输入N个图像,每个图像包含M个objec,每个object包含4个坐标(x,y,w,h)和1个label。然后通过网络得到7730大小的三维矩阵。每个1*30的向量前5个元素表示第一个bounding box的4个坐标和1个confidence,第6到10元素表示第二个bounding box的4个坐标和1个confidence。最后20个表示这个grid cell所属类别。注意这30个都是预测的结果。然后就可以计算损失函数的第一、二 、五行。至于第二三行,confidence可以根据ground truth和预测的bounding box计算出的IOU和是否有object的0,1值相乘得到。真实的confidence是0或1值,即有object则为1,没有object则为0。 这样就能计算出loss function的值了。
测试的时候:输入一张图像,跑到网络的末端得到7730的三维矩阵,这里虽然没有计算IOU,但是由训练好的权重已经直接计算出了bounding box的confidence。然后再跟预测的类别概率相乘就得到每个bounding box属于哪一类的概率。
2.4 Limitations of YOLO
YOLO对相互靠的很近的物体,还有很小的群体检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。
对测试图像中,同一类物体出现的新的不常见的长宽比和其他情况是。泛化能力偏弱。
由于损失函数的问题,定位误差是影响检测效果的主要原因。尤其是大小物体的处理上,还有待加强。
论文给出了YOLO与Fast RCNN的对比图,YOLO的定位准确率相对于fast rcnn比较差。但是YOLO对背景的误判率比Fast RCNN的误判率低很多。这说明了YOLO中把物体检测的思路转成回归问题的思路有较好的准确率,但是bounding box的定位不是很好。
总结
要解决什么问题?
- 对于物体检测任务,快速算法的性能低;性能高的算法(如R-CNN系)不能达到实时性的要求。
- 之前物体检测任务主要分为两个步骤,第一步获取候选区域,第二步队每个分区进行分类。这种方法的性能不能达到实时性要求。
用了什么方法解决?
- 提出了一种使用回归方式获取候选区域的方法,将所有物体检测任务都结合到一个神经网络中。
效果如何?
- 运行速度大大提高,可以达到45fps。
- 相比于其他快速物体检测模型,检测结果的准确率有了很大提高。
- 相比于R-CNN,对于背景的分类结果好了很多。
还存在什么问题?
- 模型准确率距离其他模型(如Fast R-CNN)还有一定的距离。
- 在候选边框预测方面(与R-CNN系方法相比),误差较大且对于新数据集的泛化能力较弱。
- 对于空间聚集较密的数据的预测结果不好。