FasterRCNN:Towards Real-Time Object Detection with Region Proposal Networks

一种 two-stage 的目标检测算法,基 Fast RCNN,主要改进是:使 Region Proposal Networks (RPN) 替选择性搜索 (Selective Search,SS) 生成获选框,实现了端到端训练

什么是 Faster RCNN?

  • 一种 two-stage 的目标检测算法,基 Fast RCNN,主要改进是:使 Region Proposal Networks (RPN) 替选择性搜索 (Selective Search,SS) 生成获选框,实现了端到端训练
  • Fast RCNN 的目标检测思想 RCNN SPPNet Fast RCNN 等网络一样,先通过 CNN 提取获选框的固定长度的特征,然后通过一维特征进行获选框的分类及回归

Faster RCNN 的网络结构?

  • Conv layers: 首先使用一组基础的 conv+relu+pooling 层提取 image 的 feature maps,该 feature maps 被共享用于后续 RPN 层和全连接层,输出为:(M/16)x(N/16)
  • Region Proposal Networks: RPN 网络用于生成 region proposals。该层通过 softmax 判断 anchors 属于 positive 或者 negative,再利用 bounding box regression 修正 anchors 获得精确的 proposals
  • Roi Pooling: 该层收集输入的 feature maps 和 proposals,综合这些信息后提取 proposal feature maps,送入后续全连接层判定目标类别
  • Classification: 利用 proposal feature maps 计算 proposal 的类别,同时再次 bounding box regression 获得检测框最终的精确位置

Faster RCNN 目标检测任务步骤?

  • 1)预训练网络:将整张图片输入 CNN,预训练网络
  • 2)生成建议框:RPN 在 Anchor box 的基础上生成一批建议窗口
  • 3)映射建议框:把建议窗口映射到 CNN 的最后一层卷积 feature map 上
  • 4)提取建议框固定长度特征:通过 RoI pooling 层使每个 RoI 生成固定尺寸的 feature map
  • 5)建议框分类与回归:利用 Softmax Loss (探测分类概率) 和 Smooth L1 Loss (探测边框回归) 对分类概率和边框回归 (Bounding box regression) 联合训练

Faster RCNN 训练 Head 时的正负样本划分?

  • 训练 Head 时,是冻结 RPN 的,此时划分正负样本是为了在 Head 后面计算损失
  • 正样本: 与 gt box 的 IoU 大于 0.5 的 proposal box 作为正样本,注意,是将 proposal box 与 gt box 计算 IoU
  • 负样本: 其余 IoU0.1,0.5} 之间的作为负样本,低于 0.1 的作为难例挖掘时的启发式样本

Faster RCNN 的损失有哪些?

  • RPN 分类(区分物体前景 / 背景)
  • RPN 回归(Anchor⇒ROI)
  • Fast RCNN 分类(区分对象类)
  • Fast RCNN 回归(ROI⇒边界框)

什么是 Region Proposal Networks (RPN)?

  • 主要作用是生成建议框,主要步骤包括:anchors 分类、bbox reg 回归及 Proposal

  • 参 Faster RCNN 的锚框 (Anchor),RPN 每个位置生成 9 个锚框。MxN 大小图像输入后,到 RPN 网络前变为 (M/16) x (N/16)

  • anchors 分类:通过 softmax 分类 anchors 获得 positive 和 negative 分类

    • 1)使用 1x1 的卷积,将输入调整为 WxHx18,表示每个位置 9 个锚框的 2 分类结果
    • 2)第一个 Reshape 是将数据由 (N,18,W,H) 调整为 (N,2,9xW,H),适配进行 softmax 进行二分类
    • 3)第二个 Reshape 将数据由 (N,2,9xW,H) 还原为 (N,18,W,H)
  • bbox reg 回归:计算对于 anchors 的 bounding box regression 偏移量,以获得精确的 proposal。使用 1x1 的卷积,将输入调整为 36,表示每个位置 9 个锚框的 x,y,w,h

  • Proposal 层: 综合 positive anchors 和对应 bounding box regression 偏移量获取 proposals,同时剔除太小和超出边界的 proposals

Faster RCNN 的 RPN 中的 Proposal 层的步骤?

  • 1)生成 anchors,利用[dx(A),dy(A),dw(A),dh(A)]\left[d_{x}(A), d_{y}(A), d_{w}(A), d_{h}(A)\right] 对所有的 anchors 做 bbox regression 回归(这里的 anchors 生成和训练时完全一致)
  • 2)按照输入的 positive softmax scores 由大到小排序 anchors,提取前 pre_nms_topN (e.g. 6000) 个 anchors,即提取修正位置后的 positive anchors
  • 3)限定超出图像边界的 positive anchors 为图像边界,防止后续 roi pooling 时 proposal 超出图像边界
  • 4)剔除尺寸非常小的 positive anchors
  • 5)对剩余的 positive anchors 进非极大值抑制(NMS)
  • 6)Proposal 输出 positive anchorsx1, y1, x2, y2],该位置对应的是 MxN 尺度的

