Object Detection-Faster Rcnn

   网上一些基本的介绍有一大堆,我这里主要总结下一些专门的点。首先上图:

上图就是整个算法的流程图,faster rcnn是 two stage的,所以有上下两个大的部分。

需要注意的几个点是:

   1. faster rcnn的anchor是在一个feature map上移动生成的,多尺度是直接人为定了三个尺度(16*8,16*16,16*32),形状是人为           规定了三个长宽比(1:1,1:2,2:1)但是仍旧是只用了这一个feature map做后面的任务,这是faster rcnn的一个缺点,没有冲         分利用多深度feature map,另外,faster rcnn的acnhor是原始坐标,并没有经过归一化处理,这是与SSD不同的一个地方.

   2. 在训练RPN的时候,回归部分是用的所有正样本去训练,训练分类部分是选取了anchor中的300个进行训练

   3. 在训练RPN网络的分类部分中,负样本数目过多,为了平衡正负样本比例,这里采取的的手段是随机抽取负样本中的一些进         行训练(其实正样本过多的话也有随机抽取的机制,但一般不会发生这样情况) ,并没有OHNM手段。

   4. 搞清楚RPN回归网络输出(网络的输出也就是要回归的目标)的意义,并不直接是坐标,而是按照下面这几个公式的变化             值:

          targets_dx = (gt_ctr_x - ex_ctr_x) / ex_widths
          targets_dy = (gt_ctr_y - ex_ctr_y) / ex_heights
          targets_dw = torch.log(gt_widths / ex_widths)
          targets_dh = torch.log(gt_heights / ex_heights)

    上面的几个式子中等号右边是RPN网络的输出,gt_...是ground_truth,ex_...是anchors,顺便说一下,anchor和ground truth都      是以左上角和右下角坐标的形式给出来的,但是回归用的是中心点和长宽,毕竟,预测框和真正的框中心重合比左上角重合重      要。 看了上式,也大致能明白为什么要用anchor这种机制,因为直接回归坐标属于瞎**学,网络很难找到真正的学习方向但        是有了anchor就不一样了,anchor很密集,总有一些anchor能比较好的覆盖目标,而就让网络学这些anchor和gt_box的差,        就变得容易的很多,网络能较快收敛。

  5 .由4自然引发的问题,既然RPN网络输出的是一些偏移量和缩放尺度,那么输出给后级的坐标也必须反变换回来才能用,在          经过NMS后,也就得到了最终要输出给后级的“建议框”(有2000个),之所以打引号也是因为这时候网络的输出还不是                框,需要跟对应的anchor进行变换才能得到建议框,具体怎么反变换,根据上面4自己推吧。

  6. 观察上图中stage2的操作,其实和rpn非常的相似,最大的不同点有两个

      (1) stage2中的回归部分输出是84,也就是每个由RPN网络给出的建议框通过该回归部份,都要对21类的预测结果,这里                  相当于为每一个类别都单独做了一个回归器,因为只有正样本才会训练回归网络,因此每个类的物体都只会训练自己                   对应的那一部分回归网络,这也是faster rcnn two stage设计的原因,第一部分是粗划分,第二部分是精回归和预                          测。一个递进关系在里面,缓冲一下让网络更好的学习到位置信息。

        (2)最终输出结果不再有NMS非极大抑制,因为RPN送过来的框已经不会有相互大面积重叠,所以直接根据输出框的类别                  和位置给出最终输出就行了,一样的,网络输出仍需要基于anchor做反变换才能是坐标。

给出上图中指出的两个备注:

备注1:rpn网络输送给后面的RCNN有2000个建议框,而且这些框已经经过了NMS,所以在从中选择128个来训练RCNN网络的时候,仅需根据交叠面积(先为每个ground_truth选择一个最大的,然后,把和任意ground_truth交叠面积大于0.5的都算正样本,小于0.5的都算负样本,这个阈值条件与训练RPN网络的时候不一样,RPN网络是大于0.7才算正样本,0.3到0.7之间的算负样本),原则是先选正样本,把剩下的用负样本补齐。

备注2:与之前的rpn回归不同之处在于,RCNN部分的框回归为每一类都单独做一个回归网络,这也就是回归部分输出是21*4=84的原因,这样的回归更具有针对性,更加精细化,也就是two_stage的意义所在,先粗略再精细,在计算损失的时候,根据每个bbox所属的类别,为每个bbox选择84个中与该类别对应的4个输出,再与制作的回归目标计算损失。

个人理解,难免会出现差错,欢迎各位大手子拍砖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值