目标检测经典网络之Fast R-CNN

Fast R-CNN

R-CNN的最大缺陷是:对每个SS产生的proposal都要进行截图再放到CNN中进行计算,假设有2000个region proposal,就要进行2000次,效率非常低!!

Fast R-CNN对其改进:对原图先整张图进行一次CNN特征提取。

首先,我们先了解一下SPPNet

SPPNet:空间金字塔池化卷积网络(Spatial Pyramid Pooling Convolutional Networks )。将CNN的输入从固定尺寸改进为任意尺寸。SPPNet在普通CNN结构中加入了ROI池化层(ROI Pooling),使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维度的向量。

目标检测经典网络之Fast R-CNN

ROI池化层:对输入的宽w、高h、通道数c的卷积特征进行划分。分别为4x4、2x2、1x1的网格,对每个网格中的每个通道进行最大值池化(取最大值),得到的特征是16c+4c+c=21c维的特征。很显然,这个输出特征的长度与w 、h 两个值是无关的,因此ROI 池化层可以把任意宽度、高度的卷积特征转换为固定长度的向量。

SPPNet原理:先对图像进行一遍卷积计算,得到整个图像的卷积特征。接着, 对于原始图像中的各种候选框,只需要在卷积特征中找到对应的位置框,再使用 ROI 池化层对位置框中的卷积提取特征,就可以完成特征提取工作。在提取特征后,使用了SVM 进行分类。

R-CNN 要对每个区域(有重叠)计算卷积,而SPPNet 只需要对整张图片计算一次,因此 SPPNet 的效率比 R-CNN 高得多。

Fast R-CNN相对于R-CNN的改进点:

目标检测经典网络之Fast R-CNN

通过借鉴(SPPNet)空间金字塔网络,加入ROI pooling层

      a、所有ROI公用同一层特征,缩短了对不同的ROI分别提取特征所消耗的时间

      b、可以在得到特征之后,再实现根据不同大小的ROI生成同样大小的FC特征。实现可以接受不同大小的图片作为输入

损失函数使用了multi-task-loss(多任务损失)函数,将分类和回归合并到一个loss中

使用SVD,在精度损失不多的情况下,加速FC层。