【YOLO系列】YOLO V1论文思想详解


前言

以下内容仅为个人在学习人工智能中所记录的笔记,先将目标识别算法yolo系列的整理出来分享给大家,供大家学习参考。

本文未对论文逐句逐段翻译,而是阅读全文后,总结出的YOLO V1论文的思路与实现路径。

若文中内容有误,希望大家批评指正。


在学习YOLO V1前,大家可自行下载一下文件:

YOLO V1的论文:You Only Look Once: Unified, Real-Time Object Detection

项目地址:官方地址


一、YOLO是什么?

YOLO全称为you only look once,中文意思是:你只看一次。也就是说看一次即可得出结果。

这也是YOLO算法的精髓所在:一次出结果,也就是大家熟悉的end-to-end模式。

在文章Abstract中,就直接说明了YOLO是将object detection当做一个regression problem

同时在摘要中也指出了YOLO V1的一系列优点:

1、速度快,检测速度可以达到45 FPS,Fast YOLO可以达到155 FPS;
2、假正例少;
3、泛化能力强。


二、YOLO V1的基本思想

YOLO V1是一个快速的end-to-end的目标检测算法,基本思想是:

将图片划分为S×S个网格,物体落在那个网格,那个网格就负责预测那个网格里面的物体的位置、置信度以及类别。

将object detection变为regression问题。


三、YOLO V1的整体思想

在这里插入图片描述
正如图中所示,YOLO V1的整体思路就是

Resize image —>Run convolutional network—> Non-max suppression

1、整体的检测过程

由于YOLO V1中使用了FC层,所以需要将输入的图片的尺寸resize为448×448,然后将图片划分为S×S个网格,如果物体的中心落入一个网格中,那这个网格就负责预测这个物体。
每个网格会预测B个bounding boxes和这些boxes的confidence scores,这个confidence scores表示box中所包含目标的置信度和box预测的准确率。被定义为:
在这里插入图片描述
Pr(Object) 表示box有无物体的概率,有物体Pr(Object)=1,无物体Pr(Object)=0。因此当box中有物体时,Confidence scores则等于预测框与真实框的IOU值。

每个bounding boxes包含了5个预测值:x,y,w,h,confidence。(x,y)为box相对网格单元的中心点坐标,注意这里是需要归一化到0-1,也就是需要除以网格单元的大小;w,h是相对于整个图片大小的预测值,也是0-1之间。

这个将x,y,w,h均做了归一化,是因为YOLO V1是一个回归问题,而回归值的范围是在(-∞,+∞)之间,因此归一化是为了减小范围,将回归限制在0-1之间。

每个网格单元也会预测该物体是属于C种类别的概率,Pr(Classi|Object)。

每个网格单元只会预测一种类别,而不会管有几个boxes,因此无法对一个网格中的多种类别进行预测,这可能也是YOLO V1中False Positive少的原因

在test的时候,将网格类别的概率与confidence score相乘可以写为:
Pr(Classi|Object)* Pr(Object)*IOU = Pr(Classi)*IOU
在这里插入图片描述

因此,在YOLO V1中,目标检测就转化为一个回归预测问题,而这个预测可以表示为一个S×S×(B*5+C) 的tensor。在论文中S=7,B=2,用的数据集为PASCAL VOC,所以C=20,所以最终的预测是一个7×7×30的tensor。
在这里插入图片描述

2、网络设计

YOLO V1使用的是PASCAL VOC数据集,整个网络设计是借鉴了GoogLeNet模型的思想,首先用卷积层提取特征,然后用全连接层输出预测值和坐标值。

整个网络包含了24个卷积层和2层全连接层。在卷积层中YOLO V1中没有用GoogLeNet的初始模块,而是直接用1×1的卷积层后接3×3的卷积层。其目的就是为了降维
在这里插入图片描述
作者他们还训练YOLO的快速版本,即卷积层只有9层的网络。
在训练网络时,作者首先将前20层卷积层在ImageNet 1000-class数据集中进行预训练,然后再使用模型时再添加4层卷积层和2层全连接层。没有将24层卷积层全部拿去预训练就是为了防止过拟合。
在卷积层中使用的激活函数为LReLu函数:
在这里插入图片描述

