(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)

YOLO是一个以实时处理为目标的物体检测系统。我们将在本文中介绍YOLO、YOLOv2和YOLO9000。对于那些只对YOLOv3感兴趣的人,请转到第三篇。以下是YOLO网站提供的准确性和速度对比。
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
YOLOv2的演示。(此处是一个视频链接)
视频
我们从下面我们自己的测试图像开始。
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
使用YOLO进行物体检测:
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
网格单元

为了便于讨论,我们对原始照片进行了剪裁。YOLO将输入图像划分为 S × S 个网格。每个网格单元仅预测 一个 对象。例如,下面的黄 色 网 格单元格尝试预测中心(蓝点)位于网格单元格内的“person”对象。
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
每个网格单元都预测固定数量的边界框。在此示例中,黄色网格单元格进行两个边界框预测(蓝色框)以定位人的位置。
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
每个网格单元都会对对象进行固定数量的边界框猜测。
但是,单对象规则限制了所检测对象的接近程度。为此,YOLO在对象近距离上确实有一些限制。
对于下图,左下角有9个圣诞老人,但YOLO只能检测到5个。
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
YOLO可能会错过距离太近的物体。
对于每个网格单元格,
1、预测 B 个边界框,每个框有一个 box置信度得分
2、只检测 一个 对象,而不考虑边界框B的数量
3、预测 C个条件类的概率 (每个类有一个概率)

在Pascal VOC上进行评估,YOLO使用7×7网格(S×S),2个边界框(B)和20个类©。
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
YOLO使用B边界框进行SxS预测。

让我们来了解更多的细节。每个边界框包含5个元素:( x, y, w, h )和 box置信度得分 。置信度分数反映框中包含对象的可能性( object )以及边界框的准确性。我们通过图像的宽度和高度对边界框的宽度 w 和高度 h 进行规范化。 x 和 y 是对应单元格的偏移量。因此, x, y, w 和 h 都在0和1之间。每个单元格有20个条件类概率。条件类probability是检测到的物体属于特定类的概率(每个单元格的每个类别有一个概率)。所以YOLO的预测输出的尺寸为(S, S, B×5 + C) = (7、7、2×5 + 20) = (7、7、30)。
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
YOLO的主要概念是建立一个CNN网络来预测一个(7,7,30)的张量。它使用一个CNN网络得到1024个通道的7×7的输出。YOLO用两个全连接层来进行7×7×2个边界框的预测(下图)。为了做出最终的预测,我们保留那些边界框置信度得分高(大于0.25)的盒子边界框作为最终的预测(下图)。
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
每个预测框的 类置信度得分 计算为:
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
它度量分类和定位的(物体所在的位置)的置信度。

我们可以很容易地混淆那些得分和概率项。这是数学上的定义,供你以后参考。
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
网络设计
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
YOLO有24个卷积层,然后是2个全连接层(FC)。有些卷积层使用了1x1的卷积核来降低特征图的通道数。对于最后一个卷积层,它输出一个形状为(7,7,1024)的张量。然后张量被压扁。使用2个全连接层,它输出7×7×30个参数然后reshape成(7、7、30),即每个位置2个边界框。

YOLO的一个更快但准确率较低的版本叫做Fast YOLO,只使用了9个卷积层和更少的feature map数量。

损失函数

YOLO预测每个网格单元有多个边框。为了计算true positive的损失,我们只希望它们中的一个对该物体负责。为此,我们选择了和ground truth具有最高IoU的那个。这种策略导致边界框预测之间的专门化。每种预测都能更好地预测特定的尺寸和纵横比。

YOLO使用预测和ground truth之间的平方和误差来计算损失。损失函数包括:

1、分类损失 。
2、定位损失 (预测边界框与ground truth之间的误差)。
3、置信度损失 。

分类损失

如果物体被检测到了,每个单元格的分类损失为每个类的条件概率类的平方误差:
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
定位损失

定位损失测量的是预测的边界框的位置和尺寸的误差。我们只计算负责检测物体的框。
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
我们不希望在大框和小框中对绝对误差进行同等的加权。例如,一个大框的2像素误差和一个小框的2像素误差是一样的。为了部分解决这个问题,YOLO预测边框宽度和高度的平方根,而不是宽度和高度。此外,更加重视边界框的准确性,我们将这个损失乘以λcoord(默认值是5)。

置信度损失

如果在一个框中,有物体被检测到了,置信度的损失为:
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
如果在一个框中,没有物体检测到,置信度损失为:
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
大多数框不包含任何物体。这就造成了类不平衡的问题,即我们训练模型检测背景的频率比检测物体的频率要高。为了弥补这一点,我们将这个损失的权重降低,通过一个因子λnoobj(默认值为0.5)。

损失

最终的损失包括定位损失、置信度损失和分类损失。
(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
推理:非极大值抑制

YOLO会对同一物体进行重复检测。为了解决这个问题,YOLO使用了非最大抑制来删除置信度较低的重复的框。非最大抑制在对mAP能增加2-3%。

下面是其中一种非最大抑制实现:

1、根据置信度得分对预测进行排序。
2、从最高分开始,如果我们发现任何一个预测,和之前的预测有相同的类并且IoU > 0.5,那么就忽略掉当前的预测。
3、重复步骤2,直到检查完所有预测。

YOLO的优点

1、快,适合实时处理。
2、预测(物体位置和类)由单个网络进行。可进行端到端训练,提高精度。
3、YOLO更一般化。当从自然图像推广到其他领域(如艺术品)时,它的性能优于其他方法。

(一)Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(YOLO)
1、区域建议方法将分类器限制在特定区域。YOLO在预测边界框时访问整个图像,YOLO在背景区域显示的假阳性更少。
2、YOLO每个网格单元检测一个对象。它加强了预测的空间多样性。

YOLOv2(后续)

原文:https://medium.com/@jonathan_hui/real-time-object-detection-with-yolo-yolov2-28b1b93e2088