当前位置:   article > 正文

YOLO v1原理解析_yolov1和yolov2的原理

yolov1和yolov2的原理

       目标检测网络兴起的那几年,最火的就是大家所熟知的R-CNN系列,正是因为R-CNN系列是two-stage两阶段的检测网络,所以其检测速度比较慢,这个时候就有大神将two-stage整合成one-stage,设计出了YOLO网络,意思是you only look ones,下面就讲解一下YOLO网络的检测原理

网络结构

YOLO的网络结构很简单,基本的卷积层+最后两个全连接层

               

网络的输入输出

输入:图片,resize成448*448,将图片分成7*7的网格(grid)

输出:经过网络处理后,最终输出7*7*30的矩阵,该矩阵中就包含着网络的预测结果.至于为什么要输出这样尺寸的矩阵,先上图再进行详细讲解

                    

  • 输出的7*7矩阵的每一个点对应的是输入的7*7的一个网格(grid)
  • 输出的7*7矩阵的每一个点,是是一个1*1*30的向量,其中存储着网络对某一个grid的预测结果

                     

前10维储存着两个bounding box的位置信息(2*4)+置信度(2*1),后20维储存着对20个类别的预测概率

  • bounding box的位置表示

       bounding box需要4个数值来表示其位置,(Center_x,Center_y,width,height)

  • bounding box的置信度

      置信度计算公式如下:

                           

      表示的是预测框和真实框的IOU,指的是该框包含物体的概率,并不是对每个类别进行分类预测,可以理解为前景和背景的预测.

网络训练

        知道了YOLO的网络结构和输入输出,那么YOLO是如何进行训练的呢?网络训练需要两点:物体的真实标签和计算真实标签与预测值误差的损失函数.

物体真实标签的构造

       如下图所示,真实物体的边界框的中心点在哪个grid中,则该grid负责物体的预测.因此需要对该grid构造标签

                                             

以自行车为例,自行车的中心点落在了3行4列的grid中,则该grid的标签应该设置如下

  • 20个对象的分类概率

       自行车的中心点落在了3行4列的grid,则代表自行车类别的概率为1其他为0

  • 2个bounding box位置

      有两个存储自行车边框位置的区域,那么怎么确定要填在哪个区域呢?答案是训练过程中动态确定:网络对两个bounding box输出预测位置,哪个bounding box与自行车边框的IOU大就将自行车真实边框放在哪个区域.上图假设bounding box1与自行车真实边框的IOU大,所以边框坐标填在了两个黄色区域的第一个

  • 2个bounding box的置信度

      根据上面自行车真实边框动态确定在bounding box1,那么对应的其置信度就为了,bounding box2的置信度自然为0

损失函数

       网络损失就是预测结果与真实标签的偏差,如下图所示

     YOLO的损失函数设计如下

网络预测

       网络训练好之后,对于一个新的图像,经过网络的处理,最后输出一个7*7*30的矩阵,到这里还没有结束,YOLO采用NMS(Non-maximal suppression,非极大值抑制)算法去除大量重叠率高的预测框

NMS步骤如下:
1)设置一个Score的阈值,低于该阈值的候选对象排除掉(将该Score设为0)
2)遍历每一个对象类别
 2.1)遍历该对象的98个得分
  2.1.1)找到Score最大的那个对象及其bounding box,添加到输出列表
  2.1.2)对每个Score不为0的候选对象,计算其与上面2.1.1输出对象的bounding box的IOU
  2.1.3)根据预先设置的IOU阈值,所有高于该阈值(重叠度较高)的候选对象排除掉(将Score设为0)
  2.1.4)如果所有bounding box要么在输出列表中,要么Score=0,则该对象类别的NMS完成,返回步骤2处理下一种对象
3)输出列表即为预测的对象

-----------------------------------------------------------------------------------------------------------------------------------------------------------

补充说明

之前一直不太理解为什么某一个grid可以预测比其尺寸大很多的物体,最近感觉想通了,给出自己的理解.

  • 图片分成网格,只是为了训练时确定物体的中心点位置,而训练图像本身并不是真的切分成网格输入网络的
  • conv层和pooling层都有读取并整合中心点周围的信息,随着一层层的深入,其读取并整合的信息就像水面的涟漪一样,覆盖范围逐渐向外扩散(随网络变深感受野逐渐变大也是同理),所以代表某一个grid的最终输出其实是包含grid周围一定范围内的信息的
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/584947
推荐阅读
相关标签
  

闽ICP备14008679号