Yolo V1原理及应用
作者:互联网
- YOLO的CNN网络将输入的图片分割成网格,每个单元格负责去检测那些中心点落在该格子内的目标,如图所示,可以看到车这个目标的中心落在右下角一个单元格内,那么该单元格负责预测这个车。
- 每个单元格会预测B个边界框(bounding box)以及边界框的置信度(confidence score)
- 所谓置信度其实包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度,置信度可以定义为
- 前者记为Pr(object),当该边界框是背景时(即不包含目标)为0,当该边界框包含目标时为1.
- 后者边界框的准确度用预测框和实际框的IoU来表示
- 所谓置信度其实包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度,置信度可以定义为
- 边界框的大小和位置用4个数值来表示,(x, y, w, h),其中(x,y)是边界框的中心坐标,而w和是边界框的宽与高,还有一点要注意,中心坐标的预测值是相对于每个单元格左上角坐标点的偏移值,并且单位是相对于单元格大小的,单元格的坐标定义如上图所示。而边界框的和预测值是相对于整个图片的宽与高的比例,这样理论上4个元素的大小应该在范围。这样,每个边界框的预测值实际上包含5个元素:,其中前4个表征边界框的大小与位置,而最后一个值是置信度
- 分类问题,对于每一个单元格其还要给出预测出C个类别概率值,该单元格负责预测的边界框其目标属于各个类别的概率。这些概率值其实是在各个边界框置信度下的条件概率,即。
- YOlO v1算法中,一个单元只预测一组类别概率值,这是v1算法的一个缺点,在后来的改进版本中,YOLO 9000是把类别概率预测值与边界框是绑定在一起的。
- 我们可以计算出各个边界框类别置信度(class-specific confidence scores):
- 边界框类别置信度表征的是该边界框中目标属于各个类别的可能性大小以及边界框匹配目标的好坏。后面会说,一般会根据类别置信度来过滤网络的预测框
- 每个单元格需要预测(B*5+C)个值。如果将输入图片划分为网格,那么最终预测值为大小的张量。整个模型的预测值结构如下图所示。对于PASCAL VOC数据,其共有20个类别,如果使用,那么最终的预测结果就是大小的张量。在下面的网络结构中我们会详细讲述每个单元格的预测值的分布位置。
YOLO采用卷积网络来提取特征,然后使用全连接层来得到预测值。网络结构参考GooLeNet模型,包含24个卷积层和2个全连接层,如图4所示。对于卷积层,主要使用1x1卷积来做channel reduction,然后紧跟3x3卷积。对于卷积层和全连接层,采用Leaky ReLU激活函数:。但是最后一层却采用线性激活函数
可以看到网络的最后输出为7*7*30大小的张量。这和前面的讨论是一致的,这个张量所代表的具体含义如图9所示。对于每一个单元格,前20个元素是类别概率值,然后2个元素是边界框置信度,两者相乘可以得到类别置信度,最后8个元素是边界框的。大家可能会感到奇怪,对于边界框为什么把置信度和都分开排列,而不是按照这样排列,其实纯粹是为了计算方便,因为实际上这30个元素都是对应一个单元格,其排列是可以任意的。
- 缩进即每个box属于什么类别,需要注意一个网格只预测一次类别,即默认每个网格中的所有B个bounding box都是同一类。
综上所述,YOLO的最终误差为下:
Loss = λcoord * 坐标预测误差 + (含object的box confidence预测误差 + λnoobj * 不含object的box confidence预测误差) + 类别预测误差
标签:单元格,置信度,边界,预测值,Yolo,V1,类别,原理,预测 来源: https://blog.csdn.net/SerendipityZYS/article/details/120617272