目标检测 之 Faster R-CNN

Faster R-CNN可以简单地看做“ 区域生成网络(RPN)+Fast RCNN “的系统,用区域生成网络代替Fast R-CNN中的Selective Search方法。
 
整体架构:
                           
                                                                                               图1
Faster R-CNN由四个部分组成:
1)卷积层(conv layers),用于提取图片的特征,输入为整张图片,输出为提取出的特征称为feature maps
2)RPN网络(Region Proposal Network),用于推荐候选区域,这个网络是用来代替之前的search selective的。输入为图片(因为这里RPN网络和Fast R-CNN共用同一个CNN,所以这里输入也可以认为是featrue maps),输出为多个候选区域,这里的细节会在后面详细介绍。
3)RoI pooling,和Fast R-CNN一样,将不同大小的输入转换为固定长度的输出,输入输出和Faste R-CNN中RoI pooling一样。
4)分类和回归,这一层的输出是最终目的,输出候选区域所属的类,和候选区域在图像中的精确位置。
 
细节图:
                                                                                               图2
可以清晰的看到该网络对于一副任意大小PxQ的图像,首先缩放至固定大小MxN,然后将MxN图像送入网络;
而Conv layers中包含了13个conv层+13个relu层+4个pooling层;
RPN网络首先经过3x3卷积,再分别生成positive anchors和对应bounding box regression偏移量,然后计算出proposals;
而Roi Pooling层则利用proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作classification(即分类proposal到底是什么object)。
 
RPN层:
RPN第一次出现在世人眼中是在Faster RCNN这个结构中, 该层专门用来推荐候选区域的,RPN可以理解为一种全卷积网络,该网络可以进行end-to-end的训练,最终目的是为了推荐候选区域
Faster RCNN = RPN + Fast RCNN
 
                                                                                             图3
注意该结构图的数字标号
                                                                                    RPN内部结构图4
RPN网络为CNN后面接一个3x 3 的卷积层,再接两个1x 1的卷积层(原文称这两个卷积层的关系为sibling(并列)),其中一个是用来给softmax层进行分类,另一个用于给候选区域精确定位。
 

RPN的运作机制

                                                                                                    图5
上图展示了RPN的整个过程,一个特征图经过sliding window处理,得到256维特征,然后通过两次全连接得到结果2k个分数和4k个坐标;
相关的问题:
  1. RPN的input 特征图指的是哪个特征图?
  2. 为什么是用sliding window?文中不是说用CNN么?
  3. 256维特征向量如何获得的?
  4. 2k和4k中的k指的是什么?
  5. 图右侧不同形状的矩形和Anchors又是如何得到的?
 
第一个问题,RPN的输入特征图就是图3中Faster RCNN的公共Feature Map,也称共享Feature Map,主要用以RPN和RoI Pooling共享;
 
第二个问题,我们可以把3x3的sliding window看作是对特征图做了一次3x3的卷积操作,最后得到了一个channel数目是256的特征图,尺寸和公共特征图相同,我们假设是256 x (H x W)
 
第三个问题,我们可以近似的把这个特征图看作有H x W个向量,每个向量是256维,那么图中的256维指的就是其中一个向量,然后我们要对每个特征向量做两次全连接操作,一个得到2个分数,一个得到4个坐标,由于我们要对每个向量做同样的全连接操作,等同于对整个特征图做两次1 x 1的卷积,得到一个2 x H x W和一个4 x H x W大小的特征图,换句话说,有H x W个结果,每个结果包含2个分数和4个坐标;
                                                                                                    图6
为何是2个分数?因为RPN是提候选框,还不用判断类别,所以只要求区分是不是物体就行,那么就有两个分数,前景(物体)的分数,和背景的分数;
 
注意:4个坐标是指针对 原图坐标 的偏移,首先一定要记住是原图;
 
疑问,原图哪里来的坐标呢?
首先我们知道有H x W个结果,我们随机取一点,它跟原图肯定是有个一一映射关系的,由于原图和特征图大小不同,所以特征图上的一个点对应原图肯定是一个框,然而这个框很小,比如说8 x 8,这里8是指原图和特征图的比例,所以这个并不是我们想要的框,那我们不妨把框的左上角或者框的中心作为锚点(Anchor),然后想象出一堆框,具体多少,聪明的读者肯定已经猜到,K个,这也就是图中所说的K anchor boxes(由锚点产生的K个框);换句话说,H x W个点,每个点对应原图有K个框,那么就有H x W x k个框默默的在原图上,那RPN的结果其实就是判断这些框是不是物体以及他们的偏移;那么K个框到底有多大,长宽比是多少?这里是预先设定好的,共有9种组合,所以k等于9,最后我们的结果是针对这9种组合的,所以有H x W x 9个结果,也就是18个分数和36个坐标;
                                                                                                          图7
 

RPN的整个流程回顾

最后我们再把RPN整个流程走一遍,首先通过一系列卷积得到公共特征图,假设他的大小是N x 16 x 16,然后我们进入RPN阶段,首先经过一个3 x 3的卷积,得到一个256 x 16 x 16的特征图,也可以看作16 x 16个256维特征向量,然后经过两次1 x 1的卷积,分别得到一个18 x 16 x 16的特征图,和一个36 x 16 x 16的特征图,也就是16 x 16 x 9个结果,每个结果包含2个分数和4个坐标,再结合预先定义的Anchors,经过后处理,就得到候选框;整个流程如图8:
                                                                                                      图8
 
 
 
发布了34 篇原创文章 · 获赞 3 · 访问量 739

猜你喜欢

转载自blog.csdn.net/qq_41168327/article/details/104947011