目标检测方法概述,一

目标检测的问题,就是在给定的图片中找到物体的位置,并标明物体的类别。

目标检测方法概述,一

通过卷积神经网络CNN,我们可以完成图像识别,即分类任务,然后我们需要通过一些额外的功能完成定位任务,即找到上图中方框在图像中的位置(x,y,w,h)(x,y,w,h)(x,y,w,h)。

目前目标检测的研究路线如下,相关论文在这里可以找到,在这里我们选取部分论文来解释一下。目标检测方法概述,一

  • R-CNN

目标检测方法概述,一步骤1:训练一个分类模型(比如AlexNet);

步骤2:对该模型进行fine-tuning;

步骤3:用selective search提取图像的候选框,修正区域大小输入到CNN,将输出结果存入硬盘;

步骤4:训练一个SVM分类器判别物体类别;

步骤5:使用回归器修正候选框位置。

  • SPP Net

SPP:Spatial Pyramid Pooling(空间金字塔池化)

步骤1:首先通过selective search,对待检测的图片进行搜索出2000个候选窗口;

步骤2:把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框的区域,再对各个候选框采用SPP池化,提取出固定长度的特征向量;

步骤3:最后采用SVM算法进行特征向量分类识别。

主要特点:

1.实现了CNN的多尺度输入

如下图所示,在卷积层和全连接层之间加入SPP层,对于任意输入,SPP层中的每一个池化的卷积核会根据输入调整大小,因此SPP层的输出尺度始终是固定的。

目标检测方法概述,一

2.只对原图进行一次卷积

在R-CNN中,每个候选框都要resize到统一大小再输入到CNN中,要耗费很多时间,而SPP Net对原图只进行一次卷积得到feature map,然后找到每个候选框在feature map上的映射,将其作为卷积特征输入到SPP层。这样可以节省大量的计算时间,比R-CNN有一百倍左右的提速。

目标检测方法概述,一

  • Fast R-CNN

R-CNN使用selective search提取bounding box作为输入,但是在对所有区域进行特征提取时会有重复计算,导致R-CNN有严重的速度瓶颈。目标检测方法概述,一

Fast R-CNN提出一种可以看作单层SPP Net的网络层,叫ROI Pooling,它可以把不同大小的输入映射到一个固定尺度的特征向量。

ROI Pooling采用的是SPP的思路,但是实现方式不同,只使用了一层金字塔。下面是ROI Pooling的网络参数:

layer {

name: “roi_pool5”

type: “ROIPooling”

bottom: “conv5_3”

bottom: “rois”

top: “pool5”

roi_pooling_param {

pooled_w: 7

pooled_h: 7

spatial_scale: 0.0625 # 1/16

}

仅使用了(pooled_w,pooled_h)这个尺度,来将得到的每一个特征图分成(pooled_w,pooled_h),然后对每一块进行max_pooling取值,最后得到一个n*7*7固定大小的特征图。

另外,Fast R-CNN将bounding box regression放入了神经网络内部,与分类一起组成一个multi-task模型。实际实验也证明,这两个任务能够共享卷积特征,并相互促进。

可见,Fast R-CNN相对于R-CNN的提速原因就在于,不像R-CNN把每个候选区域给CNN提特征,而是整张图提一次特征,再把候选框映射到conv5上,剩下的只需要在conv5层上操作就可以了。

  • Faster R-CNN

Fast R-CNN使用selective search找出候选框,也非常耗时。Faster R-CNN提出一种全卷积神经网络叫做Region Proposal Network(RPN),用来提取region proposals。

目标检测方法概述,一

步骤1:将整张图片输入CNN,进行特征提取;

步骤2:用RPN生成anchors,并对其进行筛选和标记,然后通过NMS剔除重叠的anchors,得到最终的region proposals,每张图片生成300个region proposals;

步骤3:把region proposals映射到CNN最后一层卷积的feature map上;

步骤4:通过ROI pooling使每个region proposal生成固定尺寸的feature map;

步骤5:使用softmax loss和smooth L1 loss对分类概率和边框回归进行联合训练。

RPN网络的结构如下图:

目标检测方法概述,一

下图为Caffe版本的RPN网络图:

目标检测方法概述,一RPN的输入为原图片卷积之后得到的feature map,输出就是region proposals。

如何找到region proposals,就涉及到一个anchor的概念。在feature map上添加一个滑窗,即上图中的sliding window,在每个滑窗中假定可以最多找到kkk个region proposals,这kkk个region proposals可以被参数化为kkk个相关的box,这就是anchors。anchors是由不同的尺度(scale)和长宽比(aspect ratio)得到。

目标检测方法概述,一

通过anchors,RPN就可以得到region proposals的信息。这种方式产生的region proposal个数远少于selective search产生的个数,而且质量也有很大的提升。

Faster R-CNN包含四个损失函数:

  • RPN calssification(anchor good.bad)

  • RPN regression(anchor->proposal)

  • Fast R-CNN classification(over classes)

  • Fast R-CNN regression(proposal ->box)

  

训练时采用4步交替训练(4-step alternating training):

  1. 单独训练RPN,得到RPN1,CNN1

  2. 单独训练Fast R-CNN,结合第一步的region proposal,得到Fast R-CNN1,CNN2

  3. fine-tune RPN1 on CNN2,得到RPN2(共享卷积层)

  4. fine-tune Fast R-CNN1 on CNN2,结合第三步的region proposal,得到Fast R-CNN2(共享卷积层)