区域建议网络(RPN)首先在faster rcnn中提出。
得到用来预测的feature map:图片在输入网络后,依次经过一系列卷积+ReLU得到的51×39×256维feature map,准备后续用来选取proposal。
生成Anchors:anchor是固定尺寸的bbox。具体作法是:把feature map每个点映射回原图的感受野的中心点当成一个基准点,然后围绕这个基准点选取k个不同的尺寸和比例的anchor。对于W×H大小的卷积feature map(通常为2400),总共有W×H×k个锚点。默认使用3个尺度和3个纵横比,在每个滑动位置上产生k=9个anchor。在feature map上的每个特征点预测多个region proposals。虽然anchors是基于卷积特征图定义的,但最终的 anchors是相对于原始图片的。
在RPN头部 ,通过以下结构生成 k个anchor。
针对每个 anchor,都有两个不同的输出:
一个是坐标(x,y,w,h)回归(regression)层reg layer,每个 anchor 输出 4 个预测值:Δxcenter,Δycenter,Δwidth,Δheight,即用于anchors来得到最终的proposals。
一个目标和背景的二分类(classification)层cls layer。每个anchor输出两个预测值:anchor是背景的score和anchor是目标的score。
关于正负样本的划分:
考察训练集中的每张图像(含有人工标定的gt box) 的所有anchor:
(1)对每个标定的gt box区域,与其重叠比例最大的anchor记为正样本,保证每个gt至少对应一个正样本anchor
(2)对(1)中剩余的anchor,如果其与某个标定区域重叠比例大于0.7,记为正样本(每个gt可能会对应多个正样本anchor。但每个正样本anchor只可能对应一个gt;如果其与任意一个标定的重叠比例都小于0.3,记为负样本。
x,y,w,h分别表示box的中心坐标和宽高,x,xa,x*分别表示predicted box, anchor box, and ground truth box (y,w,h同理)ti表示predict box相对于anchor box的偏移,ti*表示ground true box相对于anchor box的偏移,学习目标就是让前者接近后者的值。
在 RPN中部,分类分支(cls)和边框回归分支(bbox reg)分别对这堆anchor进行各种计算。在RPN末端,通过对两个分支的结果进行汇总,来实现对anchor的初步筛除(先剔除越界的anchor,再根据cls结果通过非极大值抑制(NMS)算法去重)和初步偏移(根据bbox reg结果),此时输出的都bbox改头换面叫 Proposal 了
非极大值抑制(Non-maximum suppression):
由于anchor一般是有重叠的overlap,因此,相同object的proposals也存在重叠。为了解决重叠proposal问题,采用NMS算法处理:两个proposal间IoU大于预设阈值,则丢弃score较低的proposal。
IoU阈值的预设需要谨慎处理,如果IoU值太小,可能丢失objects的一些 proposals;如果IoU值过大,可能会导致objects出现很多proposals。IoU典型值为0.6。
Proposal选择:
NMS处理后,根据sore对top N个proposals排序。在Faster R-CNN论文中 N=2000,其值也可以小一点,如50,仍然能的高好的结果。