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 有多快? ^47lhf0

  • 一张图上存在非常锚框(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