Faster RCNN 训练 RPN 时的正负样本划分?

  • 在所有预测的 box 中确定正负样本,因为一个 anchor 对应一个预测的 box 和类别,那么确定预测的 box 是正例还是负例等价于确定 anchor box 的是正例还是反例
  • 正样本: 与 gt box 的 IoU 为 最大或者大于 0.7 的 anchor box 被设置为正样本,这会导致一个 gt box 与多个预测 box 计算损失, 即允许多个 box 预测同一对象,
  • 负样本: 与 gt box 的 IoU 小于 0.3 的 anchor box 被设置为负样本,其余的忽略掉,即不参与 loss 计算

Region Proposal Networks (RPN) 扫描 Anchor 有多快?

  • 一张图上存在非常锚框 (Anchor),但 Region Proposal Networks (RPN) 扫描速度极快
  • 首先,滑动窗口是由 RPN 的卷积过程实现的,可以使用 GPU 并行地扫描所有区域
  • 其次,RPN 并不会直接扫描图像,而是扫描 featrue map,这使得 RPN 可以有效地复用提取的特征,并避免重复计算
  • 通过这些优化手段,RPN 可以在 10ms 内完成扫描

Faster RCNN 如何使用 RoIPooling?

  • 感兴趣区域池化 (RoIPooling) 是 Fast RCNN 提出的池化技术,用于将不同大小的特征池化到相同大小。在 Faster RCNN 包括有 2 个输入:(1) 原始的 feature maps;(2) RPN 输出的 proposal boxes(大小各不相同)
  • 由于 proposal 是对应 MxN 尺度的,所以首先使用 spatial_scale 参数将其映射回 (M/16) x (N/16) 大小的 feature map 尺度
  • 再将每个 proposal 对应的 feature map 区域水平分为 pooled_w x pooled_h 网格,对网格的每一份都进行全局 max pooling 处理,论文是 7x7

Faster RCNN 如何进行框的分类与回归?

  • Classification 部分利用已经获得的 proposal feature maps,通过全连接层与 softmax 计算每个 proposal 具体属于那个类别(如人,车,电视等),输出 cls_prob 概率向量
  • 利用 bounding box regression 获得每个 proposal 的位置偏移量 bbox_pred,用于回归更加精确的目标检测框

Faster RCNN 的锚框 (Anchor) 是什么?

  • 锚框是图片上的矩形,实际上是由锚点 + 长宽 + 长宽比定义的,Faster RCNN 为每个锚点定义 3 种尺度 {32,64,128} 及 3 个长宽比 { 1:1,1:2,2:1},每个锚点生成 9 个锚框
  • RPN 的输入大小是 50x38,一共生成 17100 个锚框
  • 注意:全部 anchors 拿去训练太多了,训练程序会在合适的 anchors 中随机选取 128 个 postive anchors+128 个 negative anchors 进行训练

Faster RCNN 引入锚框的作用?

  • 收敛速度:Faster RCNN 之前,目标候选框都是通过 选择性搜索实现的,搜索速度慢且质量不高,并且导致模型始终不是 end-to-end 的,引入锚框后,通过神经网络学习锚框信息,替代了选择性搜索的过程,其速度更快、质量更高
  • 固定输出:对一张图进行学习时,分类任务一定输出定长的向量,但是进行目标检测任务时,由于其目标数量不定,所以对神经网络的输出产生疑惑,总不能这张图神经网络输出 2 个目标,那张图输出 5 个目标。有了锚框后,所有图片的某一个位置只能输出固定数量的向量

什么是 Faster R-CNN-FPN?

  • Faster R-CNN 结合 FPN 的二阶段目标检测网络,对小目标的检测能力大大提升
  • 1)backbone: 原图短边被 resize 到 800 像素,输出为 4 个不同尺寸的 feature map(C2、C3、C4、 C5 )
  • 2) FPN: 4 个不同尺寸的 feature map(C2、C3、C4、C5)作为输入,输 出 5 个不同尺寸的 feature map(P2、P3、P4、P5、P6)
  • 3) RPN:输入为 FPN 产生的 feature map(P2、P3、P4、P5、P6);由于 RPN 是在 5 个输入 feature map 上进行独立的预测,则每个 feature map 都会输出 proposal box,因此不可能将所有的 proposal box 都提供给 Fast R-CNN,这里的做法是对每个 feature map 上产生的 proposal box 按类别概率进行排序(每个 feature map 上的 proposal box 独立进行),然后选择前 k 个 proposal box, 5 个 feature map 一共会产生 5K 个 proposal box,训练时 k=2000 ,推理时 k=1000,最后将所有的 5K 个 proposal box 合并后统一进行 NMS(IoU threshold=0.7)去掉冗余的 box,最后选择前 m 个输出给 Fast R-CNN,训练和测试时 m 都取 1000
  • 4) Fast R-CNN:输入为 FPN 产生的前 4 个 feature map 和 RPN 输出的 proposal box,4 个 feature map 为 P2、P3、P4、P5、P6