YOLOv1——YOLO系列的开山之作


1、摘要

本文的摘要主要讲的就是:先前的检测工作都是用分类的思路去完成的,但是YOLO将目标检测当成一个回归问题来解决。用单个神经网络通过一次预测直接在整张图片上去预测边界框和类别的概率。并且因为这个框架是一个完整的神经网络,所以可以更好地对检测效果进行优化。

然后就是说明了一下YOLO有什么的优势:首先是速度,基础的YOLO模型可以达到45FPS的实时检测,如果用简化版YOLO模型可以达到155FPS,在速度方面简直就是吊打同期的检测模型。然后是定位能力,虽然在定位精度上比不过同时期的各位同行,但是不容易把背景当作是物体(False Positives 假阳性)。最后就是YOLO对目标的特征提取能力,这个可以让YOLO的泛化能力远超过同时期的检测模型。从自然图片到艺术图片,YOLO的检测效果都非常不错。

2、引言

本文的引言一上来就先说明了:啊,人类的视觉系统多么的牛逼,像开车这样复杂的事情,人类闭着眼都可以开。。。(开个玩笑)。那么这就引起了我们的思考计算机是否能做到像人类的视觉系统一样牛逼呢?所以就这样把话题又转移到了我们的目标检测算法上面来了。

当时的那些算法都是把目标检测这个任务当作分类来做的。为了检测一张图片中的目标,这些系统先用分类器对目标进行分类,然后再去预测它的位置和尺寸。比如DPM(deformable parts models)使用滑窗法,让这个分类器在整张图片上的每个位置上工作。还有就是当时比较新的R-CNN先用区域建议的方法生成一张图片上有可能出现的目标的包围框(极端点就是瞎猜,万一蒙对了呢?哈哈哈),然后在这些预测可能出现目标的区域运行分类器进行分类,最后再进行一个处理工作就是调整我们的包围框让它更加地准确,再消除一些冗余的预测框,最后根据场景中的其它对象对包围框进行重新打分。YOLO认为这些框架真的是太复杂了,最致命的是它们又慢又难优化,因为它们就像是一盘散沙,每一个部件都是独自训练然后把它们组装起来。

YOLO这个时候闪亮登场了,忘掉那些复杂的步骤,你只需要看一眼(you only look once)图片就可以知道是否存在目标以及它们在哪。YOLO把图片中的一个一个的像素通过神经网络直接回归成我们需要的信息:目标的包围框、目标的种类。

然后YOLO给我们看下面一张图片告诉我们他到底有多简单:
在这里插入图片描述

Figure 1: YOLO检测系统

上面这张图告诉我们,YOLO的检测流程就是分成三步:1、首先resize图片的大小为448X448;2、然后输入进单个神经网络;3、最后根据模型给出的置信度来筛选出最终结果。

接下来就是又讲了一下YOLO的优势还有它的劣势,引言部分就到此为止了。

3、一体化检测

这一块就是讲YOLO具体是如何工作的了。YOLO将所有目标检测的分离的部分全部一体化,直接采用从整张图片上面获得的特征来预测每一个包围框。并且YOLO是同时预测一张图片上所有类别的包围框,这样的话YOLO就可以对图片中的所有对象进行解析。YOLO的设计可以实现端对端的训练并且达到实时检测的速度同时还能保持很高的平均精度。

YOLO将图片分成SxS个网格,如果图片中的一个目标的中心落入了一个网格,那么这个网格就专门的负责检测这个目标。每一个网格会预测B个包围框的位置和这B个包围框的置信度。这些置信度体现了YOLO对这个预测的包围框包含物体的自信程度和YOLO认为他自己预测的准确程度。YOLO用是否存在目标的概率和真实框与预测框之间IOU的乘积来定义上述置信度,如果这个网格中不包含目标的话,这个置信度分数就会是0。否则的话(也就是如果真的有目标的中心落入了这个网格),这个置信度分数就会等于预测的包围框和真实框的IOU。

