Yolov1

作者: 帆人自书 | 来源:发表于2021-09-01 12:00 被阅读0次

贴两个yolov1写的比较好的链接:

目标检测|YOLO原理与实现:https://zhuanlan.zhihu.com/p/32525231

你一定从未看过如此通俗易懂的YOLO系列(从v1到v5)模型解读:https://zhuanlan.zhihu.com/p/183261974

1 传统的目标检测

在Yolo之前我们使用分类器的思想检测目标,分类的结果是one-hot向量,而目标检测的结果是一个框(Bounding Box),目标检测输出vector和分类模型输出的vector本质上没有区别,目标检测就是利用滑动窗口多次执行分类任务,所以我们可以使用滑动窗口+分类执行目标检测任务,这就是传统的目标检测。但是有一个问题,如果一张400*400的图片,则需要检测160000个位置,而每个目标的大小不同,我们又需要设置不同大小的遍历框,这个遍历的次数会是无限次

2 Yolov0

到现在为止,我们用分类的算法设计了一个检测器,它存在着各种各样的问题,现在是优化的时候了。YOLO的作者当时是这么想的:你分类器输出一个one-hot vector,那我把它换成(c,x,y,w,h),c表示confidence置信度,把问题转化成一个回归问题,直接回归出Bounding Box的位置不就好了吗?

传统的方法为什么没有这么做呢?我想肯定是效果不好,终其原因是算力不行,conv操作还没有推广。

那如何组织训练呢?找1000张图片,把label设置为(1,x*,y*,w*,h*) ,x*代表真值。有了数据和标签,就完成了设计。我们会发现,这种方法比刚才的滑动窗口分类方法简单太多了。这一版的思路我把它叫做YOLO v0,因为它是You Only Look Once最简单的版本。

3 Yolov1简介

yolov0只能输出一个目标,那如果多目标应该怎么办呢,有人可能会提出让yolov0输出多个向量,但具体输出多少呢?我们可以使输入目标数目N尽量的大,但这不是最优的,yolov1就提出了把图片切分成7*7的网格(grid),每个网格生成B个框负责预测一个目标。但是如果一个目标占据多个网格应该设置哪个网格的c为1呢(一个目标仅有一个网格的c为1)?答:我们看这个目标的中心落在哪个网格就设置该网格的c为1。

图1 Yolov1

4 Yolov1原理

Yolo采用卷积网络来提取特征,然后使用全连接层来得到预测值。网络结构参考GooLeNet模型,包含24个卷积层和2个全连接层,如图8所示。对于卷积层,主要使用1x1卷积来做channle reduction,然后紧跟3x3卷积。对于卷积层和全连接层,采用Leaky ReLU激活函数: max(x,0.1x) 。但是最后一层却采用线性激活函数。网络的最后输出为7*7*30大小的张量。

图2 网络结构

对于每一个单元格,前20个元素是类别概率值,然后2个元素是边界框置信度,两者相乘可以得到类别置信度,最后8个元素是两个边界框的box

整体来看,Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测,整个系统如图3(预测阶段)所示:首先将输入图片resize到448x448,然后送入CNN网络,最后处理网络预测结果得到检测的目标。相比R-CNN算法,其是一个统一的框架,其速度更快,而且Yolo的训练过程也是end-to-end的。

图3  Yolo检测系统

具体来说,Yolo的CNN网络将输入的图片分割成S*S网格,然后每个单元格负责去检测那些中心点落在该格子内的目标,如图4所示,可以看到狗这个目标的中心落在左下角一个单元格内,那么该单元格负责预测这个狗。每个单元格会预测B个边界框(bounding box)以及边界框的置信度(confidence score)。所谓置信度其实包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度。前者记为Pr(Object),当该边界框是背景时(即不包含目标),此时Pr(Object)=0,而当该边界框包含目标时,Pr(Object)=1边界框的准确度可以用预测框与实际框(ground truth)的IOU(intersection over union,交并比)来表征,记为IOU_{pred}^{true},因此置信度可以定义为Pr(Object)*IOU_{pred}^{true}。还有一点要注意,中心坐标的预测值(x,y)是相对于每个单元格左上角坐标点的偏移值,并且单位是相对于单元格大小的,单元格的坐标定义如图6所示。而边界框的wh预测值是相对于整个图片的宽与高的比例,这样理论上4个元素的大小应该在[0,1]范围。这样,每个边界框的预测值实际上包含5个元素:(x,y,w,h,c),其中前4个表征边界框的大小与位置,而最后一个值是置信度。

图4 网格划分

还有分类问题,对于每一个单元格其还要给出预测出C个类别概率值,其表征的是由该单元格负责预测的边界框其目标属于各个类别的概率。但是这些概率值其实是在各个边界框置信度下的条件概率,即 

