fast rcnn除了proposal部分,检测部分基本可以实现实时。proposal部分的时间比检测部分慢一个数量级。考虑到检测部分利用了gpu,因此考虑将proposal也利用gpu实现。但是如果单独重新实现proposal,将忽略与下游的检测网络共享计算。本论文提出了一个可以RPN网络(仅需要10ms),与检测网络共享计算,只需要很小的额外开销,即可给出候选框。实验证明,新的检测网络不仅提高了速度(在gpu上5fps),而且精度也提高了。
RPN网络,具有平移不变性,锚框和计算proposal相对锚框的公式都具有此特性(因为在一个feature map上共享3x3的参数,因此不管目标平移到哪里,预测结果都一样)。这个特性也减少了模型尺寸,multibox有(4+1)x 800维全连接输出, 而我们的方法只有(4+2)x 9维卷积输出层。而且预期我们的方法在小数据集上过拟合的风险很小。
Multi-Scale Anchors as Regression References:我们使用了不同的scale和aspect ratio的预测框,来解决多尺度的问题。这种方式比multi images/features/filters更高效。在没有额外的设计的背景下,对于共享特征多尺度锚框的设计是一个重要的组成部分。
对于RPN的训练,我们把这两种类型的锚框设置为正样本:与一个gt box有最大iou的锚框,与任一gt box的iou大于0.7。(因此,有可能一个gt box对应多个锚框)通常第二个条件基本都确定大部分的正样本,但是我们仍然保留第一个条件,防止一些情况下,用第二个条件找不到正样本。对非正样本的锚框进行判断,如果他们与所有gtbox的iou都小于0.3,将其标记为负样本。其他既不是正样本也不是负样本的锚框,不参与训练。
然而,我们获取bbox regression的方式不同于之前的基于roi的方法。之前的方式,bbox regression是在从任意大小的roi池化的特征上获取的,各种大小的区域共享regression参数。在我们的公式中,用于获取regression的特征是在特征图上的相同尺寸(3x3)。考虑到不同的大小,需要学习k个bbox regressor(k个bbox regressor不共享参数)。基于锚框的这种设计,该box regressor仍然能从固定的size/scale的特征上预测不同大小的box。
RPN和fast rcnn之间共享参数:这两个网络如果各自训练,那么将各自以不同的方式改变卷积层。因此我们需要开发一种机制,在两个网络之间共享卷积层,而不是分别训练出两个网络。我们讨论了3种共享特征的训练方法:
- 交替训练:
- 近似联合训练:将两个网络在训练时合成一个网络。在每一次sgd迭代,前向产生proposals,当训练fast rcnn时,将其看成是固定的,提前计算的proposals。反向传播跟之前一样,对于共享的层,传播两个loss(rpn和fast rcnn)。这种方式容易实现,但是它忽略了proposals也是网络的输出,因此叫近视联合训练。这种方式可以产生跟交替训练接近的结果,大约减少了25%~50%的训练时间(跟交替训练比)。
- 非近似联合训练:
最后我们采用了比较实用的4步训练法。第一步,用imagenet的预训练模型初始化rpn网络,并且finetune对region proposal task。第二步,用第一步中产生的proposals训练一个独立的fast rcnn网络。这个网络也用imagenet预训练模型初始化。此时两个网络没有共享卷积层。第三步,使用检测网络初始化rpn网络,固定共享卷积层,只微调跟rpn相关的层。现在两个网络共享了卷积层。最后,保持共享卷积层固定,微调与fast rcnn相关的层。雷士的迭代训练可以多进行几次,效果有微不足道的提升。