分析YOLOv1目标检测

前言

主流分类神经网络有 AlexNet、 ResNet、VGG等;YOLO是否能它特点和核心竞争力呢?有的,YOLO网络用于目标检测速度很快,准确率也不错;而且随着YOLO版本的迭代,其检测速度和准确率有了较大提升。

 

本篇文章主要介绍YOLOv1

 

YOLOv1

YOLO的全名是“You Only Look Once”,只需看一次,对应one- stage detetor (单阶段目标检测)只用一级网络就完成了分类和回归两个任务

论文下载:https://arxiv.org/abs/1506.02640

代码下载:https://github.com/pjreddie/darknet

核心思想:将整张图片作为网络的输入(类似于Faster-RCNN),直接在输出层对 bounding boxs的位置和类别进行回归

 

YOLOv1特点

  • 一次性输出所检测到的目标信息,包括类别、位置和置信度等
  • 只要求这个物体的中心在某个grid之内

 

YOLOv1原理

1)将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格(grid )中,则这个网格就负责预测这个object。

2)每个网络需要预测B个bounding boxes的位置信息和confidence(置信度)信息,一个bounding boxes对应着四个位置信息和一个confidence信息。confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息:

3)每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。

(注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的。)

假设有SxS个框框,每个框的 bounding boxes个数为B,分类器可以识别出C种不同的物体,那么整个 ground truth的长度为S×S×(B×5+C)。

 

YOLOv1入门知识点

1)YOLO中的grid是什么?

一张图片使用n*n的网络划分,划分后形成的许多个小网格(图片变成许多小块组成了,每个正方形的小块都一样)。比如使用7* 7的网络划分一张图片:

7* 7划分后形成49个网格,每个网格也就grid

 当我们知道物体的中心落在那个grid(网格)后,通过grid坐标和实际物体的坐标进行对比和修正;比如上图中本来一个grid是无法完整框住小狗的,以这个grid为中心进行坐标偏移(扩展、缩小等),具体偏移多少是根据实际小狗的坐标去调整(训练模型),最后调整到合适的框框后(比如像图中黄色的框框),就能完整框住小狗了。

只要求这个物体的中心在某个grid之内  YOLO这个特点和Fast RCNN是不一样的,Fast RCNN需要预测一个能完整框住整个物体的框框。

 

2)YOLO中的bounding boxs是什么?

当我们知道物体的中心落在那个grid(网格),如下图中的小狗中心点落在红色的框框,由红色的框框(grid)调整后,变成完整框住小狗的框叫bounding boxs;

图中有两个黄色的框,他们都是基于红色的框(grid)预测出来的,用来框住整个物体(小狗),这个些黄色的框叫bounding boxs。

  • 每个grid都预测出B个 bounding boxs,这个 bounding boxs有5个量,分别是物体的中心位置(xy)和它的高(h)和宽(w),以及这次预测的置信度。
  • 每个grid还要负责预测这个框框中的物体是什么类别的;

上图中每个grid都预测出2个 bounding boxs,即在小狗对象的预测中 那个两个黄色的框。

 

在下图中的红色的框(grid),在神经网络深层中的特征图(Feature map),grid cell代表的张量大小:n*n * 深度维数,其中n*n是图片网格划分的维数,比如:7*7;对应下图:7*7*30。

 

获取grid cell的张量的数据后,会生成一个张量,然后设置每个grid预测多少个bounding boxs,比如预测两个;有20中类别。

每个bounding boxs有5个特征量,分别是中心位置(xy)、高(h)、宽(w)和置信度。预测两个bounding boxs,所以维度:bounding boxs1+bounding boxs2+类别数量  即:5+5+20。所以深度维数为30,对应上面:7*7*30。

 

3)YOLO中的Ground Truth是什么?

在下图中,图片用7*7的网格划分,合计49个grid,每个grid有两个 bounding box,每个 bounding box有5个预测值,假设分类器可以识别出3中物体,那么一张图片中的ground truth的总长度为

S×S×(B×5+C)= 7×7×(2x5+3)= 637

如果单看小狗的那个grid,它的ground truth的长度为:2x5+3 = 13。

规定每个grid的 ground truth的顺序是 confidence,x,w,h,c1,c2,c3 (目标类别:c1,c2,c3)

 

YOLOv1置信度如何计算

IOU是预测的 bounding box和真实的物体位置的交并比;IOU要根据bounding box的x,y,w,h的预测值进行现场计算。Pr是一个grid有物体的概率,在有物体的时候 ground truth为1,没有物体的时候 ground truth为0。

计算公式:

当grid中没有物体,此时Pr为0 ,后面的IOU就不用计算了。当预测的 bounding box和真实的物体位置越重合,IOU计算出来的值越大,置信度越高。

 

YOLOv1网络结构

网络结构参考 GooLeNet模型,包含24个卷积层和2个全连接层。其中前20个卷积层用来做预训练,后面4个是随机初始化的卷积层,和2个全连接层。这样可以根据任务定制一部分特征在网络中。

 

YOLOv1的损失函数

YOLOv1、YOLOv2和YOLOv3的损失函数都差不多的;

一个网格预测多个bounding box,希望的是每个bounding box predictor专门负责预测某个object。具体做法是看当前预测的bounding box与ground truth box中哪个IoU大,就负责哪个。这种做法称作box predictor的specialization。

最后整个的损失函数如下所示:

  • 只有当某个网格中有object的时候才对classification error进行惩罚。

  • 只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。

 

YOLOv1的缺点

  • 一个grid只能识别一种物体。(因为grid中的Bounding box只预测一种类别)如果在有遮挡,或一个grid中有多种物体时,YOLO就不合适了。
  • Bounding box的预测准确度是不如R-CNN这样的Region- based方法的。
  • 由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。
  • 当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。
  • YOLO loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近,对于小物体,小的IOU误差也会对网络优化过程造成很大的影响,从而降低了物体检测的定位准确性。

 

YOLOv1实验结果

能看到YOLOv1的精度并不高只有50多左右,但是它的检测速度很快;这时需要看不同场景的任务需求了,如果对精度要求不高,实时性要求高的,可以选择YOLOv1的模型。

PASCAL VOC 2012排行榜; 截至2015年11月6日,YOLO与完整的comp4(允许外部数据)公共排行榜进行了比较。显示了各种检测方法的平均平均精度和每类平均精度。 YOLO是唯一的实时检测器(在当时)。 Fast R-CNN + YOLO是得分最高的方法,比Fast R-CNN增长2.3%。

 

关于毕加索和People-Art数据集的推广结果:

(a)毕加索数据集精确调用曲线。(b)关于VOC 2007,毕加索和People-Art数据集的定量结果,毕加索数据集同时评估AP和最佳F1得分。

 

YOLOv1目标检测效果:

大部分是能正确识别的,不过也有识别错误的地方(把人识别为一架飞机了)

YOLOv2、YOLOv3、YOLOv4后面的文章单独介绍。( •̀ ω •́ )y

 

参考1:https://pjreddie.com/darknet/yolo/

参考2:https://www.bilibili.com/video/BV1EK4y1E7gu

 

YOLO物体/目标检测  https://blog.csdn.net/qq_41204464/category_10425913.html?spm=1001.2101.3001.4235

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗小树x

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值