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

来源:互联网 发布:java编译执行命令 编辑:程序博客网 时间:2024/04/30 13:46

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

1 滑窗法

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

滑动法的效率及其低下。

   滑动法相当于对一张图片上的子区域进行类似穷举式的搜索。而Selective Search的思路:可能存在物体的区域应该有某些相似和连续的区域。   根据以上得思想,Selective Search采用的是合并的思想。首先用分割算法在图片上产生很多小区域,然后根据这些小区域的相似性进行区域合并。衡量相似性的的标准有颜色,纹理等。最后不断迭代小区域来合并成大区域。最终获得肯能物体的区域方框。

这里写图片描述

这里写图片描述

如果你想了解更过,可以参考《Selective Search for Object Recognition》。

有了Selective Search高效的寻找可能物体的方框,那么接个CNN特征提取器,然后做个分类不就相当于检测物体了吗。因此诞生了R-CNN

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

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

 卷积层有同变性质。我们可以理解为物体通过卷积网络以后,会在语义层的响应位所特有的响应。根据这个思路,我们把图片执行一次卷积神经网络的前向计算,到激活响应的时候。通过某种方式将目标物体所在区域部分的响应图拿出来作为特征给分类器。 这样做对画面内的所有可能的物体的检测就可以共享一次卷积神经网络的前前向计算,从而大大减少了时间。 SPP具体的实现方法:

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

如果可以有一种方式可以把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的张量。

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

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

这里写图片描述

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

阅读全文
0 0