基础目标检测算法介绍:CNN、RCNN、Fast RCNN、Faster RCNN、YOLO、SSD

1、解决目标检测任务的简单方法

如何用一个卷积神经网络解决通用的目标检测问题:

(1)首先,把图片作为输入;

(2)之后,将图片分成多个区域;

(3)将每个区域看作单独的图片;

(4)把这些区域照片传递给CNN,将它们分到不同类别中。

(5)当我们把每个区域都分到对应的类别後,再把它们结合在一起,完成对原始图像的目标检测;

使用这一方法的问题在于,图片中的物体可能有不同的长宽比和空间位置。例如,在有些情况下,目标物体可能占据了图片的大部分,或者非常小。目标物体的形状也可能不同。

有了这些考虑因素,我们需要分割很多区域,需要大量计算力。所以为了解决这一问题,减少区域的分割,我们可以使用基于区域的CNN,它可以进行区域选择。

2、基于区域的卷积集神经网络介绍

2.1 RCNN简介

和在大量区域上工作不同,RCNN算法提出在图像中创建多个边界框,检查这些边框中是否含有目标物体。RCNN使用选择性搜索来从一张图片中提取这些边框。

首先,让我们明确什么是选择性搜索,以及他是如何辨别不同区域的。组成目标物体通常有四个要素:变化尺度、颜色、结构(材质)、所占面积。选择性搜索会确定物体在图片中的这些特征,然后基于这些特征凸出不同区域。

下面是选择搜索(selective research)的一个简单案例:

(1)首先将一张图片作为输入;

(2)之后,他会生成最初的sub-分割,将图片分成多个区域;

(3)基于颜色、结构、尺寸、形状,将相似的区域合并成更大的区域;

(4)最后,生成最终的目标物体位置(Region of Insterest)。

用RCNN检测目标物体的步骤如下:

(1)我们首先取一个预训练卷积神经网络。

(2)根据需要检测的目标类别数量,训练网络的最后一层。

(3)得到每张图片的感兴趣区域(Region of Interest),对这些区域重新改造,以让其符合CNN的输入尺寸要求。

(4)得到这些区域後,我们训练支持向量机(SVM)来辨别目标物体和背景。对每个类别,我们都要训练一个二元SVM.

(5)最后,我们训练一个线性回归模型,为每个辨识到的物体生成更精确的边界框。

具体案例:
(1)输入一张图片

(2)选择性搜索得到感兴趣的区域

(3)将这些区域输入到CNN中,经过卷积网络

(4)CNN为每个区域提取特征,利用SVM将这些区域分成不同类别;

(5)最后用边界框回归预测每个区域的边界框位置。

2.2 RCNN的问题

训练一个RCNN模型非常昂贵,并且步骤较多:

(1)选择性搜索,要对每张图片提取2000个单独区域;

(2)用CNN提取每个区域的特征。假设我们有N张图片,那么CNN特征就是N*2000;

(3)用RCNN进行目标检测的整个过程有三个模型;

          a:用于特征提取的CNN

          b:用于目标物体辨别的线性SVM分类器

          c:调整边界框的回归模型

这些过程合并在一起,会让RCNN的速度变慢,通常每个新图片需要40-50秒的时间进行预测,基本上无法处理大型数据集。

3、Fast RCNN

3.1 Fast RCNN简介

想要减少RCNN算法的计算时间,可以用什么方法?我们可不可以在每张图片上使用一次CNN即可得到全部的重点关注区域呢,而不是运行2000次。

RCNN的作者Ross Girshick提出了一种想法,在每张照片上只运行一次CNN,然后找到一种方法在2000个区域中进行计算。在Fast RCNN中,我们将图片输入到CNN中,会相应地生成传统特征映射。利用这些映射,就能提取出感兴趣的区域。之后,我们使用一个ROI池化层将所有提出的区域重新修正得到合适的尺寸。以输入到完全链接的网络中。

简单地说,这一过程含有以下步骤:

(1)输入图片;

(2)输入到卷积网络中,它生成感兴趣区域;

(3)利用ROI池化层对这些区域重新调整,将其输入到完全连接网络中。

(4)在网络的顶层应用softmax层输出类别。同样使用一个线性回归层,输出相应层的边界框。

所以,和RCNN所需要的三个模型不同,Fast RCNN只用了一个模型就同时实现了区域的特征提取、分类、边界框生成。

同样,我们还用上面的图像作为案例,进行更直观的讲解。

(1)首先,输入图像;

(2)图像被传递到卷积网络中,返回感兴趣的区域;

