Fast R-CNN
一种two-stage的目标检测算法,设计感兴趣区域池化(RoIPooling),并去掉SVM训练的获选框分类器;最终,在选择性搜索(SelectiveSearch,SS)之后,神经网络可以进行端到端训练
什么是 Fast RCNN?
- 是一种two-stage的目标检测算法,借鉴SPPNet 设计感兴趣区域池化(RoIPooling),并去掉SVM训练的获选框分类器;最终,在选择性搜索(SelectiveSearch,SS)之后,神经网络可以进行端到端训练
Fast RCNN 的目标识别任务步骤?
- 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上取得一点提升,但是时间代价也比较大,直接原因是:深度卷积网络可以学习尺度不变性
Fast RCNN的直接在卷积神经网络进行多任务训练有用吗?
- 一共有S,M,L三个组,每个组有4列,分别表示:1、仅采用分类训练,测试也没有回归;2、采用论文中的分类加回归训练,但是测试时候没有回归;3、采用分段训练,测试时候有回归;4、采用论文中的分类加回归训练,且测试时候有回归 ,可以看出多任务训练有效
Fast RCNN使用softmax替换SVM分类,有什么作用?
- softmax 略微优于所有三个网络的 SVM。这种效果很小,但表明与以前的多阶段训练方法相比,“一次性” 微调就足够了。我们注意到,softmax 与二分类的 svm 不同,在 scorin 时引入了 class之间的竞争
Fast RCNN的损失函数?
- losscls 层评估分类代价:由真实分类 u 对应的概率决定
- lossbbox 评估检测框定位代价:比较真实分类对应的预测参数 和真实平移缩放参数为 v 的差别 ,g 为平滑绝对值损失 (Smooth L1 Loss),对 outlier 不敏感
- 总代价为两者加权和,如果分类为背景则不考虑定位代价
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倍