目标检测之YOLO_v1解读

YOLO:You Only Look Once: Unified, Real-Time Object Detection,入门小白,若博文有不妥之处,望加以指点,笔者一定及时修正。

① 全文翻译


摘要

我们提出了一种新的物体检测方法YOLO。 先前工作重新训练分类器来执行检测。 相反,我们将目标检测作为回归问题,空间上分离边界框和相关的类概率,也就是Bounding Box和Class Probabilities。 单个神经网络在一次评估中直接从一张完整图像中预测边界框和类概率。 整个检测流水线过程是单个网络,因此可以直接在检测上进行端到端优化。

我们的统一网络架构非常快。 我们的基础YOLO模型可以以每秒45帧的速度实时处理图像。 较小版本的网络Fast YOLO每秒可以处理惊人的155帧,同时仍然可以达到其他实时检测器的mAP的两倍。 与最先进的检测系统相比,YOLO产生更多的定位误差,但不太可能预测背景上的误报。 最后,YOLO学习了对象的非常一般的表示。 当从自然图像推广到其他领域(如艺术品)时,它优于其他检测方法,包括 DPM 和 R-CNN。


1、引言

人类扫了一眼图像,立即知道图像中的物体,它们在哪里,以及它们如何相互作用。 人类视觉系统快速而准确,使我们能够在很少意识的情况下执行复杂的任务。 快速,准确的物体检测算法将允许计算机在没有专用传感器的情况下驾驶汽车,使辅助设备能够向人类用户传达实时场景信息,潜力巨大。

当前关于目标检测的检测系统大多数是重新训练分类器进行检测。 为了检测目标,这些系统对目标采用分类器并在不同位置对其进行检测评估并在测试图像中进行缩放。 像DPM这样的系统使用滑动窗口方法,其中分类器在整个图像上以均匀间隔的位置运行。

像R-CNN这样的最新方法使用区域建议方法首先在图像中生成潜在的边界框,然后在这些潜在的框上运行分类器。 分类后,后处理操作用于重新定义边界框,消除重复检测,并根据场景中的其他对象重新排列框。 这些复杂的过程很慢且难以优化,因为每个单独的部分必须单独进行培训。因为 proposal 和 classification 是分开的过程。

我们将对象检测重新定义为单个回归问题,直接从图像像素得到边界框坐标类概率。 使用我们的系统,你只需在图像上查看一次(YOLO)即可预测出现的对象和位置。

YOLO简洁明了:参见图1.单个卷积网络同时预测这些目标的多个边界框和类概率。 YOLO训练全图像并直接优化检测性能。 这种统一模型与传统的物体检测方法相比有几个好处。

首先,YOLO非常快。 由于我们将检测框架作为回归问题,因此我们不需要将这个检测过程分为几个复杂的过程。 我们只是在测试时在新图像上运行我们的神经网络来预测检测。此外,YOLO的MAP是其他实时系统的两倍多。

其次,YOLO在进行预测时全局了解图像与滑动窗口和基于proposal的f方法不同,YOLO在训练和测试时间内看到整个图像,因此它包含了上下文信息。 与Fast R-CNN相比,YOLO的背景错误数量不到一半。

第三,YOLO学习对象的一般化表示(泛化能力强)。 在对自然图像进行训练并对艺术作品进行测试时,YOLO很大程度上优于DPM和R-CNN等顶级检测方法。 由于YOLO具有很高的泛化能力性,因此在应用于新的域或意外输入时不太可能发生故障。 YOLO在准确性方面仍然落后于最先进的检测系统。 虽然它可以快速识别图像中的物体,但它很难精确地定位某些物体,特别是小物体。
图一
图1:a) resize image into 448x448 ;
b)然后输进一个卷积神经网络;
c)非极大值抑制,消除重复框;


2、检测细节

我们将目标检测的几个单独的过程中统一到单个神经网络中。 我们的网络使用整个图像中的特征来预测每个边界框。 它还同时预测所有类的所有边界框。 这意味着我们的网络全局了解整个图像和图像中的所有对象。 YOLO设计支持端到端训练和实时速度,同时保持较高的平均精度。

