faster rcnn的解读这两篇文章写的很好,很清楚。面试时被问了这个问题,专门记录下来。
- 一文读懂Faster RCNN
- 从编程实现角度学习Faster R-CNN(附极简实现)
回顾fast rcnn样本选取问题
在faster rcnn 中,首先通过selective search 产生了2000个候选框,在进行一个批次训练的时候选择R_sel个框进行训练(文中batch size=128),一个mini-batch中正负样本的比例按照1:3选取,且与groundtruth的IoU>=0.5的为正样本,0.1<IoU<0.5的为负样本。 P.S. 这里设置为0.1的原因是,作者认为与groundtruth有一定交叠的背景更可能是比较困难的负样本,这样选择负样本有助于收敛和提高准确性,但不难发现,这种选取方法忽略了一些重要的及困难的背景区域。
faster rcnn的正负样本选取问题
faster rcnn相比fast rcnn,主要贡献之处在于提出了RPN(区域建议网络,Region Proposal Networks)代替selective search去获得候选框。网络在训练时先训练rpn网络,这时训练好的rpn网络的作用就类似于selective search 提供候选框,然后再训练rcnn网络。(这是一个迭代的过程,具体见[1]) 因此faster rcnn有两次选择正负样本的操作,一次发生在RPN部分,RPN可以产生(提出)大约20,000个框[1],其中大量的框都是无目标的背景,因此要进行选择平衡的正负样本用于训练RPN。在训练了RPN后,我们训练rcnn,先通过RPN产生大约20,000个预测框,通过对前景概率排序,NMS等系列操作(具体见[2]),得到了2000个候选框,与上述的fast rcnn 相同,这2000个候选框也不是全部用于训练,于是出现第二次样本选择。
RPN的正负样本选择
RPN将20000多个候选的anchor选出256个anchor进行分类和回归位置。选择过程如下: 对于每一个ground truth bounding box(gt_bbox),选择和它重叠度(IoU)最高的一个anchor作为正样本。 对于剩下的anchor,从中选择和任意一个gt_bbox重叠度超过0.7的anchor,作为正样本,正样本的数目不超过128个。 随机选择和gt_bbox重叠度小于0.3的anchor作为负样本。负样本和正样本的总数为256。
rcnn的正负样本选择
2000个候选框不是都拿去训练,而是利用选择128个用以训练。选择过程如下: 候选框和gt_bboxes 的IoU大于0.5的,选择一些作为正样本(比如32个)。 选择 RoIs和gt_bboxes的IoU小于等于0(或者0.1)的选择一些(比如 128-32=96个)作为负样本。
补充 OHEM(在线困难样本挖掘,Online Hard Example Mining)
OHEM也是一种对正负样本的采样,OHEM的主要思想认基于这样一个假设:更多地训练困难样本可以提升网络的性能,OHEM认为困难样本即损失较大的样本。 上图以fast rcnn为例说明OHEM的过程,(绿色)对于每一个候选框Ri,只进行前向传播,计算Ri的损失,然后选择损失最大的(比如128)个样本,被认为是困难样本,进行反向传播的训练(红色),最后将学习的参数同步更新到绿色区域的网络。 值得注意的是,fast rcnn中一个mini-batch中正负样本的比例按照1:3选取,而OHEM移除了这个设定。 再值得一提的是,与OHEM相反,在PISA中的作者提出更倾向关注那些与gt目标有最高IOU的样本(更小的loss)。
- 目标检测中的样本不平衡处理方法——OHEM, Focal Loss, GHM, PISA
错误之处,请大家在评论区指正~。: )
|