(3)之后,在区域上应用ROI池化层,保证每个区域的尺寸相同;

(4)最后,这些区域被传递到一个完全连接的网络中进行分类,并用softmax和线性回归同时返回边界框。

3.2Fast RCNN的问题

但是即使这样,Fast RCNN也有某些局限性。它同样用的是选择性搜索作为寻找感兴趣区域的,这一过程通常较慢。与RCNN不同的是,Fast RCNN处理一张图片大约需要2秒。但是在大型真实数据集上,这种速度仍然不够理想。

4、Faster RCNN

4.1 Faster RCNN简介

Faster RCNN是Faste RCNN的优化版本,二者主要的不同在于感兴趣区域的生成方法,Fast RCNN使用的是选择性搜索,而Faster RCNN用的是Region Proposal网络(RPN)。RPN将图像特征映射作为输入,生成一系列object proposals,每个都带有相应的分数。

下面是Faster RCNN工作的大致过程:

(1)输入图像到卷积网络中,生成该图像的特征映射。

(2)在特征映射上应用Region Proposal Network,返回object proposals和相应分数。

(3)应用ROI池化层,将所有proposals修正到同样尺寸。

(4)最后,将proposals传递到完全连接层,生成目标物体的边界框。

那么Region Proposal Network具体是如何工作的呢?首先,将CNN中得来的特征映射输入到Faster RCNN中,然后将其传递到Region Proposal Network中。RPN会在这些特征映射上使用一个滑动窗口,每个窗口会生成具有不同形状和尺寸的k个anchor box:

Anchor boxes是固定尺寸的边界框,它们有不同形状和大小,每个anchor,RPN都会预测两点:

(1)首先是anchor就是目标物体的概率(不考虑类别)

(2)第二个就是anchor经过调整能更合适目标物体的边界框回归量。

现在我们有了不同形状、尺寸的边界框,将它们传递到ROI池化层中。经过RPN的处理,proposals可能没有所述的类别。我们可以对每个proposal进行切割,让它们都含有目标物体。这就是ROI池化层的作用。之后,这些特征映射会传递到完全连接层,对目标进行分类并预测边界框。

4.2Faster RCNN的问题

目前位置,我们所讨论的所有目标检测算法都用区域来辨别目标物体。网络并非一次性浏览所有图像爱嗯,而是关注图像的多个部分。这就会出现两个问题:

(1)算法需要让图像经过多个步骤才能提取出所有目标;

(2)由于有多个步骤嵌套,系统的表现常常取决于前面步骤的表现水平。

5、YOLO

Faster RCNN的方法目前是主流的目标检测方法,但是速度上并不能满足实时的要求。YOLO一类的方法慢慢显现出其重要性,这类方法使用了回归的思想,利用整张图作为网络的输入,直接在图像的多个位置上回归出这个位置的目标边框,以及目标所属的类别。

YOLO的目标检测的流程图:

(1)给个输入图像,首先将图像划分为7×7的网格

(2)对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)

(3)根据上一步可以预测出7×7×2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除荣誉窗口即可。

YOLO将目标检测任务转换成一个回归问题,大大加快了检测的速度,使得YOLO可以每秒处理45张图像。而且由于每个网络预测目标窗口时使用的是全图信息,使得false positive比例大幅降低。

但是YOLO也存在问题:没有了Region Proposal机制,只是用7×7的网格回归会使得目标不能非常精准的定位,这也导致了YOLO的检测精度并不是很高。

6、SSD

上面分析了YOLO存在的问题,使用整图特征在7×7的粗糙网格内回归对目标的定位并不是很精准。那是不是可以结合Region Proposal的思想实现精准一些的定位?SSD结合YOLO的回归思想以及Faster RCNN的anchor机制做到了这点。

上图是SSD的一个框架图,首先SSD获取目标位置和类别的方法跟YOLO一样,都是使用回归,但是YOLO预测某个位置使用的是全图的特征,SSD预测某个位置使用的是这个位置周围的特征。

不同于Faster RCNN,这个anchor是在多个feature map上,这样可以利用多层的特征并且自然的达到多尺度。

SSD结合了YOLO中的回归思想爱嗯和Faster RCNN中的anchor机制,使用全图各个位置的多尺度区域特征进行回归,既保持了YOLO速度快的特性,也保证了窗口预测的跟Fstaer RCNN一样比较精准。

参考:(1)https://zhuanlan.zhihu.com/p/46963225

(2)https://blog.csdn.net/ikerpeng/article/details/54316814

原文地址:https://www.cnblogs.com/zhibei/p/12426442.html