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