目标检测学习之路

未写完…

最近为了做毕设,重新开始看目标检测相关的一系列论文,在这里记录一下自己的学习过程,也方便以后复习。


R-CNN / 2013.11

论文:Rich feature hierarchies for accurate object detection and semantic segmentation

Ross Girshick等人发表的这篇文章,首次将卷积神经网络用于「目标检测」,从这以后才有越来越多人将深度学习用于该问题,所以该论文意义深远。

主要解决了传统方法的两个问题:

1. 速度
R-CNN使用启发式方法(Selective Search) ,先生成候选区域再检测,降低信息的冗余度,从而提高了检测速度。

2. 特征提取
传统的手工提取,特征仅限于低层次的颜色、纹理等,故效果差。


SPP-Net / 2014.6

论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

在R-CNN提出半年后,何恺明等人提出了SPP-Net。

R-CNN中存在两个比较大的问题,SPP-Net就解决了这两个问题:
1. 算力冗余
先生成候选区域,再对区域进行卷积,这使得候选区域会有一定程度上的重叠,对相同的区域进行重复的卷积,而每个区域进行新的卷积还需要新的存储空间。

SPP-Net对此进行了优化,将先生成候选区域再卷积,改为先卷积再生成候选区域。这样,不仅减少了存储量而且加快了训练速度。

2. 图片的裁剪与缩放
在SPP-Net之前,所有的神经网络都是需要输入固定尺寸的照片,比如224*224(ImageNet)、32*32(LenNet)等。这样当我们希望检测各种大小的图片时,需要经过crop,或者warp等一系列操作,这都在一定程度上导致图片信息的丢失和变形,限制了识别精确度。而且,从生理学角度出发,人眼看到一个图片时,大脑会首先认为这是一个整体,而不会进行crop和warp,所以更有可能的是,我们的大脑通过搜集一些浅层的信息,在更深层才识别出这些任意形状的目标。

为什么需要固定输入图片的大小?

卷积层的参数和输入大小无关,它仅是一个卷积核在图像上滑动,对不同大小的图片卷积得到不同大小的特征图(feature map);但是全连接层(FC Layer)情况则不一样。由于全连接层把输入的所有像素点连接起来,需要指定输入层神经元个数和输出层神经元个数,所以必须规定输入的特征图大小,以指定参数个数。

SPP-Net解决方法

SPP-Net在最后一个卷积层后,接入了金字塔池化(spatial pyramid pooling)层,使用这种方式,可以让网络输入任意的图片,而且还会生成固定大小的输出。

什么是金字塔池化?

从图中分析,黑色图片代表Conv5之后的feature map,其大小任意。接着以不同大小的块来提取特征,分别是4*4,2*2,1*1,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的块(Spatial bins),我们从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量。这种以不同的大小格子的组合方式来池化的过程就是空间金字塔池化(SPP)。如果要进行空间金字塔最大池化,就是从这21个图片块中,分别计算每个块的最大值,从而得到一个21维特征的输出单元。共用256个滤波器,最终输出向量大小固定为bins*filters,即(16+4+1)*256,作为全连接层的输入。

总的来说,金字塔池化意义在于多尺度特征提取出固定大小的特征向量


Fast R-CNN / 2015.4

论文:Fast R-CNN

Ross Girshick在R-CNN之后,再次提出了Fast R-CNN,该论文中引用了SPP-Net的工作,相对于之前的R-CNN所做的最大优化就是

将原来的串行结构改成并行结构

------ Finished ------
0%