3、Loss

YOLO V1中的损失函数为sum-squared error,即平方和误差。通过上文的介绍我们可以知道YOLO V1中的Loss一共有三部分:1)坐标误差、2)置信度误差、3)分类误差。
理解YOLO V1的损失函数首先需要明确一、每个cell中有无目标,二、每个cell包含两个box,而一个目标只由一个box负责,则另一个box无目标。

在这里插入图片描述
坐标误差只计算cell中有目标的box的loss,无目标的框不需要计算loss。此外可以注意到,对于预测框的宽和高的loss是用开方来计算的,这是因为小目标的预测对w和h的误差更敏感

例如:一个大小为20和100的目标,预测结果为10和90,若直接将他们之间的差值作为损失计算,则损失一样,但显然小目标的检测效果要差一些。

而开方后,(201/2-101/2)2=1.716 ,(1001/2-901/2)2=0.263 ,这相当于增大的小目标的Loss,从而强化了小目标的检测。当然这里的w预测值需要归一化,但是结论是一样的。
在这里插入图片描述
Confidence误差:即IOU误差。在IOU误差加入了一个权重项λnoobj,这是由于在检测过程中,正负例样本不均衡,包含正例的bbox少于不包含正例的bbox,因此为了让包含正例的bbox更多的去影响Loss,所以加入一个权重项降低负例的影响。

分类误差:同理,包含了目标的cell才计算损失,不包含的不计算。但是在YOLO V1中,一个cell只预测一种类别的物体,这对于类别密集的目标检测不友好。

在训练中使用dropout=0.5是防止过拟合,随机缩放和平移原始图像大小的20%来数据增强。在HSV颜色空间中将图像的曝光和饱和度随机调整1.5倍。


在预测过程中还使用了==NMS(non-maximal suppression)==去除重复的框,只保留概率值最大的框。

NMS的大致流程为:
① 对所有预测框的置信度降序排序;

② 选出置信度最高的预测框,确认其为正确预测(下次比较就这个框就被删除了),并计算它与其他预测框的IOU;

③ 根据2中计算的IOU去除重叠度高的,IOU>threshold就删除;

④ 剩下的预测框返回第一步,直到没有剩下的为止。


四、YOLO V1的优缺点

1、优点

① 网络简单,计算速度快。基础版本45 FPS,快速版本150 FPS;

② YOLO会考虑到整个图片的信息,因此比Fast RCNN少一半的背景错误,也就是假正例少;

③ 泛化能力好。

2、缺点

① 对框的定位误差较大,准确率低;

② 对小目标检测不行;

③ 每个cell只能预测一种类别的物体。


五、总结

YOLO V1的面世,为目标检测提供了一条快速的通道,但V1终觉还是存在一些问题,因此,本文针对整个YOLO V1算法的三点局限性(上面提到的缺点),提出了一些改进方法(仅供参考):

① 一个cell只包含2个bbox并且只预测一种类别的物体,这样会导致有些小物体没有被预测到。

改进:一个cell用多个框去预测,同时每个框可以预测多种类别。

② 由于整个网络做了多次下采样,所以得到的是粗粒度的特征图,可能会导致精度下降。

改进:可以使用ResNet作为backbone,这样就可以同时得到细粒度和粗粒度的特征图,增强识别的准确率。

③ 由于小框的预测误差导致的IOU误差是大于大框导致的误差,但是YOLO V1算法中在计算小框的Loss和大框的Loss时,使用的是相同的权重,所以导致小物体的预测不准。

改进:细化Loss,将大框和小框的Loss分开计算。


我们 YOLO V2 再见!!!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值