动机
选取region proposal的算法在CPU上比较消耗时间。Selective search算法速度大约是一张图片两秒,Edgeboxes算法大约是一张图片0.2秒
贡献
提出region proposal network,能够替代selective search算法和edgeboxes算法,直接在GPU上进行region proposal的选取和过滤,并且几乎不需要太多计算开销
算法
Faster RCNN由两个部分组成,一个是region proposal network,另一个是Fast R-CNN detector
Region proposal network
RPN主要用于ROI的过滤和选择。RPN和Fast R-CNN共享了最前面的多个卷积层(ZF结构是前5层,VGG16结构是前13层),能在一定程度上加速检测并减小计算量和模型大小。使用一个nxn的卷积核对最后一个共享卷积层的输出feature map进行卷积,得到输入图像每个grid的低维度特征(ZF结构是256通道,VGG结构是512通道)。再将低维度特征图分别输入到两个分支的1x1卷积层,一个分支用于每个grid的bbox的回归预测,另一个分支用于每个grid的bbox分类有无目标的预测。
Anchors
在bbox回归和分类的两个分支中,利用先验知识,为每个grid预设了k个anchor box,为每个anchor box预测6个输出值(tx, ty, tw, th, obj_probability, noobj_probability),总共(2 + 4)k个值。根据anchor box的x, y, w, h和转换公式的逆运算,就可以得到预测的真正bbox的x, y, w, h。
本文中为每个grid设置了9个anchor box,每个anchor box有不同的长宽比和像素数,以保证能够检测不同大小的目标。这种方式比特征金字塔和滤波器金字塔的方法要更加高效
损失函数
RPN进行bbox回归和分类的损失函数:
分类使用softmax loss。回归使用smooth L1 loss,对噪声更加鲁棒。回归不直接预测x, y偏移量和w, h伸缩比,如下图:
训练
由于负样本远多于正样本,所以在训练时只对每个训练图片采样256个anchor box,其中的正样本和负样本的比例为1:1。
由于RPN和Fast RCNN共享了前几层卷积层,所以采用了4步交替训练。第一步:训练RPN;第二步:使用第一步训练好的RPN产生的region proposal数据训练Fast RCNN,此时RPN和Fast RCNN没有共享卷积层;第三步:使用训练好的Fast RCNN的卷积层初始化RPN的卷积层,并固定参数不参与后向传播,只训练RPN中不和fast RCNN共享的网络卷积层;第四步:固定Fast RCNN中共享卷积层的参数不参与后向传播,微调Fast RCNN中不和RPN共享的网络卷积层。不断重复第一到四步。
部分实现细节
- 训练时忽略所有超过图片边界的anchor box,不其计算损失
- 在测试时对超过图片边界的anchor box进行clip
- 对RPN预测的所有region proposal的结果进行非极大值抑制,剔除大面积重叠的有目标的region,只留下大约2000个。在2000个中只取目标概率为top-N的N个region作为候选目标区域,用于将该区域对应的特征进行下一步的细分类和bbox位置微调
优缺点
优点
首次提出RPN和anchor box机制,实现了GPU上的region proposal预测,也使得预测bbox更加高效和准确
缺点
速度上还是难以达到实时
反思
- 预测流程梳理:输入RGB图片,首先是在RPN分支进行region proposal的预测。对最后一个共享卷积层的输出feature map进行3x3卷积,然后在回归分支和分类分支分别使用1x1卷积进行anchor box和region proposal的偏移的回归预测以及region proposal有无目标的分类预测。对预测的所有region proposal进行非极大值抑制处理,留下约2000个region,然后选取有目标概率为top-N的N个region proposal。将这些region proposal根据输入图片的长宽等比例地映射到最后一个共享卷积层的输出feature map上,提取ROI,并max poolig到3x3的feature map,再对每个ROI进行全连接卷积变成4096维的特征,再输入分类器和回归器分别进行细分类和位置微调。
- Faster RCNN应该为yolo的诞生提供了思路,感觉yolo就是faster RCNN的紧凑版