1,YOLOv1算法的简介

YOLO算法使用深度神经网络进行对象的位置检测以及分类,主要的特点是速度够快,而且准确率也很高,采用直接预测目标对象的边界框的方法,将候选区和对象识别这两个阶段合二为一,

与faster rcnn区分开来,是一刀流的检测方法。

Yolo算法不再是窗口滑动了,而是直接将原始图片分割成互不重合的小方块,然后通过卷积最后生产这样大小的特征图,基于上面的分析,可以认为特征图的每个元素也是对应原始图片的一个小

方块,然后用每个元素来可以预测那些中心点在该小方格内的目标,这就是Yolo算法的朴素思想,

最新的YOLOv3算法再以往的结构上做出了改进,增加了多尺度检测,以及更深的网络结构darknet53,这是比较主要的改进,还有某些细节上的变动。

2,YOLOv1算法的原理

实际操作如图所示,分为7*7个小格子,每个格子预测两个bounding box。

如果一个目标的中心落入一个网格单元中,该网格单元负责检测 该目标。

对每一个切割的小单元格预测(置信度,边界框的位置),每个bounding box需要4个数值来表示其位置,(Center_x,Center_y,width,height),即(bounding box的中心点的x坐标,y坐标,bounding box的宽度,高度)

置信度定义为是否存在目标iou值的乘积,

还要得到分类的概率结果;20个分类每个类别的概率。

7*7*30中的30=(20类概率+2*5(置信度,边框位置))

 2.1    YOLOv1的网络结构

YOLO采用单个的卷积神经网络进行预测,YOLO的整个结构就是输入图片经过神经网络的变换得到一个输出的张量 。   步骤如下:

(1)将输入图像调整为448×448,(2)在图像 上运行单个卷积网络,以及(3)由模型的置信度对所得到的检测进行阈值处理

首先,YOLO速度非常快。由于我们将检测视为回归问题,所以不需要复杂的流程。测试时在一张新图像 上简单的运行我们的神经网络来预测检测

其次,YOLO在进行预测时,会对图像进行全面地推理。与基于滑动窗口和区域提出的技术不同,YOLO在训练期间和测试时会看到整个图像,所以它隐式地编码了

关于类的上下文信息以及它们的外观。快速R-CNN是一种顶级的检测方法,但是它看不到更大的上下文信息,所以在图像中会将背景块误检为目标。与快速R-CNN相比,YOLO的背景误检数量少了一半

然后,由于YOLO具有高度泛化能力,因此在应用于新领域或碰到意外的输入时不太可能出故障。

所使用的卷积结构如图所示:受到GoogLeNet图像分类模型的启发。网络有24个卷积层,后面是2个全连接层,最后输出层用线性函数做激活函数,其它层激活函数都是Leaky ReLU。

我们 只使用1*1降维层,后面是3*3卷积层,

3, YOLOv1的损失函数和训练过程

YOLO的损失函数定义如下:

YOLO在ImageNet分类任务上以一半的分辨率(224*224的输入图像)预训练卷积层,然后将分辨 率加倍来进行检测。

训练中采用了drop out和数据增强(data augmentation)来防止过拟合.

4.    预测过程以及结果的处理

直接把训练好的YOLO网络模型输入一张图片,得到一个7*7*30的结果向量,通过NMS(非极大值抑制)来选择最终的结果;

NMS就是通过打分来选出最好的结果,与这个结果重叠的对象去掉,是一个不断迭代的过程。

score = 某个对象的概率 * 置信度

所以对于每个网格有20*2个得分,每个对象有49*2个得分;这里的2是bounding box的个数;

具体的过程是:

1,设置一个分数阈值,低于的直接置为0;

2,遍历对于每个对象:

选出分数最高的那个及其bounding box放到输出列表中;

将其他的与上面选出的分数最高的那个计算IOU,设置一个阈值,大于阈值的表示重叠度较高,把分数置为0;

如果所有的bounding box都在输出列表中或者分数为0,那么这个对象的NMS就结束

对接下来的对象执行此过程

3.得出输出结果;

4. YOLOv1的特点总结

YOLO的一个贡献是将检测问题转化为了回归问题,相信这句话很多人见过很多次了。那到底是什么意思呢?指的就是之前faster RCNN是先分两步

先提取region proposal,也就是判断是前景还是背景的问题,之后再分类,具体看前景是什么东西。而YOLO直接通过regression一次既产生坐标,又产生每种类别的概率。

YOLO的特点在于快,其中一方面来源于regression机制,还有一个原因就在于region proposal的提取过程了。再YOLO中很少提region proposal的概念,

但是为了类比faster RCNN我们可以这样理解,YOLO中粗暴地分成了7X7的网格,每个位置默认可能属于2个object,那么事实上就是提取了98个region proposal,

而faster RCNN是一种滑动窗口机制,每个feature map上都回归出9个anchor,大约一共20k个anchor,在通过非极大值抑制等方法最终会得到300个region proposal。

两者之间候选框差别巨大,因此,faster RCNN会准一点也是情理之中,而既然每个位置都要精修,当然效率就会低很多,也就不能满足实时性要求了。另外,YOLO