我们的系统将输入图像分成S×S网格。 如果对象的中心落入网格单元格中,则该网格单元格负责检测该对象。每个网格单元预测 B个边界框和置信分数。 这些置信分数反映了模型是如何预测格子里面是否包含一个物体,以及它对格子预测的准确程度(也就是预测框和真实框之间的IOU)。 在形式上我们定义为Pr(Object)* IOUtruth - pred。 如果该单元格中不存在对象,则Pr(Object)应为零,否则,Pr(Object)为1。我们希望置信分数等于预测框和地面实况之间的联合交叉(IOU)。

每个预测框框由5个预测组成:x,y,w,h 和 confidence(置信度)。 (x,y)坐标表示相对于网格单元边界的预测框的中心。w,h 表示相对于整个图像预测的框宽度和高度。 最后,置信度代表预测框和任何地面实况框之间的IOU。

每个网格单元还预测C条件类概率Pr(Class_i | Object)。 有这个概率的条件是:网格单元包含对象的中心点。 我们只预测每个网格单元的一组类概率,而不管预测的方框 B 的数量。(这边就有一个缺陷,小目标小,两个小目标的中心点落在同一个网格中,这个网格只能检测出一个物体。)

在测试时,我们将条件类概率与单个框的置信预测相乘:
在这里插入图片描述
这就可以得到每个框的每个特定类的置信度分数。这个分数表示:该类出现在这个预测框里面的概率以及预测框与真实框的相交程度。
在这里插入图片描述
图2:模型。我们的系统将检测模型作为回归问题。 它将图像划分为S×S网格,并且每个网格单元预测B边界框,这些框的置信度(x,y,w,h,c)和C类概率(VOC是20类)。 这些预测最后为S×S×(B * 5 + C)张量。

为了评估POLCAL VOC上的YOLO,我们使用S = 7,B = 2。PASCAL VOC有20个标记类别,因此C = 20。我们的最终预测是7×7×30张量。


2.1 网络设计

我们将此模型实现为卷积神经网络,并在PASCAL VOC检测数据集上进行评估。 网络的前部分卷积层从图像中提取特征,而全连接的层预测输出概率和类坐标

我们的网络架构受到用于图像分类的GoogLeNet模型的启发。 我们的网络有24个卷积层,后面是2个全连接的层。 而不是GoogLeNet使用的初始模块,我们简单地使用1×1减少层,然后使用3×3卷积层。 完整的网络如图3所示:

我们还训练快速版的YOLO,旨在突破快速物体检测的界限。 快速YOLO使用具有较少卷积层(9而不是24)的神经网络,并且在这些层中使用较少的过滤器。 除了网络的大小,YOLO和Fast YOLO之间的所有训练和测试参数都是相同的。我们网络的最终输出的是预测的7×7×30张量。
在这里插入图片描述
图3:架构。 我们的检测网络有24个卷积层,后面是2个全连接层。 交替的1×1卷积层减少了前面层的特征空间。 我们在ImageNet分类任务上以一半的分辨率(224×224输入图像)预先训练卷积层,然后将分辨率加倍以进行检测。

2.2 训练

我们在ImageNet 1000级竞赛数据集上预先训练我们的卷积层。 对于预训练,我们使用图3中的前20个卷积层,然后是平均池和完全连接的层。 我们训练这个网络大约一周,并在ImageNet 2012验证集上实现88%的单一作物前5精度,与Caffe模型动物园中的GoogLeNet模型相当。 我们使用Darknet框架进行所有培训和推理。

然后我们转换模型以执行检测。 有研究表明将卷积和连接层添加到预训练网络可以提高性能。 依照他们的实验,我们添加四个卷积层和两个完全连接的层,随机初始化权重。 检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224×224增加到448×448。

我们最后面的全连接层预测了类概率和边界框坐标。 我们将边界框宽度和高度按图像宽度和高度比例缩放,使它们落在0和1之间。我们将边界框x和y坐标参数化为特定网格的偏移,因此它们也在0和1之间。

