YOLO算法

作者 : 开心源码 本文共1527个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共177人阅读
上周最后一课

你已经学了对象检测算法的大部分零件了,接下来,我们把所有的零件组合到一起,构成YOLO检测算法。

首先:构建训练集
创立一个y向量3x3x2x8,要构造训练集,你需要遍历九个格子,而后构成对应的目标向量y,当然实际中,你可能使用的是19x19x5x8的向量集。

构成训练集以后,你训练一个卷积网络,输入图片,可能是100x100x3,而后你的卷积神经网络最后输出尺寸是3x3x16,接下来你的算法应该做出预测:

最后你要跑一下非最大值抑制:

假如你使用两个anchor box,那么对于9个格子中任何一个都会有两个预测的边界框,其中一个格子的概率pc非常低,但是9个格子中,每个都有两个预测的边界框,注意有些边界框可以超出所在格子的高度和宽度。

接下来你抛弃概率低的预测。

最后假如你有三个对象检测类别,行人,摩托,汽车,那么你要做的是对于每个类别,单独运行非最大值抑制,解决那个预测结果是哪个类别的边界框,用非最大值抑制来解决行人类别,再用非最大值抑制解决车子类别,而后对摩托车类实行非最大值抑制,运行三次来得到最终的预测结果。

所以算法的输出最后能够检测出图像中的所有的车子,所有的行人,这就是YOLO对象检测算法。

这实际上是最有效的图像检测算法之一,包含了整个计算机视觉对象检测领域文献中很多精妙的思路。

可选课:RPN 网络

假如阅读对象检测的文献,可能看到一组概念,所谓的候选区域,这在计算机视觉领域是非常有影响力的概念。

可选是由于用的不多,但是这个RPN 网络是非常有影响力的。

当你使用滑动搜索框或者者卷积网络算法时,算法有一个缺点就是:
它在没有任何对象的区域白费时间。

所以R-CNN算法被提出,意思是带区域的卷积网络,或者者说带区域的CNN,这个算法尝试选出少量区域,在这些区域上运行卷积网络分类器是没有意义的。所以不再针对每个滑动窗口跑检测算法,而是只选择少量窗口,在这些少数窗口上运行卷积网络分类器。

选出候选区域的方法是:
运行图像分割算法,分割出结果后,为了找出可能存在对象的区域,在分割的色块上跑分类器,所以这个细节就是所谓的分割算法。

你先找出所谓的2000个色块,而后在这2000个色块上放置边界框,而后运行分类器,这样需要解决的位置可能要少得多,可以减少卷积网络分类器的运行时间,比在图像的所有位置跑一遍分类器更快。

以上就是R-CNN和区域CNN的特色概念。

现在看来R-CNN算法的运行速度还是很慢的,所以有一系列的研究工作去改进这个算法。

基本的R-CNN算法是使用某种算法求出候选区域,而后对每个候选区跑一下分类器,每个区域会输出一个标签,并输出一个边界框,这样你即可以确定存在对象的区域得到一个准确的边界框。

澄清一下:
R-CNN算法不会直接信任输入的边界框,它也会输出一个边界框,bx,by,bh和bw,这样得到的边界框比较准确,比单纯使用图像分割算法给出的色块边界要好,你可以得到相当准确的边界框。

R-CNN算法的缺点是:太慢了

Fast-CNN:用卷积实现滑动窗口
最初的算法是逐一对区域分类,快速CNN则是用滑动窗口的一个卷积实现,这会明显提升CNN的速度。
事实证实:快速CNN算法的一个问题是:得到候选区域的聚类步骤依然十分缓慢。

另一个研究组提出了更快的CNN算法,使用的是卷积神经网络,而不是传统的分割算法来取得候选区域色块。

不过我认为大多数更快的R-CNN算法的实现还是比YOLO算法慢很多。

候选区域的概念在计算机视觉领域影响力相当大,所以需要理解,候选区域算法是一个有趣的想法,但是这个方法需要两步,首先要得到候选区域,而后再分类,相比之下,能够一步做完,相似于YOLO或者者你只看一次的算法,在我看来,是长远而言更有希望的方向。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » YOLO算法

发表回复