精简了网络,比VGG要稍微计算量小一些,可能也会加快一些速度,但这些计算量比起前面提到的两点已经不足为道。

YOLO对边界框预测强加空间约束,因为每个网格单元只预测两个盒子,只能有一个类别。这个空间约束限制了我 们的模型可以预测的邻近目标的数量。我们的模型与群组中出现的小物体(比如鸟群)进行斗争。

YOLOv1算法理解的更多相关文章

  1. 关于KMP算法理解(快速字符串匹配)

    参考:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 2016-08- ...

  2. FFT算法理解与c语言的实现

    完整内容迁移至 http://www.face2ai.com/DIP-2-3-FFT算法理解与c语言的实现/ http://www.tony4ai.com/DIP-2-3-FFT算法理解与c语言的实现 ...

  3. EM算法理解的九层境界

    EM算法理解的九层境界 EM 就是 E + M EM 是一种局部下限构造 K-Means是一种Hard EM算法 从EM 到 广义EM 广义EM的一个特例是VBEM 广义EM的另一个特例是WS算法 广 ...

  4. HMM-前向后向算法理解与实现(python)

    目录 基本要素 HMM三大问题 概率计算问题 前向算法 后向算法 前向-后向算法 基本要素 状态 \(N\)个 状态序列 \(S = s_1,s_2,...\) 观测序列 \(O=O_1,O_2,.. ...

  5. HMM-维特比算法理解与实现(python)

    HMM-前向后向算法理解与实现(python) HMM-维特比算法理解与实现(python) 解码问题 给定观测序列 \(O=O_1O_2...O_T\),模型 \(\lambda (A,B,\pi) ...

  6. 最小生成树——Kruskal算法理解

    背景:本文是在小甲鱼数据结构教学视频中的代码的基础上,添加详细注释而完成的.该段代码并不完整,仅摘录了核心算法部分,结合自己的思考,谈谈理解. Prim算法理解: 如图(摘录自小甲鱼教学视频中的图片) ...

  7. 最小生成树——Prim算法理解

    背景:本文是在小甲鱼数据结构教学视频中的代码的基础上,添加详细注释而完成的.该段代码并不完整,仅摘录了核心算法部分,结合自己的思考,谈谈理解. Prim算法理解: 如图(摘录自小甲鱼教学视频中的图片) ...

  8. 编译系统中的 NFA/DFA算法理解

    1.问题概述 NFA 和 DFA浅析---要深入了解正则表达式,必须首先理解有穷自动机. 有穷自动机(Finite Automate)是用来模拟实物系统的数学模型,它包括如下五个部分: 有穷状态集St ...

  9. KNN算法理解

    一.算法概述 1.kNN算法又称为k近邻分类(k-nearest neighbor classification)算法. 最简单平庸的分类器或许是那种死记硬背式的分类器,记住全部的训练数据,对于新的数 ...

随机推荐

  1. [CSP-S模拟测试]:Tree(贪心)

    题目描述 给定一颗$n$个点的树,树边带权,试求一个排列$P$,使下式的值最大 $$\sum \limits_{i=1}^{n-1}maxflow(P_i,P_{i+1})$$ 其中$maxflow( ...

  2. python中生成器generator

    通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素 ...

  3. HDU 6121 Build a tree(k叉树的子树大小相异)

    http://acm.hdu.edu.cn/showproblem.php?pid=6121 题目大意: 给你一颗 n 个节点的完全 k 叉树,问你这棵树中所有子树结点个数的总异或值. 分析: 我们很 ...

  4. HDU6599:求本质不同的子串(回文串)长度及数量

    目录 hdu6599题意: manacher+后缀自动机+倍增 \(O(nlog(n))\) manacher+后缀数组+二分 \(O(nlog(n))\) 回文树(回文自动机) \(O(n)\) @ ...

  5. 设置VsCode自动换行

    方法如下: 文件 -> 首选项 -> 设置 如果你是Mac则是右上角 Code -> 首选项 -> 设置 然后在右侧的编辑窗口中添加 1 "editor.wordWr ...

  6. 洛谷P1120 小木棍 [数据加强版](搜索)

    洛谷P1120 小木棍 [数据加强版] 搜索+剪枝 [剪枝操作]:若某组拼接不成立,且此时 已拼接的长度为0 或 当前已拼接的长度与刚才枚举的长度之和为最终枚举的答案时,则可直接跳出循环.因为此时继续 ...

  7. EZOJ #373排序

    分析 它居然真的是个nlog^3暴力?! 两个数在加小于min(lowbit(x),lowbit(y))的数时对他们的奇偶性不影响 因此每次加上min(lowbit(x),lowbit(y))判断此时 ...

  8. Share架构的一些心得

    个人这些年,从web->system service->app 项目实战,陆陆续续经历的项目很多,自己也数不清.自己也一直对于架构没有明确去给出一个自己的定义描述. 刚好最近一直在flut ...

  9. 建站手册-template

    ylbtech-建站手册: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtech.cn ...

  10. DbWrench002--建模以及数据正向工程和反向工程的具体操作

    DbWrench--建模以及数据正向工程和反向工程 参考博客:https://my.oschina.net/u/3459265/blog/1611999 一.数据正向工程 在建模工作中画好的表与表之间 ...