我们对全连接层使用线性激活函数,其他层使用以下LReLu:
在这里插入图片描述
我们使用输出的求和平方误差进行优化,因为它很容易优化,但它与我们最大化平均精度的目标并不完全一致。 它将定位误差与分类误差相等地加权,这可能并不理想。 此外,在每个图像中,许多网格单元是不包含任何对象的。 这将这些单元格的“信心”分数置于0。

为了解决这个问题,我们增加了边界框坐标预测的损失,并减少了不包含对象的框的置信预测损失。 我们使用互参数,λcoord和λnoobj来完成这个。 我们设置 λcoord= 5 和 λnoobj= 0.5。

求和误差也同样可以加大目标和小目标中的误差。 我们的误差度量方案应该反映出大目标中的小偏差比小目标中的小偏差更重要。 为了部分解决这个问题,我们直接预测是边界框宽度和高度的平方根,而不是宽度和高度。

YOLO预测每个网格单元有B个边界框。 在训练时,我们只希望一个边界框负责预测对象。 我们根据哪个预测具有最高当前IOU和有目标,将这个预测框分配为“负责”预测对象。

损失函数:
在这里插入图片描述


论文后半部分的实验细节,笔者就不描述啦。。。。想深究的童鞋可以细致的阅读论文。


② 阅读笔记及总结

① YOLO将输入图片划分成 S*S 个格子,每一个格子预测 B 个 bounding boxes 以及这些 bounding boxes 的confidence scores。数据集是VOC, 取S = 7,B = 2。每一个格子最终是出30维的向量,B=2时候,占10维, ( x 1 , y 1 , w 1 , h 1 , c 1 ; x 2 , y 2 , w 2 , h 2 , c 2 ) (x_1,y_1,w_1,h_1,c_1;x_2,y_2,w_2,h_2,c_2) x1,y1,w1,h1,c1;x2,y2,w2,h2,c2
坐标 x , y x,y x,y 代表了预测的 b o u n d i n g   b o x bounding \ box bounding box 的中心与格子边界的相对值。
坐标 w , h w,h w,h 代表了预测的 b o u n d i n g   b o x bounding \ box bounding box w i d t h 、 h e i g h t width、height widthheight 相对于整幅图像 w i d t h , h e i g h t width,height width,height 的比例。
c o n f i d e n c e confidence confidence 就是预测的 b o u n d i n g   b o x bounding \ box bounding box g r o u n d   t r u t h   b o x ground \ truth \ box ground truth box I O U IOU IOU 值。
那下面如何求 C o n f i d e n c e   s c o r e s Confidence \ scores Confidence scores
C o n f i d e n c e = P r ( O b j e c t ) ∗ I O U p r e d t r u t h Confidence = Pr(Object)*IOU^{truth}_{pred} Confidence=Pr(Object)IOUpredtruth如果这个格子里面不存在一个 O b j e c t Object Object,那么这个 C o n f i d e n c e   s c o r e s Confidence \ scores Confidence scores为 0;否则的话, C o n f i d e n c e   s c o r e s Confidence \ scores Confidence scores等于预测框与真实框之间的 IOU。这是针对每个 b o u n d i n g   b o x e s bounding \ boxes bounding boxes的。
每一个栅格还要预测 C C C c o n d i t i o n a l   c l a s s   p r o b a b i l i t y conditional \ class \ probability conditional class probability(条件类别概率): P r ( C l a s s i ∣ O b j e c t ) Pr(Classi|Object) Pr(ClassiObject)。即在一个栅格包含一个 O b j e c t Object Object的前提下,它属于某个类的概率。 我们只为每个栅格预测一组( C C C个)类概率,而不考虑框B的数量。剩下的20维是格子对于每一具体类的分数,因为VOC有20类。这是针对每个格子的。

