R-CNN, FastR-CNN, FasterR-CNN

1. R-CNN

Rich feature hierarchies for accurate object detection and semantic segmentation [CVPR14] pdf
R-CNN, FastR-CNN, FasterR-CNN_第1张图片

  1. 在输入图片上通过selective search方法选择RoI,也就是Region Proposal(候选框),R-CNN中的R就来自于这个词。
  2. 对于每个proposal,通过CNN提取特征
  3. 对于提取的特征,bbox回归确定边界框位置,SVM用来做分类确定目标的类别。
    R-CNN, FastR-CNN, FasterR-CNN_第2张图片

R-CNN问题:

  1. 要有专门的训练目标函数:log loss, hinge loss, least squares
  2. 训练麻烦而且时间长
  3. 推断过程也很慢

对于每个候选区域用一个CNN,后来出现的SPPNet解决了输入尺寸不确定的问题:
R-CNN, FastR-CNN, FasterR-CNN_第3张图片
SPPNet提出了空间金字塔池化,将输出不同尺寸的feature map通过SPP层变成固定的长度的全连接层输入

2. Fast R-CNN

Fast R-CNN [ICCV15] pdf
R-CNN, FastR-CNN, FasterR-CNN_第4张图片

  • 用一个convnet施加在输入图片上(卷积共享,提升速度)。
  • 在这个convnet输出的feature map上找到输入图片上对应的RoI,特征图上的区域就是输入图像上RoI的特征。
  • 将这些区域的特征分别通过RoI pooling层(借鉴SSPNet的思想),变成固定长度的全连接层输入
  • 分类和回归也放入到网络中去。

Fast R-CNN问题:

图像进入网络之前还需要在CPU上用传统算法ss找RoI,这步操作占据了检测时间的大部分,差不多两秒。

3. Faster R-CNN

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks [NIPS15] pdfR-CNN, FastR-CNN, FasterR-CNN_第5张图片

  • 用一个convnet施加在原始输入图片上
  • 在这个convnet输出的feature map上施加一个Region Proposal Network (RPN),用来代替之前在原始图像上的传统方法。产生很多个候选框。RPN后接也两个loss,classification loss为二分类,判断这个框是不是物体,用来过滤不要的候选框,bbox regression loss微调给定的边框,使之anchor box可以更接近gt的框。
  • 后面的步骤和RCNN一样,classification loss为多分类。

RPN

R-CNN, FastR-CNN, FasterR-CNN_第6张图片

  • 经过VGG或者ZFNet产生的特征图作为RPN的输入。
  • 在特征图上执行3x3的滑窗操作,每个滑窗对应的区域映射为低维特征(256-d for ZF and 512-d for VGG, with ReLU following),后接两个全连接分支:一个分类一个回归。
  • 每个3x3滑窗的中心,在原始图像上对应的感受野上有 k k k个anchor boxes(论文中是9个:3个尺度和对应的3个长宽比),所以每个滑窗会得到2k个分类结果和4k个回归结果。
  • 假如特征图大小有 W × H W\times H W×H,则会产生 W × H × k W\times H\times k W×H×k个anchors.
    论文输出特征图60x40,大概要2w个框
    RPN具有平移不变性

训练RPN

为了训练RPN,需要对每个anchor构造一个二分类的label,即这个框是不是物体。
标记为正标签:i)跟gt的IOU最大的框为正. ii)跟gt的IOU大于0.7的为正。
标记为负标签:跟gt的IOU小于于0.3的为负。大于0.3小于0.7的对损失函数不做贡献。
损失函数:
在这里插入图片描述
L c l s L_{cls} Lcls:log loss,
L r e g L_{reg} Lreg:smooth L1.
λ = 10 \lambda =10 λ=10
回归的损失求的是预测和真实之间一种变换的因子, t i t_i ti, t i ∗ t_i^* ti由下面公式给出:
R-CNN, FastR-CNN, FasterR-CNN_第7张图片

RPN训练细节

SGD
mini-batch为1,因为一张图像就产生很多个框。在一张图像中随机选256个anchor
将特征图上超过边界的框过滤掉,不过在测试过程中,超过边界的框不过滤,需要clip,也就是超出的部分切掉。
通过NMS,设置阈值0.7,将重叠的框再过滤掉。
然后再在这些框中取top128做正样本。


你可能感兴趣的:(Learning,notes,Object,Detection)