目标检测的深度学习算法也不是很熟,这方面都快被大牛们写烂了,这里仅根据近期自己的理解小记一下,如有偏颇望不吝指正。

RCNN(Regions
with CNN features)系列是由RossB.Girshick2014年提出,基于CNN良好的特征提取及分类性能,通过region
proposal
实现目标检测。

首先上一张图,rcnn艰辛的进化历程,至于yolo,ssd后面再续吧...

目标检测之RCNN系列浅析

第一行"24x"表示测试速度SPP相对于RCNN提速24倍左右,第二行每个框里的数据表示对应网络依然存在的问题。

下面讲解下每个网络的框架细节(网络框架均基于Alexnet):

RCNN:

有图才会更清晰

目标检测之RCNN系列浅析

Rcnn流程框架

步骤:

1、input图像做预处理,缩放到224x224;

2、select search提取候选区域RP(region proposal);

3、每个RP通过crop/warp处理到固定大小尺寸,分别输入到CNN的卷积层进行卷积计算FM(feature map);

4、第五层卷积得到的FM,基于线下训练的SVM分类器进行class;

5、将FM送到全连接层fc,执行bounding box regression;

缺陷:
1、第三步每个RP处理到固定大小,这是因为fc层接受与其相连卷积层的固定大小输出;
2、第三步,每个RP都要通过CNN卷积提一遍特征,2k个候选区域重复太多,造成资源的巨大浪费;
3、SVM分类器的训练为线下执行,一是占用大量的磁盘空间,二是cnn训练阶段无法整体调参
SPP:

 目标检测之RCNN系列浅析

SPP主要工作

目标检测之RCNN系列浅析

sppnet

显然由spp的主要工作可知:

1、开始阶段不再对region proposal 进行crop/warp的操作,而是将整张图片作为input输入;2、将RP的提取任务交给spatial pyramid pooling去做

这样做的目的一个是避免多次提取特征造成资源浪费,另外就是避免了crop/warp的形变带来的准确率下降。

实际上sppnet就是构造了一个多尺度金字塔池化层。

首先,input img  先经过select search算法获取约2k个RP的localtion;

其次,通过conv->pooling的stride、padding等操作将ss得到的RP映射到特征图conv5

然后,通过sppnet多个尺度(如4x4、2x2、1x1等)的网格对每个RP进行固定尺寸转换,以满足fc层的输入

sppnet提取的特征一方面用于svm的训练,另一方面做bbox的regression。

存在的问题:

1、依然采用svm做线下计算,我觉得这一步完全可以用softmax计算loss了,再与bbox reg并行。然而实际上在fastrcnn作者才开始这样考虑;

2、svm的线下计算存在磁盘空间的浪费

fast rcnn:


目标检测之RCNN系列浅析

FastRcnn流程框架

fast rcnn的创新点简单说就是上面提到的一个是替换了svm,采用softmax,证明效果还是好点的,另外一个就是多任务

损失,将分类和回归的loss加权求和合并计算。

燃鹅,现在还是不能达到end2end的训练方式,不要忘了,还有个select search没有被统一起来,这个ss还是相对很耗时的,

据说2s/m(没有实测)。这就是接下来faster rcnn的任务了。

faster rcnn:

目标检测之RCNN系列浅析

faster rcnn 的框架结构

faster rcnn主要针对耗时的ss进行改进,为了能统一到同一个网络架构下,实现end2end的训练方式,提出了RPN(region

proposal net),通过rpn反向映射锁定出一定的anchor区域作为RP。下面具体介绍下:

RPN:

rpn的处理是从最后一层卷积特征图51*39*256开始的,以3*3的滑动框口在feature map上滑动,其中padding=2,stride=1。
假定这个3*3的窗口是原图上不同的anchor通过spp得到,每个anchor就代表了我们想要得到的RP了。具体是将每个3*3的中心点映
射到原图某个位置,以该位置为中心,以1:1、1:2、2:1的面积区域crop出k个RP。然后针对feature map的每个中心点输出2k个cls分
类和4k个reg位置
rpn两个loss层的说明: 
最后还有两个loss层,这里的class-loss指代的不再是前景背景loss,而是真正的类别loss了,这个应该就很好理解了。而
bbox-loss则是因为rpn提取的只是前景背景的预测,往往很粗糙,这里其实是通过ROI-pooling后加上两层全连接实现更精细的box
修正(引用)

如上所述,faster rcnn准确率更高,不过速度仍有更大的优化空间。