②而在测试阶段:
这边是将每个网格的 c o n d i t i o n a l   c l a s s   p r o b a b i l i t y conditional \ class \ probability conditional class probability 与每个 bounding box 的 c o n f i d e n c e confidence confidence 相乘:
在这里插入图片描述
这样既可得到每个 b o u n d i n g   b o x bounding \ box bounding box 的具体类别的 c o n f i d e n c e   s c o r e confidence \ score confidence score,也就是预测的两个框对于每一个特定类的概率。
这乘积既包含了 b o u n d i n g   b o x bounding \ box bounding box 中预测的 c l a s s class class p r o b a b i l i t y probability probability 信息,也反映了 b o u n d i n g   b o x bounding \ box bounding box 是否含有 O b j e c t Object Object b o u n d i n g   b o x bounding \ box bounding box坐标的准确度。

③非极大值抑制(NMS)
在这里插入图片描述
NMS是大部分深度学习目标检测网络所需要的,大致算法流程为:
1.对所有预测框的置信度降序排序
2.选出置信度最高的预测框,确认其为正确预测(下次就没有他了,已经被确认了),并计算他与其他预测框的IOU
3.根据2中计算的IOU去除重叠度高的,IOU>threshold就删除
4.剩下的预测框返回第1步,直到没有剩下的为止
非极大值抑制参考链接:https://www.cnblogs.com/makefile/p/nms.html, 写的很好。

③YOLOV1将 候选区域 和 对象识别合二为一。YOLOV1 采用了预测框,把图片大致分成98个区域,每个区域看下有没有对象存在,以及具体位置在哪里。**RCNN使用边框回归:找到候选框,等真正识别出里面的对象以后,对候选框进行微调,使之更接近真正的 b o u n d i n g   b o x e s bounding \ boxes bounding boxesYOLOV1不去细致寻找这些候选框,而是有个大概的位置范围,直接边框回归。**那为什么这样会有作用呢?网上有位大牛的解释我觉得比较合理:分类中已经包含了位置信息,如同你看了猫的脸和身体,就能推测出耳朵和尾巴的位置。

④YOLO的网络结构:

在这里插入图片描述最后的输出层是使用线性函数做激活函数,因为需要预测 b o u n d i n g   b o x e s bounding \ boxes bounding boxes 的位置,这个位置是数值型,不仅仅是对象的概率。

⑤下面谈一下 B,也就是每个网格预测 B 个框。这个 b o u n d i n g   b o x e s bounding \ boxes bounding boxes F a s t e r   R C N N Faster \ RCNN Faster RCNN S S D SSD SSD A n c h o r Anchor Anchor是不一样的。因为 F a s t e r   R C N N Faster \ RCNN Faster RCNN S S D SSD SSD A n c h o r Anchor Anchor的框是预先设置好的,有不同的大小和宽高比。YOLO并没有预先设置2个bounding box的大小和形状,也没有对每个bounding box分别输出一个对象的预测。如果这个格子里面有对象,仅仅是对一个对象预测出2个bounding box,选择预测得相对比较准的那个。 这2个 b o u n d i n g   b o x e s bounding \ boxes bounding boxes,事先并不知道会在什么地方,经过前向计算,网络会输出2个 b o u n d i n g   b o x e s bounding \ boxes bounding boxes(也就是这两个预测框是网络训练出来的)。这两个 b o u n d i n g   b o x e s bounding \ boxes bounding boxes 与样本中对象的实际 g r o u n d   t r u t h ground \ truth ground truth 计算 IOU。这时候才会确定两个中哪一个来预测该对象的 b o u n d i n g   b o x bounding \ box bounding box

训练开始阶段,网络预测的bounding box可能都是乱来的,但总是选择IOU相对好一些的那个,随着训练的进行,每个bounding box会逐渐擅长对某些情况的预测(可能是对象大小、宽高比、不同类型的对象等)。所以,这是一种进化或者非监督学习的思想(而在YOLOV2中是使用了聚类 K − m e a n s K-means Kmeans进行选择框的)。


嘿!后期调试代码及代码解读会上传至Github,敬请期待!


参考:
1、https://blog.csdn.net/tianguiyuyu/article/details/81347846
2、https://www.jianshu.com/p/a0aa94ef8ab2
3、https://zhuanlan.zhihu.com/p/46691043(以上阅读笔记及总结中③④⑤参考该链接)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值