失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【目标检测】YOLO框架原理总结

【目标检测】YOLO框架原理总结

时间:2019-10-13 09:23:45

相关推荐

【目标检测】YOLO框架原理总结

参考资料:

YOLO主页 /darknet/yolo/YOLOv1论文下载:/abs/1506.02640代码下载:/pjreddie/darknet YOLOv2&YOLO9000工程代码地址:/darknet/yolo/代码和预训练模型地址:/yolo9000/YOLOv3代码下载:/pjreddie/darknet/tree/yolov3keras:/qqwweee/keras-yolo3tensorflow:/wizyoung/YOLOv3_TensorFlowYOLOv4论文地址:/pdf/.10934.pdfGitHub地址:/AlexeyAB/darknet参考文章:/qq_30815237/article/details/91949543/guleileo/article/details/80581858

一、概述

YOLO(You Only Look Once)是一个基于深度学习技术的深度神经网络模型,对图像中目标位置定位与类别的检测,其核心思想是,利用一整张图像作为深度神经网络的输入,网络直接输出回归框(bounding box)的位置及其所属的类别。

优点:模型运行速度快;

end-2-end,直接预测位置与类别,不容易在背景上预测出错误的物体信息

对比RCNN、Fast-RCNN、Faster-RCNN:

RCNN开创性的提出了候选区(Region Proposals)的方法,先从图片中搜索出一些可能存在对象的候选区Selective Search,大概2000个左右,然后对每个候选区进行对象识别。大幅提升了对象识别和定位的效率。不过RCNN的速度依然很慢,其处理一张图片大概需要49秒。因此又有了后续的Fast RCNN 和 Faster RCNN,针对RCNN的神经网络结构和候选区的算法不断改进,Faster RCNN已经可以达到一张图片约0.2秒的处理速度。

二、YOLOv1

将一张图片分成SxS个网格(grid cell),如果某个物体的中心落在了某一个网格中,则这个网格就负责预测这个物体;每个网格要预测B个bounding box,每个bounding box包括位置信息(x,y,w,h),分别是bounding box的中心点坐标 (x,y),x, y 用对应网格的 offset 归一化到 0-1 之间,bounding box的长宽(w,h),w, h 用图像的 width 和 height 归一化到 0-1 之间,每个bounding box还包括一个confidence值,所以每个bounding box一共5个值;confidence值代表预测的box中含有被检测目标的置信度,,若有被检测目标落在grid cell中,则Pr(Object)=1,否则Pr(Object)=0;第二项代表预测的bounding box与实际的groudtruth之间的IOU值;(IOU是怎么算出来的?)每个grid cell还会预测C个类的类别信息,所以SxS个网格,每个网格预测2个bounding box和C个类别,每个bounding box预测5个值,所以最终输出为SxSx(Bx5+C),例如PASCAL VOC中,输入图片为448x448,S=7,B=2,C=20类,所以最终输出是7x7x30的一个Tensor,30维的信息如下图所示;网络结构如下,就是单纯的卷积、池化最后加了两层全连接,因为需要预测bounding box的位置(数值型),而不仅仅是对象的概率,所以最后输出层用线性函数做激活函数。网络输入是448x448x3的图片,所以图片会被resize;一些细节点的解释: 虽然有时说"预测"的bounding box,但这个IOU是在训练阶段计算的。等到了测试阶段(Inference),这时并不知道真实对象在哪里,只能完全依赖于网络的输出,这时已经不需要(也无法)计算IOU了;我们需要事先根据样本给出一个正确的bounding box作为回归的目标。YOLO的2个bounding box事先并不知道会在什么位置,只有经过前向计算,网络会输出2个bounding box,这两个bounding box与样本中对象实际的bounding box计算IOU。这时才能确定,IOU值大的那个bounding box,作为负责预测该对象的bounding box;训练开始阶段,网络预测的bounding box可能都是乱来的,但总是选择IOU相对好一些的那个,随着训练的进行,每个bounding box会逐渐擅长对某些情况的预测(可能是对象大小、宽高比、不同类型的对象等)。另外就是一个Object只由一个grid来进行预测,不要多个grid都抢着预测同一个Object。更具体一点说,就是在设置训练样本的时候,样本中的每个Object归属到且仅归属到一个grid,即便有时Object跨越了几个grid,也仅指定其中一个。具体就是计算出该Object的bounding box的中心位置,这个中心位置落在哪个grid,该grid对应的输出向量中该对象的类别概率是1(该gird负责预测该对象),所有其它grid对该Object的预测概率设为0(不负责预测该对象),如下图表示。训练样本的bounding box位置应该填写对象实际的bounding box,但一个对象对应了2个bounding box参数,应该把实际的bounding box填在哪一个里面?可以直接计算出来,就是用网络输出的2个bounding box与对象真实bounding box一起计算出IOU。然后看2个bounding box的IOU,哪个比较大(更接近实际的bounding box),就由哪个bounding box来负责预测该对象是否存在,即该bounding box的,同时把对象真实的bounding box参数填入到这个bounding box位置向量处。另一个不负责预测的bounding box的。举个例子,比如上图中自行车的中心点位于4行3列网格中,所以输出tensor中4行3列位置的30维向量如下图所示。

7.损失函数

我们输出 预测边框坐标1和 预测边框坐标2,然后计算与实际对象边框的IOU,最大的那个预测边框对应的位置处,把样本标签对应的位置填入实际对象边框

如果觉得《【目标检测】YOLO框架原理总结》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。