You Only Look Once(yolo): Unified, Real-Time Object Detection Abstract
上一篇说rcnn系列一直是以定位为前提,再分类,都是围绕定位做升级。这次的yolo也是如此,所以速度更快,我们
速度影响因素也是在此嘛。yolo现在已经出了yolov1,yolo v2,yolo v3,yolo 9000等不同版本。
基于回归的目标检测方法
到目前为止,所有讨论的方法都是通过建立一个管道(pipeline )产生很多建议区域,然后将这些得到的建议区域进行分类/回归
定位操作,将检测作为分类问题来处理。但是,有几种方法是将检测作为回归问题。其中两个最流行的是YOLO和SSD。 这些检测方法也被称为single shot 检测方法(一步法)。我们来看看它们:
YOLO(You only Look Once)
对于YOLO来说,检测是一个简单的回归问题,它需要输入图像并学习类概率和bounding box 坐标。听起来很简单?
YOLO将每个图像划分为S×S的网格,预测每个网格的N个边界框和置信度。置信度反映了边界框的准确性以及边界框是否包含一个目标(不管是什么类)。YOLO还预测训练中所有类的每个框的分类分数。你可以通过结合两个类的方法来计算每个类出现在预测框中的概率。
预测出了SxSxN个 boxes。然而,这些框中的大部分都具有低置信度分数。如果我们设置一个阈值(如30%的置信度)可以删除其中的大部分,如下面的例子所示
注意,在运行时,我们只在CNN上运行一次图像。 因此,YOLO速度超快,可以实时运行。 另一个关键的区别是,YOLO一次看到完整的图像,而不是以前方法中只查看生成的建议区域。所以,这种上下文信息有助于避免错误。 然而,YOLO的一个限制是它在一个网格中只能预测一种类别(一个网格多个类别就不行了),因此不适用于预测小的目标(一个网格很多鸟群就分不清了)。
Abstract
作者提出了一种新的物体检测方法YOLO。YOLO之前的物体检测方法主要是通过region proposal产生大量的可能包含待检测物体的 potential bounding box,再用分类器去判断每个 bounding box里是否包含有物体,以及物体所属类别的 probability或者 confidence,如R-CNN,Fast-R-CNN,Faster-R-CNN等。
YOLO不同于这些物体检测方法,它将物体检测任务当做一个regression问题来处理,使用一个神经网络,直接从一整张图像来预测出bounding box 的坐标、box中包含物体的置信度和物体的probabilities。因为YOLO的物体检测流程是在一个神经网络里完成的,所以可以end to end来优化物体检测性能。
Introduction
YOLO之前的物体检测系统使用分类器来完成物体检测任务。为了检测一个物体,这些物体检测系统要在一张测试图的不同位置和不同尺寸的bounding box上使用该物体的分类器去评估是否有该物体。如DPM系统,要使用一个滑窗(sliding window)在整张图像上均匀滑动,用分类器评估是否有物体。
在DPM之后提出的其他方法,如R-CNN方法使用region proposal来生成整张图像中可能包含待检测物体的potential bounding boxes,然后用分类器来评估这些boxes,接着通过post-processing来改善bounding boxes,消除重复的检测目标,并基于整个场景中的其他物体重新对boxes进行打分。整个流程执行下来很慢,而且因为这些环节都是分开训练的,检测性能很难进行优化。
作者设计了YOLO(you only look once),将物体检测任务当做回归问题(regression problem)来处理,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和class probabilities。通过YOLO,每张图像只需要看一眼就能得出图像中都有哪些物体和这些物体的位置。
使用YOLO来检测物体,其流程是非常简单明了的:
1、将图像resize到448 * 448作为神经网络的输入
2、运行神经网络,得到一些bounding box坐标、box中包含物体的置信度和class probabilities
3、进行非极大值抑制,筛选Boxes
每一个栅格预测B个bounding boxes,以及这些bounding boxes的confidence scores。
每一个栅格还要预测C个 它属于某个类的概率。
这个 confidence scores反映了模型对于这个栅格的预测:该栅格是否含有物体,以及这个box的坐标预测的有多准。
公式定义如下:
如果这个栅格中不存在一个 object,则confidence score应该为0;否则的话,confidence score则为 predicted bounding box与 ground truth box之间的 IOU(intersection over union)。
YOLO对每个bounding box有5个predictions:x, y, w, h, and confidence。
坐标x,y代表了预测的bounding box的中心与栅格边界的相对值。
坐标w,h代表了预测的bounding box的width、height相对于整幅图像width,height的比例。
confidence就是预测的bounding box和ground truth box的IOU值。
将YOLO用于PASCAL VOC数据集时:
论文使用的 S=7,即将一张图像分为7×7=49个栅格每一个栅格预测B=2个boxes(每个box有 x,y,w,h,confidence,5个预测值),同时C=20(PASCAL数据集中有20个类别)。
因此,最后的prediction是7×7×30 { 即S * S * ( B * 5 + C) }的Tensor。
其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。
YOLO网络借鉴了GoogLeNet分类网络结构。不同的是,YOLO未使用inception module,而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)+3x3卷积层简单替代。
损失函数
(1) 整个损失函数针对边界框损失(图中1, 2, 3部分)与格子(4部分)主体进行讨论。
(2) 部分1为边界框位置与大小的损失函数,式中对宽高都进行开根是为了使用大小差别比较大的边界框差别减小。例如,一个同样将一个100x100的目标与一个10x10的目标都预测大了10个像素,预测框为110 x 110与20 x 20。显然第一种情况我们还可以失道接受,但第二种情况相当于把边界框预测大了一倍,但如果不使用根号函数,那么损失相同,都为200。但把宽高都增加根号时:
显然,对小框预测偏差10个像素带来了更高的损失。通过增加根号,使得预测相同偏差与更小的框产生更大的损失。但根据YOLOv2的实验证明,还有更好的方法解决这个问题。
(3) 若有物体落入边界框中,则计算预测边界框含有物体的置信度Ci
和真实物体与边界框IoUCiˆ
的损失,我们希望两差值越小损失越低。
(4) 若没有任何物体中心落入边界框中,则Ciˆ
为0,此时我们希望预测含有物体的置信度Ci越小越好。然而,大部分边界框都没有物体,积少成多,造成loss的第3部分与第4部分的不平衡,因此,作才在loss的三部分增加权重λnobj=0.5
。
(5) 对于每个格子而言,作者设计只能包含同种物体。若格子中包含物体,我们希望希望预测正确的类别的概率越接近于1越好,而错误类别的概率越接近于0越好。loss第4部分中,若pi(c)ˆ
中c为正确类别,则值为1,若非正确类别,则值为0。
总结:
YOLO模型相对于之前的物体检测方法有多个优点:
1、YOLO检测物体非常快。
因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。
2、YOLO可以很好的避免背景错误,产生false positives。
不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。
3、YOLO可以学到物体的泛化特征。
当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。
尽管YOLO有这些优点,它也有一些缺点:
1、YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。
2、YOLO容易产生物体的定位错误。
3、YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。
以上都是参考别人的资料,再自己理解来的,写的不是很准确。
参考:
http://www.cnblogs.com/fariver/p/7446921.html
https://blog.csdn.net/hrsstudy/article/details/70305791
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:目标检测:yolo学习 - Python技术站