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

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Jonathan Hui

编译:ronghuaiyang

导读

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

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

640?wx_fmt=png

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

640?wx_fmt=jpeg

使用YOLO进行物体检测:

640?wx_fmt=png

网格单元

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

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

对于每个网格单元格,

  • 预测B个边界框,每个框有一个box置信度得分

  • 只检测一个对象,而不考虑边界框B的数量

  • 预测C个条件类的概率(每个类有一个概率)

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

640?wx_fmt=jpeg

让我们来了解更多的细节。每个边界框包含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)。

640?wx_fmt=jpeg

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

640?wx_fmt=png

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

640?wx_fmt=png

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

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

640?wx_fmt=png

网络设计

640?wx_fmt=png

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之间的误差)。

  • 置信度损失

分类损失

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

640?wx_fmt=png

定位损失

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

640?wx_fmt=png

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

置信度损失

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

640?wx_fmt=png

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

640?wx_fmt=png

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

损失

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

640?wx_fmt=png

推理:非极大值抑制

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

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

  1. 根据置信度得分对预测进行排序。

  2. 从最高分开始,如果我们发现任何一个预测,和之前的预测有相同的类并且IoU > 0.5,那么就忽略掉当前的预测。

  3. 重复步骤2,直到检查完所有预测。

YOLO的优点

  • 快,适合实时处理。

  • 预测(物体位置和类)由单个网络进行。可进行端到端训练,提高精度。

  • YOLO更一般化。当从自然图像推广到其他领域(如艺术品)时,它的性能优于其他方法。

640?wx_fmt=png

  • 区域建议方法将分类器限制在特定区域。YOLO在预测边界框时访问整个图像,YOLO在背景区域显示的假阳性更少。

  • YOLO每个网格单元检测一个对象。它加强了预测的空间多样性。

<未完,明天继续>

640?wx_fmt=png— END—

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

640?wx_fmt=gif

人人都能看得懂的深度学习介绍!全篇没有一个数学符号!

深度学习物体检测论文阅读路线图以及官方实现

新手必看的Top10个机器学习算法(这些都学会了你就是老手了

更多历史文章请关注公众号,点击“历史文章”获取


640?wx_fmt=jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧640?wx_fmt=gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值