实时物体检测:YOLO,YOLOv2和YOLOv3(一)

2019-08-08   AI公园
作者:Jonathan Hui
编译:ronghuaiyang

导读

昨天介绍了YOLOv3,发现大家对这一系列很感兴趣,从今天开始,会连载YOLO,YOLOv3,YOLOv3的相关内容,让大家更加清楚YOLO这一系列发展的过程。今天先介绍YOLO。

YOLO是一个以实时处理为目标的物体检测系统。我们将在本文中介绍YOLO、YOLOv2和YOLO9000。对于那些只对YOLOv3感兴趣的人,请转到文章底部。以下是YOLO网站提供的准确性和速度对比。

我们从下面我们自己的测试图像开始。

使用YOLO进行物体检测:

网格单元

为了便于讨论,我们对原始照片进行了剪裁。YOLO将输入图像划分为 S×S 个网格。每个网格单元仅预测一个对象。例如,下面的黄色网格单元格尝试预测中心(蓝点)位于网格单元格内的“person”对象。

每个网格单元预测固定数量的边界框。在本例中,黄色网格单元格预测两个边界框(蓝色框)来定位人员的位置。

然而,一个网格只预测一个物体的规则限制了检测到的物体之间的距离。因此,YOLO对物体之间的距离有一定的限制。如下图所示,左下角有9个圣诞老人,而YOLO只能检测到5个。

对于每个网格单元格,

  • 预测B个边界框,每个框有一个box置信度得分
  • 只检测一个对象,而不考虑边界框B的数量
  • 预测C个条件类的概率(每个类有一个概率)

在Pascal VOC上进行评估,YOLO使用7×7网格(S×S),2个边界框(B)和20个类(C)。

让我们来了解更多的细节。每个边界框包含5个元素:(x, y, w, h)和box置信度得分。置信度分数反映框中包含对象的可能性(object )以及边界框的准确性。我们通过图像的宽度和高度对边界框的宽度w和高度h进行规范化。xy是对应单元格的偏移量。因此,x, y, wh都在0和1之间。每个单元格有20个条件类概率。条件类probability是检测到的物体属于特定类的概率(每个单元格的每个类别有一个概率)。所以YOLO的预测输出的尺寸为(S, S, B×5 + C) = (7、7、2×5 + 20) = (7、7、30)。

YOLO的主要概念是建立一个CNN网络来预测一个(7,7,30)的张量。它使用一个CNN网络得到1024个通道的7×7的输出。YOLO用两个全连接层来进行7×7×2个边界框的预测(下图)。为了做出最终的预测,我们保留那些边界框置信度得分高(大于0.25)的盒子边界框作为最终的预测(右图)。

每个预测框的类置信度得分计算为:

它度量分类和定位的(物体所在的位置)的置信度。

我们可以很容易地混淆那些得分和概率项。这是数学上的定义,供你以后参考。

网络设计

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之间的平方和误差来计算损失。损失函数包括:

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

分类损失

如果物体被检测到了,每个单元格的分类损失为每个类的条件概率类的平方误差:

定位损失

定位损失测量的是预测的边界框的位置和尺寸的误差。我们只计算负责检测物体的框。

我们不希望在大框和小框中对绝对误差进行同等的加权。例如,一个大框的2像素误差和一个小框的2像素误差是一样的。为了部分解决这个问题,YOLO预测边框宽度和高度的平方根,而不是宽度和高度。此外,更加重视边界框的准确性,我们将这个损失乘以λcoord(默认值是5)。

置信度损失

如果在一个框中,有物体被检测到了,置信度的损失为:

如果在一个框中,没有物体检测到,置信度损失为:



大多数框不包含任何物体。这就造成了类不平衡的问题,即我们训练模型检测背景的频率比检测物体的频率要高。为了弥补这一点,我们将这个损失的权重降低,通过一个因子λnoobj(默认值为0.5)。

损失

最终的损失包括定位损失、置信度损失和分类损失。

推理:非极大值抑制

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

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

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

YOLO的优点

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

  • 区域建议方法将分类器限制在特定区域。YOLO在预测边界框时访问整个图像,YOLO在背景区域显示的假阳性更少。
  • YOLO每个网格单元检测一个对象。它加强了预测的空间多样性。

<未完,明天继续>

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

更多文章,请关注微信公众号:AI公园