论文下载:
https://arxiv.org/pdf/1506.01497.pdf
论文代码:
https://github.com/rbgirshick/py-faster-rcnn
论文摘要:
目前最先进的目标检测网络依赖于区域建议算法(region proposal algorithms)假设目标位置。该论文研究中,引入一种区域建议网络(RPN),RPN与检测网络共享图像的卷积特征。并且RPN是一个全卷积网络,同时预测每个位置的目标框(objects bounds)和目标分数(objects scores)。RPN经过端到端的训练,快速生成高质量的区域建议(region proposals),输入到Fast-RCNN中进行目标检测。论文把RPN与融合成一个网络,共享卷积特性,即“注意力”。
不同的多尺度和多种大小的方案:
(a)图像在多个尺度上调整大小,并对每个尺度计算特征映射或深度卷积特征,避免使用枚举图像/多尺度/多种长宽比的卷积核。这种模型使用单一尺度的图像表现良好,运行速度快。
(b)使用不同尺寸的卷积核分别训练不同长宽比的模型,称为“过滤器金字塔”,即多尺度滑动窗口。
(c)特征图上遍布几种不同大小(呈金字塔趋势)的参考框(锚框),处理成预测框。
论文应用方案(c)
Same Conv layer和Pooling:
所有的conv层都是:kernel_size=3,pad=1,stride=1;特征经过conv大小不变
所有的pooling层都是:kernel_size=2,pad=0,stride=2;特征经过Pooling大小变为原来的四分一
Region Proposal Networks(RPN):
经过上面的same conv layer和pooling得到的特征图(feature maps),为每一个点(可以理解为像素)匹配上9(默认k=9)种anchor,作为需要训练纠正的检测框,后期通过bounding box regression(预测框回归)进行修正。
上图是一组该目标中心的anchor,类似这样的一组anchor还有很多组。每个anchor都有对应的坐标数值。
预测框的回归:
x、xa、x*分别为预测框(predicted box)、锚框(anchor box)、真实框(ground-truth box)的横坐标,其他符号也是一样。
关于二分类的损失函数:
训练RPN时,为每一个anchor分配一个二进制标签(0或1),代表有无对象。简单来说,在特征图上分布着很多anchor的情况下,RPN通过全卷积网络去判断那些anchor有目标(positive anchor),那些没有目标(negative anchor),即RPN是一个二分类网络。
Faster-Rcnn结构:
为了让RPN与Fast RCNN共享图像特征,作者讨论交替优化的方法学习有这两个网络融合的算法
①RPN网络由imagenet预训练进行初始化,并为区域建议任务进行端到端微调
②使用①中RPN生成的建议,通过Fast R-CNN训练一个独立的检测网络
③使用检测器网络初始化RPN训练,只微调RPN独有的层
④保持共享的卷积层固定,微调Fast R-CNN的独特层
简单来说分别进行两层微调至最高精度。
实验结果:
在PASCAL上使用RPN建议的检测示例,VOC 2007测试:
使用ZF网得知的每个锚点的平均提案规模(s = 600):
PASCAL VOC 2007测试集的检测结果(用VOC 2007 trainval训练):
PASCAL VOC 2007测试集的检测结果:
总结:
认识到了RPN网络,也明白了anchor是怎样诞生的,同时也进一步了解two stage的算法过程,即简单的二分类+复杂的多分类。
参考博客:
https://blog.csdn.net/jucilan3330/article/details/84255249
https://zhuanlan.zhihu.com/p/31426458