Fast R-CNN

一种two-stage的目标检测算法,设计感兴趣区域池化(RoIPooling),并去掉SVM训练的获选框分类器;最终,在选择性搜索(SelectiveSearch,SS)之后,神经网络可以进行端到端训练

什么是 Fast RCNN?

  • 是一种two-stage的目标检测算法,借鉴SPPNet 设计感兴趣区域池化(RoIPooling),并去掉SVM训练的获选框分类器;最终,在选择性搜索(SelectiveSearch,SS)之后,神经网络可以进行端到端训练

Fast RCNN 的目标识别任务步骤?

  • FastRCNN-20230408141502
  • 1)获得候选框:利用选择性搜索 (Selective Search, SS) 在图像提取 2000 个左右建议窗口 (Region Proposal)
  • 2)网络学习整张图片:将整张图片输入 CNN,进行特征提取
  • 3)获得获选框最后一层特征:把候选框映射到 CNN 的最后一层卷积 feature map 上
  • 4)获得获选框固定长度特征:通过 RoI pooling 层使每个获选框特征变为固定长度
  • 5)获选框的分类与回归:利用 Softmax Loss (探测分类概率) 和 Smooth L1 Loss (探测边框回归) 对分类概率和边框回归 (Bounding box regression) 联合训练

什么是感兴趣区域池化(RoIPooling)?

  • RoIPooling 是 Pooling 层的一种,而且是针对感兴趣区域 (RoI) 的 Pooling,其特点是输入特征图尺寸不固定,但是输出特征图尺寸固定

ROIPooling如何计算池化结果?

  • 假设模型输入是:3x512x512,经过特征提取得到512x16x16的特征,即数据下采样512/16=32倍,现有目标位置(192,296),大小145x200
  • ROI映射: 计算得到该目标在特征图上位置为:(296/32=9.25,192/32=6),大小为(200/32=6.25,145/32=4.53),ROIPooling会将小数舍去,如此将使用下图黄色+绿色的区域下采样,舍弃蓝色区域
  • ROI区域池化: 假设特张图上的值如下图,对上图黄色+绿色区域进行3x3的ROI pooling,由于4/3=1.3,所以每个bin为1行数据下采样,最终得到绿色3x3新特征图,由图可知我们彻底失去最后一行

ROIPooling 的反向传播?

  • 类比最大池化层做反向传播 ,不同在于,最大池化前

Fast RCNN中ROI Pooling的输入是什么?

  • 输入包含两部分
  • 特征图(feature map): 指的是上面所示的特征图,在 Fast RCNN 中,它位于 RoI Pooling 之前,在 Faster RCNN 中,它是与 RPN 共享那个特征图,通常我们常常称之为“share_conv”
  • RoIs: 其表示所有 RoI 的 N* 5 的矩阵。其中 N 表示 RoI 的数量,第一列表示图像 index,其余四列表示其余的左上角和右下角坐标。在 Fast RCNN 中,指的是选择性搜索 (Selective Search, SS) 的输出;在 Faster RCNN 中指的是 Region Proposal Networks (RPN) 的输出,一堆矩形候选框,形状为 1x5x1x1(4 个坐标+索引 index)

Fast RCNN的ROI Pooling与SPPNet的Spatial Pyramid Pooling有什么区别?

  • ROI(Region of Interest) Pooling是Pooling的一种, 是针对RoIs的Pooling,其特点是输入特征图尺寸不固定,但是输出特征图尺寸固定
  • ROI Pooling 的思想来自于 SPPNet 中的空间金字塔池化(SpatialPyramidPooling,SPP),将 SPPNet 中多尺度的池化简化了为单尺度,且按原始位置排列(不像 SPP 将特征排成一行)

Fast RCNN如何进行训练?为什么比SPPNet快?

  • 没有单独训练 SVM 分类器:Fast RCNN 将候选框的分类及定位任务都在卷积网络中完成,
  • Fast RCNN能够使用反向传播来更新训练所有的网络权重。SPPNet不能更新所有的权重,不能更新spp之前层的参数。 根本原因是当每个训练样本(即RoI)来自不同的图像时,通过SPP层的反向传播是非常低效的

Fast RCNN的输入中,多个感兴趣区域,如何产生最后的输出?

  • 输入的维度是[N, C, H, W],表示 N 张图片累加的 C 个感兴趣区域,论文 N=2,C=128,表示每个 batch 使用 2 张图片,每张图片拟合 64 个感兴趣区域
  • 就一张图片而言,虽然其目标的数量不定,但是感兴趣区域却被固定为64,所以输出也是固定为64

Fast RCNN的ROI池化时,选择单尺度还是多尺度?

  • 这里多尺度的5表示输入图像采用5中不同的尺寸,比如[480,576,688,864,1200],在测试的时候发现多尺度虽然能在mAP上取得一点提升,但是时间代价也比较大,直接原因是:深度卷积网络可以学习尺度不变性
  • FastRCNN-20230408141505

Fast RCNN的直接在卷积神经网络进行多任务训练有用吗?

  • 一共有S,M,L三个组,每个组有4列,分别表示:1、仅采用分类训练,测试也没有回归;2、采用论文中的分类加回归训练,但是测试时候没有回归;3、采用分段训练,测试时候有回归;4、采用论文中的分类加回归训练,且测试时候有回归 ,可以看出多任务训练有效
  • FastRCNN-20230408141506

Fast RCNN使用softmax替换SVM分类,有什么作用?

  • softmax 略微优于所有三个网络的 SVM。这种效果很小,但表明与以前的多阶段训练方法相比,“一次性” 微调就足够了。我们注意到,softmax 与二分类的 svm 不同,在 scorin 时引入了 class之间的竞争
  • FastRCNN-20230408141506-1

Fast RCNN的损失函数?

  • losscls 层评估分类代价:由真实分类 u 对应的概率决定 Lcls=logpuL_{c l s}=-\log p_{u}
  • lossbbox 评估检测框定位代价:比较真实分类对应的预测参数 tut^u 和真实平移缩放参数为 v 的差别 Lloc=Σi=14g(tiuvi)L_{l o c}=\Sigma_{i=1}^{4} g\left(t_{i}^{u}-v_{i}\right),g 为平滑绝对值损失 (Smooth L1 Loss),对 outlier 不敏感

    g(x)={0.5x2x<1x0.5 otherwise g(x)= \begin{cases}0.5 x^{2} & |x|<1 \\ |x|-0.5 & \text { otherwise }\end{cases}

  • 总代价为两者加权和,如果分类为背景则不考虑定位代价

    L={Lcls+λLlocu 为前景 Lclsu 为背景 L= \begin{cases}L_{c l s}+\lambda L_{l o c} & u \text { 为前景 } \\ L_{c l s} & u \text { 为背景 }\end{cases}

Fast RCNN 相比较 R-CNN,有什么不同?

  • 最后一层卷积层后加了一个ROI pooling layer
  • 损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练

Fast RCNN 相比较 R-CNN、SPPNet,有哪些改进?

  • SPPNet算法来解决RCNN中重复卷积的问题,但是SPPNet依然存在和RCNN一样的一些缺点比如:训练步骤过多,需要训练SVM分类器,需要额外的回归器,特征也是保存在磁盘上
  • Fast RCNN相当于全面改进了原有的这两个算法,不仅训练步骤减少了,也不需要额外将特征保存在磁盘上
  • Fast RCNN算法在训练速度上比RCNN快了将近9倍,比SPPNet快大概3倍;测试速度比RCNN快了213倍,比SPPNet快了10倍