每一个包围框都包含了五个数值:x,y,w,h和置信度。(x,y)坐标是包围框的中心坐标(相对于网格点来说)。宽和高的数值是相对于整张图片来说的。最后,这个置信度代表的就是预测框和任何真实框之间的IOU。

每一个网格也会预测C个存在目标的条件下目标类别的条件概率,我们只会给每一个网格预测一组类别的条件概率而不是每一个预测框都去预测。

YOLO在测试阶段,如下面公式(1)所示,我们会将类别的条件概率和预测框的置信度相乘,最后会得到每一个类别相应的预测框的的置信度分数。这些置信度分数包含了预测框中出现这种类别目标的概率和这个预测框对这个目标预测的准确程度。
在这里插入图片描述

公式1

YOLO在PASCAL VOC数据集上的预测上,我们使用7x7的网格分割原图片,并且每一个网格都会去预测两个预测框。因为VOC数据集一共有20个类别,所以我们每一个网格要去预测30个参数,整张图片一共要预测出7x7x30的矩阵。

3.1、网络设计

YOLO用一个卷积神经网络去实现这个模型并且在PASCAL VOC检测数据集上进行评估。网络最初的卷积层从原始图片提取特征,全连接层预测概率和坐标置。YOLO的网络架构是参考图像分类网络GoogLeNet的,网络有24个卷积层后面再接着两个全连接层。整个网络的架构如下图所示:
在这里插入图片描述

Figure 3: 网络架构

3.2、训练

关于训练,要注意的就是YOLO先在ImageNet上面进行预训练,然后再调整图片的大小从224x224到448x448,从而获取检测所需要的更多的像素信息。YOLO把包围框的所有坐标参数全部归一化,并且在最后一层使用线性激活函数,其它层使用的都是leaky relu激活函数。

但是还有三个问题需要YOLO去解决,第一个问题就是损失函数中定位损失肯定是比分类损失更大的,但是损失函数并没有体现两者的区别,第二个问题就是正负样本的比例失衡问题,第三个问题就是如果预测的包围框非常大,那么误差对它来说其实根本不算什么,但是如果预测的包围框很小,同样的误差在小包围框面前可能就是很大的数值了。

让我们来看看YOLO是如何解决上面这三个问题的呢,第一个问题和第二个问题,YOLO通过给损失函数加权值解决,也就是位置损失的权重设置成了5,没有目标的预测框的置信度损失权重设置为0.5,这样就可以解决正负样本比例失衡的问题了。第二个问题YOLO通过给宽和高加根号,从数值方面缩小框的大小对损失的影响。

YOLO对每一个网格都会预测几个包围框。在训练的时候,我们希望每一个目标我们只有一个预测框对它响应。所以YOLO通过计算和真实框具有最大IOU的预测框负责拟合这个真实框。这样的话,每一个预测框都会有自己特殊的偏好,这样可以提高整体的召回率。

最后我们来看一下我们的损失函数,这个损失函数是由多个小损失组合而成的。
在这里插入图片描述

公式3: 损失函数

按照我们上面讨论的结论,假设每一个网格都会有两个预测框,如果有一个目标的中心落在了这个网格中,那么此时这个网格是对这个目标负责的,但是这个网格是有两个预测框的,只能选择那个和真实框IOU最大的那个预测框对这个目标负责。换句话说就是,不是所有的预测框都有资格对真实目标负责的。所以用指示函数也就是公式中那个大1来指定哪些预测框是负责真实目标的。

所以,损失函数只会去优化那些存在目标的网格的分类误差。并且只会去优化那些负责真实目标的预测框的坐标误差。原文中还有一些训练时候的参数设置的细节,感兴趣的可以去原文查阅,这里不再赘述。

3.3、推断

就像训练一样,对于一张测试图片我们只需要一次网络计算。在PASCAL VOC数据集上面,YOLO网络每张图片预测98个包围框并且每一个预测框都有一个类别概率。YOLO在测试的时候是非常迅速的,因为它只需要进行单网络的计算,不像那些分类方法那样。

