赞
踩
目标检测网络兴起的那几年,最火的就是大家所熟知的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的矩阵,该矩阵中就包含着网络的预测结果.至于为什么要输出这样尺寸的矩阵,先上图再进行详细讲解
前10维储存着两个bounding box的位置信息(2*4)+置信度(2*1),后20维储存着对20个类别的预测概率
bounding box需要4个数值来表示其位置,(Center_x,Center_y,width,height)
置信度计算公式如下:
表示的是预测框和真实框的IOU,指的是该框包含物体的概率,并不是对每个类别进行分类预测,可以理解为前景和背景的预测.
知道了YOLO的网络结构和输入输出,那么YOLO是如何进行训练的呢?网络训练需要两点:物体的真实标签和计算真实标签与预测值误差的损失函数.
物体真实标签的构造
如下图所示,真实物体的边界框的中心点在哪个grid中,则该grid负责物体的预测.因此需要对该grid构造标签
以自行车为例,自行车的中心点落在了3行4列的grid中,则该grid的标签应该设置如下
自行车的中心点落在了3行4列的grid,则代表自行车类别的概率为1其他为0
有两个存储自行车边框位置的区域,那么怎么确定要填在哪个区域呢?答案是训练过程中动态确定:网络对两个bounding box输出预测位置,哪个bounding box与自行车边框的IOU大就将自行车真实边框放在哪个区域.上图假设bounding box1与自行车真实边框的IOU大,所以边框坐标填在了两个黄色区域的第一个
根据上面自行车真实边框动态确定在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可以预测比其尺寸大很多的物体,最近感觉想通了,给出自己的理解.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。