RPN疑点解析

RPN疑点解析

今天算是整明白了RPN到底是怎么搞的。写个日记纪念一下:

首先得说清楚这样一个问题:RPN提取框是在原图上干的。


Faster RCNN = RPN + Fast RCNN

RPN的input 特征图指的是哪个特征图?

首先回答第一个问题,RPN的输入特征图就是图1中Faster RCNN的公共Feature Map,也称共享Feature Map,主要用以RPN和RoI Pooling共享;

看到这里我发现,这个feature map别看长得很歪瓜裂枣,但是却干了2件惊天动地的事情:

RPN,RoI Pooling

具体是咋做的呢?


哎,这feature map怎么还sliding window了???

哦哦,原来是得到了256维的特征,我们可以把3x3的sliding window看作是对特征图做了一次3x3的卷积操作,最后得到了一个channel数目是256的特征图,尺寸和公共特征图相同,我们假设是256 x (H x W)。记住这个H和这个W,他们可是feature map的维度哦。

对于第三个问题,我们可以近似的把这个特征图看作有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个坐标;

那这一段话怎么理解呢?

就是特征图有H*W个点嘛,每个看成一个256长度的向量。经过2发全连接,一个变成2k,一个变成4k。如图所示:


那个2是什么?

答:前景(物体)的分数,背景的分数。

那个4是什么?

答: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个坐标;


好了,最后过一遍整个的流程:

首先通过一系列卷积得到公共特征图,假设他的大小是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,经过后处理,就得到候选框;整个流程如图5:

最后纪念一下刚买的至尊宝:

参考大佬:

发布于 2020-05-02 05:21