目标检测(三)——Fast R-CNN

简介

Fast R-CNN借鉴了 SPPNet 的 spatial pyramid pooling layer ,并简化为只有一个固定范围的 RoI pooling layer。并进一步升级,将网络之间统一训练(分类+边框回归),不仅大大提高了训练与测试的速度,而且小幅地提高了mAP。


原理

改进的地方:

  • 提出一个RoI pooling(region of interest即候选区),然后整合整个模型,把CNN、SPP变换层、分类器、bbox回归几个模块一起训练。

目标检测(三)——Fast R-CNN_第1张图片

步骤

  • 首先将整个图片输入到一个基础卷积网络,得到整张图的feature map
  • 将region proposal(RoI)映射到feature map中
  • RoI pooling layer提取一个固定长度的特征向量,每个特征会输入到一系列全连接层,得到一个RoI特征向量(此步骤是对每一个候选区域都会进行同样的操作
  1. 其中一个是传统softmax层进行分类,输出类别有K个类别加上”背景”类(最终得到是N+1类)
  2. 另一个是bounding box regressor(边框回归)

RoI pooling

首先RoI pooling只是一个简单版本的SPP层,目的是为了减少计算时间并且得出固定长度的向量。
目标检测(三)——Fast R-CNN_第2张图片
RoI池层使用最大池化将任何有效的RoI区域内的特征转换成具有H×W的固定空间范围的小feature map,其中H和W是超参数 它们独立于任何特定的RoI。

例如:VGG16 的第一个 FC 层的输入是 7 x 7 x 512,其中 512 表示 feature map 的层数。在经过 pooling 操作后,其特征输出维度满足 H x W。

假设输出的结果与FC层要求大小不一致,对原本 max pooling 的单位网格进行调整,使得 pooling 的每个网格大小动态调整为 h/H,w/W,

最终得到的特征维度都是 HxWxD。

single scale 与 multi scale

  • single scale,直接将image设定为某种scale,直接输入网络来训练即可。(Fast R-CNN)
  • multi scale,也就是要生成一个金字塔,然后对于object,在金字塔上找到一个大小比较接近227x227的投影版本

后者比前者更加准确些,不过没有突出很多。但是第一种时间要省很多,所以实际采用的是第一个策略,因此Fast R-CNN要比SPPNet快很多也是因为这里的原因。

End-to-End model(端到端模型)

从输入端到输出端直接用一个神经网络相连(分类使用Softmax),整体优化目标函数

  • 使用了softmax分类
  • RoI pooling能进行反向传播,SPP层不适合(因为SPP有多个尺度)
    目标检测(三)——Fast R-CNN_第3张图片
    Rol pooling进行反向传播时,只需更新被池化到的参数。

并且实验验证了使用softmax与SVM在结果上并没有太大的差别。

多任务损失(Multi-task loss)

两个loss,分别是:

  • 对于分类loss,是一个N+1维的softmax输出,其中的N是类别个数,1是背景,使用交叉熵损失
    之所以要N+1类,是因为region proposal 会被标记为0,什么都没有,会什么类别都不是,因此最后一层神经元要 N+1 个。
  • 对于回归loss,是一个4xN维输出的regressor,也就是说对于每个类别都会训练一个单独的regressor,使用平均绝对误差(MAE)损失即L1损失
    目标检测(三)——Fast R-CNN_第4张图片

这里训练的就是边框对应的4个坐标,左上角一对坐标,右下角一对坐标

Fine-tuning for detection

Fast R-CNN能fine-tune卷积层,并且实验验证了这对深层卷积网络(例如VGG16)是重要的,能fine-tune的原因如下:

  • 这里Fast R-CNN采用图片中心化采样image-centric sampling:mini-batch采用层次采样,即先对图像采样【N个】,再在采样到的图像中对候选区域采样【每个图像中采样R/N个,一个mini-batch共计R个候选区域样本】,同一图像的候选区域卷积共享计算和内存,降低了运算开销。
  • 而R-CNN与SPPNet采用RoI-centric sampling:所有图片的所有候选区域中均匀取样,这样每个SGD的mini-batch中包含了不同图像的样本,不同图像之间不能共享卷积计算和内存,运算开销大。

论文中指出,最开始担心这种方法会减慢训练收敛的速度,但是实际作者在实际实验中并没有出现这样的问题,并且还收敛地更快了。

SVD全连接层加速网络

目标检测(三)——Fast R-CNN_第5张图片

从上图可以看出全连接层在测试时间中占了很大的一部分比例,所以可以使用SVD分解来加速全连接层。
① 物体分类和窗口回归都是通过全连接层实现的,假设全连接层输入数据为x,输出数据为y,全连接层参数为W,尺寸为u×v,那么该层全连接计算为:

y=Wx(计算复杂度为u×v)

② 若将W进行SVD分解,并用前t个特征值近似代替,即:

W=U∑VT≈U(u,1:t)⋅∑(1:t,1:t)⋅V(v,1:t)T

那么原来的前向传播分解成两步:

y=Wx=U⋅(∑⋅VT)⋅x=U⋅z

计算复杂度为u×t+v×t,若t

在实现时,相当于把一个全连接层拆分为两个全连接层,第一个全连接层不含偏置,第二个全连接层含偏置;实验表明,SVD分解全连接层能使mAP只下降0.3%的情况下提升30%的速度,同时该方法也不必再执行额外的微调操作。
目标检测(三)——Fast R-CNN_第6张图片


总结

Fast R-CNN与R-CNN和SPPNet对比

目标检测(三)——Fast R-CNN_第7张图片

一张图概括

目标检测(三)——Fast R-CNN_第8张图片

缺点

使用Selective Search提取Region Proposals,没有实现真正意义上的端对端,操作也十分耗时(这在之后Faster R-CNN会改善)

你可能感兴趣的:(目标检测,cnn,目标检测,r语言,Fast,R-CNN)