YOLO源于2016年收录于cs.CV中的论文《You Only Look Once:Unified, Real-Time Object Detection》只需看一眼:统一实时的目标检测。YOLO是目标检测速度提升的里程碑,虽然精度不如R-CNN系列模型,但比其它模型快几倍的速度,使目标检测技术可以应用在更多的场景之中。
之前的系统一般将目标检测重定义成分类问题,YOLO则将其看做回归问题,先圈出物体在图像中的边框,然后计算它是具体类别的概率,从而实现端到端的图片检测系统。统一的结构使检测速度非常快,可实现45fps(帧每秒)的实时检测,更小加速版模型Fast YOLO可达到155fps,且精度是其它实时检测系统的两倍。与当前最佳的目标检测效果相比,YOLO在定位时容易出错,但较少将背景检测成非目标区域,它能学到更加通用的特征,便于将模型迁移到其它领域。
人的视觉系统快速而精确,一瞥之下就能发现图中的物体,类似的算法在解决自动驾驶,辅助机器人等领域存在巨大潜力。
当前效果较好的目标检测系统如R-CNN系列,先将图片识别为多个备选区,然后识别其类别和调整边框,最后再加入去重、打分等后处理,整个过程缓慢而复杂,并且难以优化。
文中的系统非常简单,它将目标检测视为回归问题,直接用像素计算边框和分类,如下图所示,使用一个单卷积网络,同时预测多个目标框的位置和类别。
它的优势是:第一、结构简单,计算快速,且比当前的实时检测系统精度更高(R-CNN系列不属于实时系统);第二、不像基于滑动窗口或者备选区的技术,它处理整张图片,具有更全局的视野,因此于Fast R-CNN相比不容易错将背景识别为目标。第三、它具有更强的泛化能力,比如把从自然图片训练的模型应用于艺术图片,因此在接收不理想的输入时系统更健壮。它的劣势是:准确度低于当前最佳模型,且对小物体识别效果稍差。
统一检测
模型用整个图片特征预测每一个目标区域和类别,系统将图片切分成SxS大小的网格,如果物体中心落入网格,该网格将检测到物体。每个网格单元计算边框,并为可信度confidence打分,可信度同时评价了是否包含物体以及边框精度,其定义如下:
如果未预测到物体,则Pr(Object)值为0,IoU是预测(pred)和真实(ground-truch)区域重叠的比例。每个边框包括五个预测值x,y,w,h,confidence。其中x,y是预测物体中心位置,w,h是物体宽高相对于整体图片的比例。
除此之外,每个网格单元还预测类别的条件概率:
即该块包含的物体是类别Classi的概率,类别的预测针对网格单元,而非针对目标框。在测试阶段,将位置的可信度和类别的概率相乘,从而得到了每一个框类别可信度得分。
预测被编码成:
在PASCAL VOC数据集上使用YOLO算法时,将图片分7x7的小区域(S=7),每区域计算两个目标框(B=2),共C种类别(C=20),得到7x7x(2x5+10)个输出,如下图所示。
模型设计
网络结构分成两部分,用预训练pretrain的24层卷积网络提取图片特征,2层全连接网络预测类别和位置,如下图所示:
除了标准版,还训练了只使用9个卷积层加速版Fast YOLO。
模型训练
使用在ImageNet上预训练的卷积网络,取基础模型的前20个卷积层,并加入了另外四个卷积层(同时加入卷积和全连接层更有利于效果提升)并加入了两个全连接层。由于目标检测需要更大精度,因而将图片从224x224变为448x448。
框位置x,y,w,h,其中w,h是相对图片整体的比例,范围在[0,1]之间,这也可看作图片大小归一化;目标中心位置x,y使用相对于网格的偏移,因此也可以归一化到[0,1]之间。
模型在最后一层使用线性激活函数,在其它层使用leaky rectified linear activation,具体公式如下:
损失函数
由于图中很多网格单元不包含目标,若使用平方和误差,可能使得可信度趋近于0,造成模型训练中的不稳定。因此将有目标的区域和无目标的区域赋予不同权重:有目标区域λcoord=5和无目标区域λnoobj=0.5。
直接使用平方和误差时,会因目标区域大小不同导致对模型产生不同影响,因而用预测宽高的平方根来替代直接预测宽高。
另外,模型可以对每个网格单元预测多个目标框,在训练阶段,只希望针对每个类别预测一个目标框,因此,只计入IoU最大的目标框,使模型能预测到更精确的大小,长宽比,以及类别,提高了整体的召回率。
综上,具体的误差函数定义如下:
其中i表示网格单元的索引号,j表示边框的索引号。前两行分别计算具体位置中心点和宽高的误差,第三行和第四行分别是包含目标和不包含目标的可信度评价,最后一行是对每个网络的类别评价。式中用不同的λ给各个评价以不同权重。
模型预测
YOLO对PASCAL VOC数据集中的每张图片预测出98个边框及每个框的类别概率,它比基本类别模型更快速。网格的设计增强了边框预测的空间差异,通常能确定哪一目标属于哪一单元,且只为每个目标预测一个框。但是位于网络边框或者比较大的物体,可能被多个单元识别到,在检测到多个目标时,使用了NMS(Non-maximal suppression)去冗余。
YOLO的局限性
YOLO模型限制了单个网格中识别框的数量,且只对网格单元估计类别,这样如果一群鸟飞过就无法识别到每一只鸟;对训练集中不常出现的长宽比识别也略差;另外,由于损失函数的IoU计算方法,使得小目标中的小误差往往比在大目标中影响更大,从而影响了定位的准确性。
与其它模型对比
DPM模型使用滑动窗口进行目标检测,使用管道方式结合了特征提取、分类、计算目标框、打分模型;相比之下YOLO使用了统一的卷积网络实现所有功能,并且模型对各个组件调参。相对之下更快速和准确。
R-CNN模型先用卷积模型提取图片特征,计算备选框,然后对备选框分类、精调边框、再做一些后处理,过程比较复杂,YOLO与之不同的是使用了网格技术,优化了同一物体被多次检测的问题,明显减少了备选框的数量。
其它快速检测模型,如Fast和Faster R-CNN提升了R-CNN的检测速度,但仍不够快;同样,对DPM和HOG的一些加速算法速度也不及YOLO,且检测质量不足。相对于只能检测人和人脸的目标检测器,YOLO有更强能通用性。
Deep MultiBox也是一种用卷积神经网络预测目标的模型,但它只是巨大管道中的一部分,不能直接独立使用,不像YOLO是完整的解决方案。
OverFeat也使用卷积网络计算位置及调优,它使用滑动窗口高效检测,但仍是不连贯的系统,它的检测过于局部化,不能融入全局特征,因此需要更多后处理。
YOLO基于网格的检测方式来自于MultiGrasp,MultiGrasp的检测系统过于简单,它只能检测一个包含单物体的单区域。
实验
基于PASCAL VOC 2007数据集,将结果分成以下几种情况:
- Correct:类别正确,且IOU> 0.5
- Localization:类别正确,且0.1<IOU< 0.5
- Similar:类别近似,IOU> 0.1
- Other:类别错误,且IOU< 0.1
- Background:IOU< 0.1,无任何目标物体
YOLO与Fast R-CNN对比效果如下:
可以看到,YOLO的准确率不如Fast R-CNN,虽然能识别到物体类别,但位置不够精确,但它误识背景的比例较低。
结合YOLO和Fast R-CNN:鉴于Fast R-CNN对位置识别的优势,和YOLO对背景识别的优势,且YOLO时间占用非常少,将二者结合,在不影响速度的同时提升了模型效果,如下图所示,加入YOLO比其它方法效果更明显。
在VOC 2012数据集中与其它模型效果对比如下:
通常情况下,用于学术研究的训练集和测试集是同分布的,但是现实中这样的数据并不多,用VOC数据集训练模型,并对艺术品检测:包含对VOC中的艺术品、Picasso Dataset、People-Art Dataset数据集做预测,效果如下:
可以看到YOLO具有更强的泛化能力。
网友评论