Faster R-CNN:通过RPN实现实时目标检测
Faster RCNN 用 RPN 优化了候选框初选的过程,提高了RCNN系列网络的综合性能
首先回顾一下R-CNN和Fast R-CNN
可以看到所谓R-CNN的缺陷,主要体现在RoI上
Fast R-CNN解决了RoI的第一个问题 (同时也搞定了多阶段训练的问题),而Faster R-CNN主要是解决RoI的第二个问题,用RPN来替代耗时巨大的Selective Search
Faster R-CNN分为两个模块,第一个模块是用于产生区域框的深度全卷积网络,第二个模块就是Fast R-CNN目标检测器
RPN网络
如图所示,RPN(Region Proposal Network)的作用就是以feature map作为输入,得到Region Proposal (候选区域)
特征图中的点与原图中的位置的对应关系只与CNN中经过的池化层数量有关,因为在Faster R-CNN中,所有的卷积层均为卷积核为3,步长为1,填充值为1,所有池化层均为窗口大小为2,步长为2,也就是说根据过卷积层长宽变化计算公式 $H = (H – size + 2 * padding) / stride + 1$,过卷积层后原图不会发生大小变化,而经过池化层长宽缩小为原来的一半,如果是四个池化层,则下采样率就是16
然后我们来看看在RPN的内部在做什么
根据原文的图中可以看到,先是用特征图中每个生成k个anchors (文中k=9),然后用anchors和特征去得到4k个偏移量 (reg layer) 和2k个分数 (cls layer)
Anchors
所以问题就来了,什么是Anchors,Anchors有什么用
Anchors的意思是锚,我们知道锚是一种停船所用的工具,给船限定了移动的范围,使得船停的更稳
那么这里的Anchors呢就是对于特征图上的点为中心生成k个固定比例的框,将这些框锚定到这个点上
首先对特征图上的 (0,0) 点,也就是原图中的区域 (0,0,15,15) 生成如下9个Anchors
1 | [[ -84. -40. 99. 55.] |
这里的锚框大小是根据reshape后的图像大小人为设定的,在处理中为了方便处理,会先将图像reshape为 $800 \times 600$ 大小,在处理完之后再reshape回去
得到第一组锚框之后,我们只要在特征图上平移锚点,就能得到原图对应区域的9个锚框
特征图上每个点 (256-d|256张特征图) 负责对原图对应区域的9个锚框进行学习训练
这里和Fast R-CNN中最后一步类似,训练两个分支,cls layer (输出量2k) 得到框内是前景 (物体|正样本) 的概率和是背景 (负样本) 的概率,reg layer负责计算偏移量 (输出量4k | x,y,w,h)
Faster R-CNN总览
总结一下Faster R-CNN (图源自知乎,链接见文末)
RPN部分先进行一次$3\times 3$的卷积结合周围特征点的空间信息,然后进入两个分支
得到正样本对应的框并修正后就传入Fast R-CNN的部分进行后续的内容
所以总的来说,Faster相比于Fast,最为关键的一步,就是用RPN替换了Selective Search,具体做法是在图上布满手工设计的框,对框打分和修正,所以,本质上RPN就是一个bottom-up attention
更多的内容参考我觉得比较好的解读和原文