基于卷积神经网络的目标检测算法

基于卷积神经网络的目标检测算法html

1 滑窗法

滑窗法的思路及其简单,首先须要已经训练好的一个分类器,而后把图片按照必定间隔和不一样的大小分红一个个窗口,在这些窗口上执行分类器。若是获得较高的分数分类,就认为是检测到了物体。把每一个窗口的分类器都执行一遍,在对获得的分数作一些后处理(非极大值抑制等),最后获得物体对应的区域。web

滑动法的效率及其低下。算法

滑动法至关于对一张图片上的子区域进行相似穷举式的搜索。而Selective Search的思路:可能存在物体的区域应该有某些类似和连续的区域。

   根据以上得思想,Selective Search采用的是合并的思想。首先用分割算法在图片上产生不少小区域,而后根据这些小区域的类似性进行区域合并。衡量类似性的的标准有颜色,纹理等。最后不断迭代小区域来合并成大区域。最终得到肯能物体的区域方框。

这里写图片描述

这里写图片描述

若是你想了解更过,能够参考《Selective Search for Object Recognition》。网络

有了Selective Search高效的寻找可能物体的方框,那么接个CNN特征提取器,而后作个分类不就至关于检测物体了吗。所以诞生了R-CNNiphone

3 SPP(空间金字塔池化)和ROI(感兴趣区域池化)

R-CNN在识别物体时,须要2000个框,在使用前向传播算法时,速度接收不了。ide

卷积层有同变性质。咱们能够理解为物体经过卷积网络之后,会在语义层的响应位所特有的响应。根据这个思路,咱们把图片执行一次卷积神经网络的前向计算,到激活响应的时候。经过某种方式将目标物体所在区域部分的响应图拿出来做为特征给分类器。

 这样作对画面内的全部可能的物体的检测就能够共享一次卷积神经网络的前前向计算,从而大大减小了时间。
 SPP具体的实现方法:

假设输入的图片中框住小马和人的框是由Selective Search选出来框。那么通过卷积神经网络,获得最后一层输出的n个通道的响应图时,原图像上的两个框也会对应两个区域,这样的区域称做感兴趣区域.svg

若是能够有一种方式能够把ROI的信息转换成固定维度的向量,那么只要运行一次卷积神经网络的前向计算,全部的ROI都共享一样的响应图。
详细描述:SPP分层将指定区域划分的不一样数目。你能够选择划分三个层次,最底层划分为4*4=16个子区域,中间层划分为2x2个子区域,顶层直接对齐进行池化。对于每一个通道,每一个ROI都生成21维的向量。由于有n个通道,因此每一个ROI都成21n的向量优化

4 Faster R-CNN

SPP用于物体的检测相比R-CNN速度提高很多,可是还有R-CNN的缺点,最明显的就是分阶段训练,不只麻烦并且物体框回归训练中训练是割裂的,整个参数优化过程不是一致的。限制了精度的提升。

  针对上述缺点,R-CNN的做者提出了两点改进。

 (1)第一点是ROI提取到特征后,把物体的回归和分类这两个任务的loss融合一块儿训练,至关于端到端的多任务训练。这个任务不在分步骤进行。

  (2)   把SPP换成了ROI POOLING 这就是FAST R_CNN。

   若是你想了解更过有关Fast-R-CNN的更多细节参考ICCV2015年的论文 <<Fast R-CNN>>

5 YOLO

YOLO全称YOU ONLY Look once表达的意思只要看一眼就能感知识别的物体。YOLO的基本思想是:把每幅图片划成S*S的格子,以每一个格子所在的位置和对应内容为基础来预测:



 (1):物体框,包含物体框的中心相对格子中心的坐标(x,y)和物体框的宽w和高h,每一个格子来预测B个物体框。
  (2)每一个物体框是否有物体的置信度,其中当前这个格子若是包含物体,则当前置信度为分数为当前预测的物体框和标注物体框的IOU,不然置信度的分数为0.
  (3)每一个格子预测一共c个类别的几率分数,可是这个分数和物体框的置信分数是不相关的。

综上所述:每一个格子须要输出的信息维度为Bx(4+1)+C。在YOLO的论文中B=2,C为voc 2007数据集的类的个数等于20。因此每一个格子的预测的信息维度为2x5+20=30.图片里面的格子数为7,最后获得关于物体的预测的张量是一个7x7*30的张量。.net

论文中操做:首先将图片缩放成一个正方形的图片,论文中采用448*448,而后送到一个卷积神经网路,接着送入两层全链接层,输出的维度正好是49x30.最后49x30的张量中提取出来物体框和类别的预测信息,通过非极大值抑制,就获得最终的物体预测结果。

YOLO检测网络包括24个卷积层和2个全链接层3d

这里写图片描述

YOLO就是单纯的的卷积神经网络,把物体检测转换成单纯的回归问题。

6 SSD

SSD全称为 Single Shot multibox Detetor(提出了一种使用单个深层神经网络检测图像中对象的方法),能够在达到实时的时候,任然保持很高的检测的速度。

在SSD的论文中,基于VGG-16的基础模型上在300x300输入分辨率下,获得conv5是38x38的响应图,每一个像素上取值K=4,通过进一步的下降采样获得19x19,10x10,5x5的响应图,则每一个类别一共获得38x38x4+(19x19+10x10+5x5)x6+(3x3=1x1)x4=8732个默认物体框。

而YOLO,默认配置是448x448的分辨率,最后在7x7的格子中默认预测两个物体框。每一个类别一共是7x7x2=98个分类框。

7 YOLO2和 YOLO9000

7.1 YOLO2

YOLO 2采用神经网络结构,有32层。结构比较常规,包含一些卷积和最大池化,其中有一些1*1卷积,采用GoogLeNet一些微观的结构。其中要留意的是,第25层和28层有一个route。例如第28层的route是27和24,即把27层和24层合并到一块儿输出到下一层,route层的做用是进行层的合并。30层输出的大小是13*13,是指把图片经过卷积或池化,最后缩小到一个13*13大小的格。每个格的output数量是125(5*25),5是指对每个13*13的小格配有5个边框,25则是指每个边框输出了25个浮点数。25个是YOLO 2对VOC的结构。VOC一共有20个class,在25个数中,有20个是class的probability,剩下的5个中,有四个表示stx、sty、tw、th,这4个来识别边框的位置和大小,还有一个数是confidence,表示边框预测里有真正的对象的几率。因此一共是13*13*125个数。
这里写图片描述
这里写图片描述
这里写图片描述

7.2 YOLO900

YOLO 9000的基本触发是用少许的有检测标注的数据和大量的图像分类数据合并到一块,来互相帮助,产生出能够生成不少类的预测。它能够检测9418个类

这里写图片描述
如图所示,与以前相比,它的结构简化到24层,第23层是17*17*28269,17*17和之前YOLO 2的13*13相似,只是把prediction网格变成了17*17。而后每一个位置有28269(3*(4+1+9418)),3是指每个位置给了三个bounding box,每一个bounding box包含有stx,sty,tw,th,confidence和9418个类。给了这些数以后就能够经过WordTree产生所须要的bbox等

参考资料
https://www.leiphone.com/news/201708/7pRPkwvzEG1jgimW.html

http://blog.csdn.net/jideljd_2010/article/details/46682999

http://www.cnblogs.com/zhao441354231/p/5941190.html

https://zhuanlan.zhihu.com/p/25236464
http://blog.csdn.net/liyaohhh/article/details/50614380

http://lib.csdn.net/article/deeplearning/53059