读论文系列:Object Detection NIPS2015 Faster RCNN (2)

但这就意味着loss中的mini-batch size是以3x3的slide window为单位的,因为只有slide window和anchor的个数才有这种1:9的关系,而挑选训练样本讲的mini-batch size却是以anchor为单位的,所以我猜实际操作是这样的:

先选256个anchor,

然后找它们对应的256个slide window,

然后再算这256个slide window对应的256×9个anchor的loss,每个slide window对应一个256特征,有一个Lcls,同时对应9个anchor,有9个Lreg

论文这里讲得超级混乱:

minibatch anchor

Proposal layer

其实这也可以算是RPN的一部分,不过这部分不需要训练,所以单独拉出来讲

接下来我们会进入一个proposal layer,根据前面得到的这些信息,挑选region给后面的fast rcnn训练

图片输入RPN后,我们手头的信息:anchor,anchor score,anchor location to fix

用全连接层的位置修正结果修正anchor位置

将修正后的anchor按照前景概率从高到底排序,取前6000个

边缘的anchor可能超出原图的范围,将严重超出边缘的anchor过滤掉

Anchor Filter

对anchor做非极大抑制,跟RCNN一样的操作

再次将剩下的anchor按照anchor score从高到低排序(仍然可能有背景anchor的),取前300个作为proposals输出,如果不足300个就…也没啥关系,比如只有100个就100个来用,其实不足300个的情况很少的,你想Selective Search都有2000个。

Fast RCNN

接下来就是按照Fast RCNN的模式来训练了,我们可以为每张图前向传播从proposal_layer出来得到300个proposals,然后

取一张图的128个proposal作为样本,一张图可以取多次,直到proposal用完

读论文系列:Object Detection NIPS2015 Faster RCNN

喂给Fast RCNN做分类和bounding box回归,这里跟RPN很像,但又有所不同,

BB regressor:拟合proposal和bounding box,而非拟合anchor和bounding box

Classifier:Object多分类,而非前景背景二分类

迭代训练

RPN和Fast RCNN其实是很像的,因此可以一定程度上共享初始权重,实际训练顺序如下(MATLAB版):

先用ImageNet pretrain ZF或VGG

训练RPN

用RPN得到的proposal去训练Fast RCNN

用Fast RCNN训练得到的网络去初始化RPN

冻结RPN与Fast RCNN共享的卷积层,Fine tune RPN

冻结RPN与Fast RCNN共享的卷积层,Fine tune Fast RCNN

论文中还简单讲了一下另外两种方法:

将整个网络合起来一块训练,而不分步,但由于一开始训练时RPN还不稳定,所以训练Fast RCNN用的proposal是固定的anchor,最后效果差不多,训练速度也快。

Approximate joint training

整个网络合起来一起训练,不分步,训练Fast RCNN用的proposals是RPN修正后的anchor,但这种动态的proposal数量不好处理,用的是一种RoI warping layer来解决,这又是另一篇论文的东西了。

SUMMARY

网络结构和训练过程都介绍完了,实验效果也是依样画葫芦,就不再介绍了,整体来说,Faster RCNN这篇论文写得很乱,很多重要的细节都要去看代码才能知道是怎么回事,得亏是效果好才能中NIPS。。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzdsg.html