Pr(class_{i} |object) 。值得注意的是,不管一个单元格预测多少个边界框,其只预测一组类别概率值,这是Yolo算法的一个缺点,在后来的改进版本中,Yolo9000是把类别概率预测值与边界框是绑定在一起的。同时,我们可以计算出各个边界框类别置信度(class-specific confidence scores):

Pr(class_{i} |object)*Pr(Object)*IOU_{pred}^{true}=Pr(class_{i})*IOU_{pred}^{true}

边界框类别置信度表征的是该边界框中目标属于各个类别的可能性大小以及边界框匹配目标的好坏。后面会说,一般会根据类别置信度来过滤网络的预测框。总结一下,每个单元格需要预测(B*5+C)个值。如果将输入图片划分为S*S网格,那么最终预测值为S*S*(B*5+C)大小的张量。整个模型的预测值结构如下图所示。对于PASCAL VOC数据,其共有20个类别,如果使用S=7,B=2,那么最终的预测结果就是7*7*30大小的张量。在下面的网络结构中我们会详细讲述每个单元格的预测值的分布位置。

图5 模型预测值结构

如何生成目标lables?

答:遍历每个网格,在每个网格中遍历每个标记框,如果有标记框的中心点落在该网格中,设置该网格为(1,x,y,w,h),xy为标记框的中心点相对于当前网格的偏移量。如果多个标记框落入一个网格,则后一个标记框的box的覆盖前一个标记框的box。

5 Yolov1训练

yolo的训练与预测是分开进行的,yolov1训练时候,首先利用模型对每个网格预测2个回归框的坐标、置信度和类别,然后要找出目标框的坐标、置信度、类别(具体做法是:遍历7*7个网格,每次遍历中再去遍历每个标记框,若该标记框的中心落在该网格中,再去该网格中找一个预测出的回归框与该标记框IOU最大的那个位置(第i个网格第j个预测框),将该位置对应的目标框的置信度设为1(即1_{ij}^{obj} =1)并将标记框的坐标赋给目标框,即说明该目标框负责预测物体,而其他的目标框置信度默认为0,坐标值也不用回归),最后利用loss函数做梯度下降,使预测出的值更准确。最终的损失函数计算如下:

图6 Yolov1 loss函数

6 Yolov1预测

yolov1预测时候,使用NMS找到最优的识别框。首先从所有的检测框中找到置信度最大的那个框,然后挨个计算其与剩余框的IOU,如果其值大于一定阈值(重合度过高),那么就将该框剔除;然后对剩余的检测框重复上述过程,直到处理完所有的检测框。

图7 NMS应用在人脸检测

yolov1具体预测如图8:对于98个boxes,首先将小于置信度阈值的值归0,然后分类别地对置信度值采用NMS,这里NMS处理结果不是剔除,而是将其置信度值归为0。最后才是确定各个box的类别,当其置信度值不为0时才做出检测结果输出。

图8 yolov1预测

相关文章

  • 详解 YOLOv2

    YOLOv2 简单回归 YOLOv1 yolov1 中存在问题 yolo 难以应付小目标 yolo 漏检,也就是召...

  • YOLOv1——YOLOv5

    YOLOv1 YOLOv1提出单阶段anchor-free的目标检测方法将图像分为SxS的grid cell,每个...

  • YOLOv1, SSD

    YOLOv1, SSD 今年四月份的时候,在一个研究院实习时学习了YOLOv1, SSD系列Object Dete...

  • YoloV1

    YOLO(You Only Look Once)是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度...

  • Yolov1

    贴两个yolov1写的比较好的链接: 目标检测|YOLO原理与实现:https://zhuanlan.zhihu....

  • YOLOv1 随笔

    YOLO 系列 YOLOv1 作者 AlexAB 计算机视觉 随着深度学习中卷积神经网络的发展,掀起了一次目标检测...

  • yolo

    https://pjreddie.com/darknet/yolo/ 一、是什么从YOLOv1到YOLOv3,目标...

  • detection_layer层的实现

    detection_layer对应Yolov1的实现,理解detection_layer的实现主要需要理解Yolo...

  • [图像算法]-死磕YOLO系列,YOLOv2的自我修养

    前言 系列文章:死磕YOLO系列,YOLOv1 的大脑、躯干和手脚[https://www.jianshu.com...

  • YOLOv1学习笔记

    YOLO 全称You Only Look Once,属于目标检测算法的One-Stage算法,One-Stage和...

网友评论

      本文标题:Yolov1

      本文链接:https://www.haomeiwen.com/subject/pzlxwltx.html