YOLOv1——YOLO系列的开山之作

系列文章目录

YOLOv1——YOLO系列的开山之作



前言

本篇文章是目标检测算法YOLO系列的第一篇文章,向大家介绍了YOLO算法的开山之作——YOLOv1。我会把我认为YOLO论文中最核心的思想和最重要的细节尽可能地给读者呈现出来,现在就让我们一起推开YOLO的大门,一起去认识YOLO是如何在目标检测中占有一席之地的吧!


一、简介

首先,向大家介绍一下目标检测的两个主要流派,一个就是以R-CNN系列为代表的两阶段模型,另外一个就是YOLO系列和SSD的单阶段模型。YOLO就是单阶段检测的开创者,单阶段网络的最大特点就是速度快。YOLO的意思就是You Only Look Once,是不是光听这个名字就能够知道这个YOLO是真的快啊!YOLO可以实时地处理图片达到45FPS的速度,这在当时可以称的上最快的目标检测算法了。所以接下来就让我们一起看看YOLO是如何做到这么“快”的!


二、网络结构

首先,我们先来看看YOLO的网络架构是如何构成的。YOLO也是利用卷积神经网络提取图片的特征,然后对提取到的特征进一步的处理得到我们想要的信息。
在这里插入图片描述

  • 网络输入:448x448x3的图片。(原文中说明了先在ImageNet上预训练的时候输入的图片大小是224x224)
  • 中间层:由24层的卷积层和最大池化层组成。
  • 全连接层:两个全连接层。
  • 网络输出:7x7x30的预测结果。

三、算法思想

3.1、检测思想

YOLO的核心思想很简单,就是把检测这个任务当作一个回归任务来完成。将输入的图片划分为SxS的网格,并且每一个网格负责预测出B个包围框的坐标(中心点x,y;宽:w;高:h),以及包围框的置信度,最后还有每一个网格C个类别的概率分别是多少。这样算的话,每一个网格都要检测Bx(4+1+C)个数值,那么一张图片就要检测出SxSx(Bx5+C)的张量来。这个过程其实叫做编码,就是把这些信息全部转化成张量的形式进行输出,当测试的时候再提取张量中的信息解码成图片中的预测框还有框中目标的类别以及置信度。

说了这么多,下面这张图就体现了具体的实现过程:
在这里插入图片描述

  1. 先将图片分成SxS的网格。如果在训练的时候,有一个目标的中心落在了某一个网格的里面,那么这个网格就负责去学习这个目标的真实框。
  2. 这个网格需要输出B个预测框的信息,包括B个预测框的位置和置信度。预测框的位置很好理解,但是置信度有一点抽象。其实这个置信度就是预测框和真实框之间的IOU,这里要注意的就是,在训练的时候如果这个网格里面没有物体的话,那么这个置信度是没有意义的,我们需要直接将它变为0。
  3. 每一个网格还需要预测这个网格的类别。(这里其实也算是YOLO的一个缺点了,一个网格只能是一种类别,那么这个网格里面所有的预测框预测出来的目标都必须是这种类别了,如果两种目标的中心都落在了同一个网格里面,那么这个时候YOLO就束手无策了)

3.2、损失函数

YOLO的损失函数看上去比较复杂,其实仔细研究一下会发现还是很清晰易懂的。话不多说,先上图:
在这里插入图片描述

  1. 先看第一行和第二行,因为我们在训练的时候如果某个真实框的中心位置落在了某个网格里面的时候,YOLO并不是让这个网格里面的B个预测框都去学习这个真实框,而只是选择那个预测出的包围框和这个真实框IOU最大的预测框去学习真实框的坐标。所以我们要选出符合条件的那些预测框来去学习,其它的预测框我们全部抛弃。
  2. 再来看第三行和第四行,上面说过了不是所有预测框都会去学习真实框的,所以只有那些学习真实框的预测框才是包含了目标的。这些包含了目标的预测框就需要去学习置信度,那么没有目标的预测框不但不需要去学习坐标,还得学着降低自己的置信度,因为没有目标的存在,置信度是没有任何意义的。
  3. 最后一行就是对每一个网格的类别损失了,同样只对那些包含了物体的网格进行学习。

讲到这里,损失函数的大概意思都能理解的差不多了。但是依旧还是有一些小问题没有解决,下面我们进行更加细节的讨论:

  • 首先,定位任务明显是要比分类任务更难,更需要大的损失让定位更加的精准。所以,我们应该赋予定位损失更大的权重。这就是第一行和第二行前面的那个参数的意义,YOLO将它设置成5。
  • 其次,预测大目标和预测小目标产生的相同的偏差,它们的单位是一样的,但是在实际效果上,这个偏差对大目标的影响明显会小于对小目标的影响。所以,我们应该缓和这种不公平的现象。于是,YOLO将框的宽和高开根号,一定程度上解决了这个问题。
  • 最后,一张图片中,不包含目标的预测框肯定是多于包含目标的预测框的。所以,大量不包含目标的预测框会逐渐因为数量优势左右损失函数。这是我们不希望看到的,因为我们的损失函数是为了让网络更好地去学习那些目标的信息。YOLO赋予不包含目标的预测框的损失更小的权重,故将第四行前面那个系数设为0.5。

3.3 、推断

YOLO推断的核心我认为就是下面这个公式了,因为我们就是根据下面这个公式求出来的分数进行NMS,确定最后哪些预测框是我们想要保留的。
在这里插入图片描述

  1. 等式左边第一项代表了某一类别的概率,第二项就是预测框的置信度,两项相乘之后可以表达出预测框对这类物体的预测好坏。
  2. YOLO根据所有预测框的这个分数去做NMS,就可以得到我们最终的结果了。

四、性能表现

4.1、优点

  1. 一个字就是快,YOLO极速版可以达到155FPS的处理速度。
  2. YOLO的实时检测的平均精度高。
  3. 不同领域的泛化能力强,从自然风景到艺术品,YOLO都可以从容应对。

4.2、缺点

  1. YOLO的一个网格就预测了两个框,如果面对成群结对的鸟群,YOLO根本就无法检测出。因为YOLO的每个网格的检测框类别都是一样的,所以不同类别的目标离得太近,检测效果也很差。
  2. YOLO对不同角度的泛化能力也不是很好。
  3. YOLO的损失函数对大小目标的定位误差的平衡上使用的优化方法并不是特别好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值