每次丢了东西,咱们都但愿有一种方法能快速定位出失物。如今,目标检测算法或许能作到。目标检测的用途遍及多个行业,从安防监控,到智慧城市中的实时交通监测。简单来讲,这些技术背后都是强大的深度学习算法。算法
在这篇文章中,咱们会进一步地了解这些用在目标检测中的算法,首先要从RCNN家族开始,例如RCNN、Fast RCNN和Faster RCNN。网络
1. 解决目标检测任务的简单方法(利用深度学习)学习
下图是描述目标检测算法如何工做的典型例子,图中的每一个物体(不管是任务仍是风筝),都能以必定的精确度被定位出来。优化
首先咱们要说的就是在图像目标检测中用途最广、最简单的深度学习方法——卷积神经网络(CNN)。我要讲的是CNN的内部工做原理,首先让咱们看看下面这张图片。rest
向网络中输入一张图片,接着将它传递到多个卷积和池化层中。最后输出目标所属的类别,听上去很是直接。blog
对每张输入的图片,咱们都有对应的输出类别,那么这一技术能检测图片中多种目标吗?答案是确定的!下面就让咱们看看如何用一个卷积神经网络解决通用的目标检测问题。图片
1.首先,咱们把下面的图片用做输入:资源
2.以后,咱们将图片分红多个区域:深度学习
3.将每一个区域看做单独的图片。io
4.把这些区域照片传递给CNN,将它们分到不一样类别中。
5.当咱们把每一个区域都分到对应的类别后,再把它们结合在一块儿,完成对原始图像的目标检测:
使用这一方法的问题在于,图片中的物体可能有不一样的长宽比和空间位置。例如,在有些状况下,目标物体可能占据了图片的大部分,或者很是小。目标物体的形状也可能不一样。
有了这些考虑因素,咱们就须要分割不少个区域,须要大量计算力。因此为了解决这一问题,减小区域的分割,咱们可使用基于区域的CNN,它能够进行区域选择。
2. 基于区域的卷积神经网络介绍
2.1 RCNN简介
和在大量区域上工做不一样,RCNN算法提出在图像中建立多个边界框,检查这些边框中是否含有目标物体。RCNN使用选择性搜索来从一张图片中提取这些边框。
首先,让咱们明确什么是选择性搜索,以及它是如何辨别不一样区域的。组成目标物体一般有四个要素:变化尺度、颜色、结构(材质)、所占面积。选择性搜索会肯定物体在图片中的这些特征,而后基于这些特征突出不一样区域。下面是选择搜索的一个简单案例:
用RCNN检测目标物体的步骤以下:
下面咱们就用具体的案例解释一下。
这就是RCNN检测目标物体的方法。
2.2 RCNN的问题
如今,咱们了解了RCNN能如何帮助进行目标检测,可是这一技术有本身的局限性。训练一个RCNN模型很是昂贵,而且步骤较多:
这些过程合并在一块儿,会让RCNN的速度变慢,一般每一个新图片须要40—50秒的时间进行预测,基本上没法处理大型数据集。
因此,这里咱们介绍另外一种能突破这些限制的目标检测技术。
3. Fast RCNN
3.1 Fast RCNN简介
想要减小RCNN算法的计算时间,能够用什么方法?咱们可不能够在每张图片上只使用一次CNN便可获得所有的重点关注区域呢,而不是运行2000次。
RCNN的做者Ross Girshick提出了一种想法,在每张照片上只运行一次CNN,而后找到一种方法在2000个区域中进行计算。在Fast RCNN中,咱们将图片输入到CNN中,会相应地生成传统特征映射。利用这些映射,就能提取出感兴趣区域。以后,咱们使用一个Rol池化层将全部提出的区域从新修正到合适的尺寸,以输入到彻底链接的网络中。
简单地说,这一过程含有如下步骤:
因此,和RCNN所须要的三个模型不一样,Fast RCNN只用了一个模型就同时实现了区域的特征提取、分类、边界框生成。
一样,咱们还用上面的图像做为案例,进行更直观的讲解。
图像被传递到卷积网络中,返回感兴趣区域:
以后,在区域上应用Rol池化层,保证每一个区域的尺寸相同:
最后,这些区域被传递到一个彻底链接的网络中进行分类,并用softmax和线性回归层同时返回边界框:
3.2 Fast RCNN的问题
可是即便这样,Fast RCNN也有某些局限性。它一样用的是选择性搜索做为寻找感兴趣区域的,这一过程一般较慢。与RCNN不一样的是,Fast RCNN处理一张图片大约须要2秒。可是在大型真实数据集上,这种速度仍然不够理想。
4.Faster RCNN
4.1 Faster RCNN简介
Faster RCNN是Fast RCNN的优化版本,两者主要的不一样在于感兴趣区域的生成方法,Fast RCNN使用的是选择性搜索,而Faster RCNN用的是Region Proposal网络(RPN)。RPN将图像特征映射做为输入,生成一系列object proposals,每一个都带有相应的分数。
下面是Faster RCNN工做的大体过程:
那么Region Proposal Network具体是如何工做的呢?首先,将CNN中得来的特征映射输入到Faster RCNN中,而后将其传递到Region Proposal Network中。RPN会在这些特征映射上使用一个滑动窗口,每一个窗口会生成具备不一样形状和尺寸的k个anchor box:
Anchor boxes是固定尺寸的边界框,它们有不一样的形状和大小。对每一个anchor,RPN都会预测两点:
如今咱们有了不一样形状、尺寸的边界框,将它们传递到Rol池化层中。通过RPN的处理,proposals可能没有所述的类别。咱们能够对每一个proposal进行切割,让它们都含有目标物体。这就是Rol池化层的做用。它为每一个anchor提取固定尺寸的特征映射:
以后,这些特征映射会传递到彻底链接层,对目标进行分类并预测边界框。
4.2 Faster RCNN的问题
目前为止,咱们所讨论的全部目标检测算法都用区域来辨别目标物体。网络并不是一次性浏览全部图像,而是关注图像的多个部分。这就会出现两个问题:
5. 上述算法总结
下表对本文中提到的算法作了总结:
目标检测是颇有趣的领域,在商业中也大有前景。得益于现代硬件和计算资源的发展,才能让这一技术有重要的突破。
本文只是目标检测算法的开门介绍,想了解更多的朋友能够直接私我。(关注主页)
若是你有不一样看法也可直接在评论下方指教!