但是,也会有一些大目标或者处于网格边界上的目标会被多个网格定位到。YOLO采用NMS解决单目标多次被检测到的问题。这边特别说明一下,用来做NMS的数值就是公式1所得到的那个置信度分数。

3.4、YOLO的局限性

如果论文一路看下来,我们其实是可以逐渐体会到YOLO的局限性的。首先,YOLO把整张图片分成了7x7的网格,每一个网格只能产生两个预测框,并且这两个预测框还得是同一个类别。这样就导致了YOLO对成群的小目标检测效果很差,例如成群结对的小鸟。其次,YOLO是通过数据去学习,一旦YOLO遇到了从未遇到过的类型的对象就会束手无策。最后,误差对大框和小框的影响依旧还是很大。

4、与其它目标检测系统的对比

目标检测一直是计算机计算机视觉领域的核心问题。目标检测的框架一般都是先从输入的图像中提取一系列鲁棒的特征点(可以通过Harr、SIFT、HOG、卷积特征)。然后,分类器或者定位器在特征空间去识别目标。这些分类器或者定位器一般有两种工作方式,一种是滑窗法遍历整张图片,另外一种是直接在图片上的一系列区域上运行。

论文还将YOLO与当时的其它目标检测算法进行了对比,都是一些比较经典的算法,所以让我们一起来看看它们和YOLO之间有什么相同点和不同之处吧。

Deformable parts models
DPM使用的是滑窗法进行目标检测。DPM使用了不同的框架去提取静态的特征,对区域进行分类,对高得分的区域预测包围框。YOLO用一个卷积神经网络就取代了上述所有的独立框架。YOLO的网络可以进行特征提取、预测包围框、非极大值抑制和语境推理。YOLO在检测任务中训练提取特征的能力并且进行优化,而不是利用静态的特征。YOLO的一体化架构带来了比DPM更快的速度和精确的模型。

R-CNN
R-CNN系列的算法使用区域预测而不是滑动窗口的方法去寻找图片中的目标。选择搜索产生潜在的包围框,一个卷积神经网络提取特征,一个SVM对包围框进行打分,一个线性模型调整包围框,并且用非极大值抑制去消除重复的检测框。这个复杂的框架的每一步都需要精准单独的调节并且这个系统很缓慢,测试的时候处理一张图片需要花费40秒。

YOLO和R-CNN有一些相似的地方。每一个网格点都会有一些预选框并且都是对卷积网络提取的特征对这些框进行打分。但是,YOLO对网格点的预选框的空间限制可以缓和相同目标的多次被检测的问题。YOLO有更少的预选框,每张图只有98个对比选择搜索得到的2000个预选框。最后,YOLO将所有独立的结构融合成一个可以优化的整体。

Other Fast Detectors
Fast和Faster R-CNN致力于加速R-CNN框架通过共享计算和使用神经网络去选择预选框而放弃了选择搜索的方法。虽然它们比R-CNN的速度和精度都要高,但是它们远远没有达到实时检测的标准。

很多的研究聚焦于加速DPM框架的速度。它们加速HOG计算,使用级联,用GPU运算。然而,实际上只有30Hz DPM达到了实时运行的标准。

Deep MultiBox
MultiBox和R-CNN不一样,它使用卷积神经网络去寻找预选框而不是使用选择搜索。MultiBox可以通过用单类别替代置信度预测执行单目标检测。然而,MultiBox不能够运行广义的目标检测并且只是一个大型检测框架中的一部分,需要进一步的图片分类。YOLO和MultiBox都使用卷积神经网络去预测图片中的包围框,但是YOLO是一个完整的检测系统。

OverFeat
OverFeat通过训练一个卷积神经网络进行定位并且用这个定位器进行目标检测。OverFeat能够高效地执行滑动窗口检测,但是它依旧不是一个一体的系统。OverFeat对定位进行优化,而不是对检测性能进行优化。就像DPM一样,定位器只能在预测的时候获取定位的信息。OverFeat不能够解释全局语义并且需要进行大量的后处理才可能产生连贯的检测结果。

猜你喜欢

转载自blog.csdn.net/weixin_44570484/article/details/108527909