这是个目标检测算法
思想:把目标检测问题作为回归问题处理
优点:
速度块,把目标检测问题作为回归问题处理,流程简单,只需输入一张图
模型泛化能力优秀,与DPM,R-NN相比,还是因为利用了整张图的信息
具有全局推理能力,假阳性错误少,即把背景当物体的错误少
缺点:
精度与sta相比并不高,对小物体不友好
论文的内容
摘要
我们提出了YOLO,一种新的目标检测方法,重新调整分类目标检测算法的前期工作执行。我们构建的目标检测框架将目标检测问题视为回归问题,在空间上分开物体的边缘并且直接从整张图片中的一个评估值联系到相应类型的概率。自从整个检测通道变成了单一的神经网络,那就变成了能够被操控的直接是端到端的目标检测的表现.
我们一元化的结构运行起来是非常快的。我们基础的YOLO模型处理图像所花的时间为45个框每秒。一个更小的神经网络版本,Fast YOLO,处理速度更是达到了令人震惊的155个框每秒。同时,达到了其他实时检测探测器的MAP的两倍。相较于目前(2016)最先进的检测系统,YOLO有着更多的定位错误,但也有着更少的假阳性错误。最后,YOLO学习了非常一般化的物体的特征的表达。在自然图像到艺术品到其他领域,YOLO超过了其他目标检测方法(包括DPM,R-CNN)
介绍
人类朝图像看了一眼就立刻知道图像里的物体是什么,不管它们在哪不管它们是怎么互相作用的。人类的视觉系统是快速而精准的,这就允许了我们去处理更加复杂的像这就像开车时没有意识的思考之类的任务。快速而高效的目标检测算法将允许电脑在没有特别的传感器的情况下去驾驶车辆,能够使用辅助的装置去实时传达场景信息给人类驾驶员,并且解锁潜在的一般用途的,反应灵敏的机器人系统.
现存的目标检测系统将为执行检测任务而重新调整分类器的用途。在检测一个物体时,这些系统在测试图像中会带上一个分类器去检测物体和衡量它的多样的位置和范围,可变的分割模型(DPM)使用一个滑动窗口的方法(分类器能够在定位上均匀地在整个图像上滑动)
图1:YOLO探测系统。处理图像
与约洛的关系简单而直接。我们的系统(1)调整了大小
将输入图像转换为448×448,(2)对图像运行单个卷积网络,以及(3)对产生的检测结果设置阈值
模型的置信度。
更多的现存的像R-CNN那样,是通过区域图像处理技术实现的方法,首先在图像中生成潜在的边界框,然后在这些边界框上运行分类器。之后分类后处理用于细化绑定框,消除重复检测,并重新扫描
基于场景中其他对象的框[13]。这些复杂的通道很慢,很难优化,因为每个
单个组件必须单独训练。
我们将目标检测框架重构成一个线性回归问题,直接从图像像素开始检测边界容器的坐标与对应类型的概率。使用我们的系统,你只需要让YOLO扫描一次图像就能推测物体目前是在哪。
YOLO是一个令人耳目一新的例子:看图一。一个卷积神经网络同时推测多个匣子的边界并且给出这些匣子可能的类别,YOLO训练整个图像并直接优化检测性能。这种统一的模式有几个优于
传统的目标检测方法的地方。
其一,YOLO是非常快的。自从我们把帧/图像检测视为一个回归问题之后,我们不需要复杂的(颜色处理)通道,我们直接简单地在一个新地测试图像上运行我们地神经网络去做测试,我们的基础神经网络能达到每秒45帧,这还是在泰坦X上没有批处理图形处理器的情况,并且一个更快的版本能达到150帧每秒。这就意味着,我们能够在小于25毫秒延迟的情况下,实时地处理视频数据,此外,yolo达到了一般实时图像处理系统的平均精度的两倍以上。
其二,YOLO推断图片预测的全局,不像滑动窗口和基于区隔的图像提取技术,YOLO看起来整个图像训练和测试时间都进行了隐式地对类别及其外观的实际信息进行编码。Fast R-CNN,(当时)顶级的目标检测算法,错误地返回图像的物体区块,因为它不能看到更大的背景。相较于Fast R-CNN,YOLO有少于一半的背景识别错误.
第三,YOLO学习一般的物体特征表达。当神经网络训练图像或者测试一般的艺术作品,YOLO优于像DPM和R-CNN那样的,有很大差距的目前最好的目标检测方法。自从YOLO被广泛的运用以后,特别是被用于新的,不曾想到过的领域之后,它很少发生故障.
YOLO的准确率仍然落后于目前最优秀的目标检测系统。当它可以迅速地确定图像中的物体的时候,它很难精确定位某些物体,特别是比较小的那类。在实验中,我们检查了这些。
我们所有的培训和测试代码都是开源的。
各种预先训练的模型也可以下载。
统一检测
我们将物体检测的单独组件集成到一个神经网络中。我们的网络使用整个图像的特征来预测每个边界框,网络还同时预测所有类的所有边界框,这也就意味着我们的网络全面的预测整个图像和图像中的所有的类。YOLO网络的设计保证能够实现端到端的训练和实时检测的速度,同时实现较高的检测平均精度。
我们的系统将输入图像划分成S × S个网格。如果一个物体的中心点在某个网格中,则这个网格负责检测这个物体。每个网格单元预测B个边界框以及每个边界框的confidence(置信度)。这些confidence反映了网络模型对该边界框是否含有物体的信心,以及边界框位置预测的准确度。 在形式上我们将confidence定义为 C = Pr(Object) ∗ IOU truth pred( Pr(Object)网格存在物体为1,不存在为0),如果网格中不包含物体则Pr(Object) = 0则confidence为0,包含物体Pr(Object) = 1则confidence等于预测边界框和真实边界框的IOU(交并比)。
每个边界框有5个预测值:x,y,w,h,confidence,(x,y)代表预测边界框的中心点坐标,w,h是边界框的宽度和高度,confidence是预测边界框和真实边界框的IOU。
每个网格预测C个条件类别概率, Pr(Class i |Object),这是网格中含有物体的条件下属于某个类别的概率,每个网格只预测一组条件类别概率,B个边界框公用。
测试时我们将条件类概率和confidence相乘,为我们提供了每个边界框在各个类别的得分值 ,这些得分值代表该类别物体出现在框中的概率和边界框与物体的拟合程度。
这给了我们每个类别的置信度盒子。这些分数编码了这个类型的概率和出现在框中以及预测框与对象。
物的中心在哪个网格,就用哪个网格检测该物体
网络的设计
我们把这个模型用卷积神经网络实施,并且用PASCAL VOC检测数据集评估。最初的神经网络的卷积层的额外特征来自用全连接层输出其对应类别的概率的图像和置信度。
在图像分类领域,我们的神经网络结构灵感来自geoglenet模型。我们的神经网络有24个卷积层和两个全连接层。跟Lin等人的做法类似,作为geoglenet重inception模组的替代,我们直接使用了11的衰减层连接到33的卷积.网络的完整结构如图三所示.
我们也训练更快版本的YOLO,使得物体的边缘检测更加快速,快速版本的YOLO使用一个带有少数卷积层以及少数几个滤波器在这些层中的普通神经网络。除了尺寸,在整个网络中,YOLO的普通版本和快速版本中的所有的训练和测试参数都是一样的。
网络结构
图3:YOLO的结构,我们的目标检测神经网络有24个卷积层与2个全连接层.并且在前几层中使用11的卷积层交替减少特征空间。我们在图像分类数据集中对一半的卷积层做预训练(224224的输入图像)然后将检测分辨率提高一倍.
我们网络的最终输出是7×7×30张量
一系列的预测。
训练细节
我们使用图像数据集中的1000类数据对卷积层进行了预训练。我们使用了图3中前20层卷积层连上池化层(平均池化)和一个全连接层。我们训练这个网络大约一个星期,实现了在ImageNet 2012 valida tion集合中,crop top-5的准确率为88%,与Caffe的GoogLeNet模型相当.我们对所有的训练与预测都使用黑暗网络框架
训练与推理
为了执行目标检测任务,我们转换了模型,ren等人的成果显示,增加预训练的卷积层和全连接层能够提高网络的性能。有了他们成果的有力说明,我们加了四层卷积层和两次全连接层并对他们的权重进行随机初始化,目标检测通常需要非常细致的视觉信息,所以我们将输入的图像数据从224224到448448
我们最后的输出层预测图像对应的所有类别的概率以及图像内物体的边界。我们正则化边界框的宽度和高度使图像数据归一化。
我们把一个线性激活函数放在最后那层并且所有的层都使用以下激活函数进行矫正:
我们优化了我们模型输出数据的平方和误差。
我们使用平方和误差的原因是它很容易优化,然而那并不能完美地排列,在每个图像中,许多网格单元不包含任何对象。它的权重定位误差和分类误差都不是太理想。同时,在没有物体的每个图像的网格中,置信度为0的网格压倒性地超过了其他网格,这个会导致模型的不稳定性以及训练阶段的早期过拟合.
为了弥补这一点,我们增加了边缘检测框的位置预测.以及降低了不包含物体的检测框的置信度的预测损失。我们使用了两个参数λcoord 和 λnoobj 去达成这一目的,我们设定λcoord = 5 和 λnoobj = .5
平方和误差在较大的误差中也具有相同的权重的检测框和小检测框。我们的误差度量应该反映这一点
大检测框里的小偏差比小检测框里的小偏差更重要。为了解决这个问题,我们预测平方根边界框的宽度和高度,而不是宽度和高度直接相关。
YOLO预测多层边界检测框的每个格子。在训练的时候,我们只想要一个边缘检测框,用于预测到可能的每个物体。这就导致了一个在边缘检测框和预测器之间中,每个预测器能获得更好的预测确定值,纵横比和物体的种类,全面提高了返回值
YOLO的损失函数
在训练中,我们优化了多层损失函数
下面对其损失函数进行拆解
中心点损失
宽高的损失
置信度损失
上面是包含物体的置信度
下面是不包含物体的置信度
类别损失
表示是否单元格i中包含目标
表示格点单元i中,第j个预测的bounding box 包含目标
表示格点单元i中,第j个预测的bounding box 不包含目标
注意这里的损失函数是直接做差,而不是使用交叉熵或者逻辑回归(sigmoid)这里就体现了yolo是把图像分类问题作为线性问题处理
注意,如果网格中含有物体,损失函数只需考虑分类损失(因此条件类概率在前面讲)。如果这个预测器负责预测真实边界框(和网格中的所有预测器都有最高的IOU),损失函数只考虑预测坐标损失。
我们在PASCAL VOC 2007和2012的训练和验证数据集上对网络进行了大约135个epochs的训练。当在VOC 2012上测试的时候,我们也包含了VOC 2007的测试数据用来训练。训练中我们的batch size(周期训练数)为64,momentum为0.9,decay为0.0005。
我们的learning rate(学习率)设置如下:在第一个epoch中我们将learning rate慢慢的从0.001提高到0.01,如果我们从较高的学习率开始训练,由于不稳定的梯度会导致网络发散。我们以0.01训练75个epoch,再以0.001训练30个epoch,以0.0001训练30个epoch(周期)。
为了避免过拟合我们使用了dropout (随机停止神经元的使用)层和数据增强的办法。在第一个连接层之后,速率为0.5的dropout层防止了层之间的联合性(dropout强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,达到好的效果。消除减弱了神经元节点间的联合适应性,增强了泛化能力。)[18]。对于数据增强,我们引入达到原始图像大小20%的随机缩放和平移。我们还在HSV色彩空间中随机调整图像的曝光和饱和度达1.5倍
参考
就像我们在训练中做的那样,被用于目标检测的图像只需要一个网络去评价。在PASCAL VOC中,该神经网络预测98个边缘检测框,框上有每个图像对应可能的类别。YOLO是十分快速的,因为试验时,它只需要一个单一的网络评估。不像使用了其他分类器的方法.
这些网格被设计用于分析背景中物体的不同点。在这些背景中,每个独立的网格框到的经常是空的,同时也存在网络预测到每个物体只有一个网格的情况。然而一些大型的物体或者需要多层网格的物体能被很好地锁定在多个网格中。非最大抑制能够被用于修复这些多层目标检测。当这些并不严格地来表现为R-CNN或者DPM中时,非最大抑制在map值中增加了2~3%。
yolo的优缺点
yolo的局限性
YOLO对边界设置了很强的空间约束框预测,因为每个网格单元只预测两个框,只能预测一种类型。这个空间约束限制了我们的模型可以预测的附近对象的数量。我们的模型与出现在模型中的小物体就很难预测,如成群的鸟。
因为我们的模型学习数据,它很难推广到新的或不寻常的对象
纵横比或配置。我们的模型还使用相对粗糙的特征来预测边界框
我们具有来自输入图像的架构。最后,当我们训练接近检测性能的损失函数时,我们的损失函数处理错误在小边界框和大边界框中也是一样的
盒。大盒子里的一个小错误通常是良性的,但是小盒子里的小错误对借据的影响要大得多。我们的主要错误来源是不正确的定位。
目标检测评价指标
AP衡量的是学出来的模型在每个类别上的好坏,mAP衡量的是学出的模型在所有类别上的好坏,得到AP后mAP的计算就变得很简单了,就是取所有AP的平均值。
YOLO算法的特点
1.将图片隐式地分为s*s个网格
2.物体地中心落在哪个网格内,哪个网格就负责预测哪个物体
3.每个网格需要预测B个框,C个类别
所以一张图地预测信息共有:SS(B*5+C)
B个框预测的为一个物体,同一个类别
这种预测方法会带来一些问题:
一个网格内出现了两个物体的中心
一个网格里包含了很多小物体(比如天空中的鸟群)
在这两种情况下,yolo均只能检测出一个和一类物体,由此可见,yolo对靠得很近的物体以及小目标群体的检测效果不是很好.
4.每个框都包含了位置(x,y,w,h,confidence)和置信度
拆解公式,confidence =
第一项为物体先验概率,如果框内包含物体值为1,否则为0
第二项为预测框与真实框的交并比(0-1)
故,置信度confidence的取值范围为0-1
由此推出,confidence的大小推出两个信息
预测框内包含的物体置信度是多少
预测框预测的准确度