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,利用 对所有的 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