faster rcnn中rpn的anchor

作者:马塔
链接:https://www.zhihu.com/question/42205480/answer/155759667
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

首先我们需要知道anchor的本质是什么,本质是SPP(spatial pyramid pooling)思想的逆向。而SPP本身是做什么的呢,就是将不同尺寸的输入resize成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同尺寸的输入。

接下来是anchor的窗口尺寸,这个不难理解,三个面积尺寸(128^2,256^2,512^2),然后在每个面积尺寸下,取三种不同的长宽比例(1:1,1:2,2:1).这样一来,我们得到了一共9种面积尺寸各异的anchor。示意图如下:

faster rcnn中rpn的anchor_第1张图片 faster rcnn中rpn的anchor_第2张图片

至于这个anchor到底是怎么用的,这个是理解整个问题的关键。

下面是整个faster RCNN结构的示意图:

faster rcnn中rpn的anchor_第3张图片 faster rcnn中rpn的anchor_第4张图片

利用anchor是从第二列这个位置开始进行处理,这个时候,原始图片已经经过一系列卷积层和池化层以及relu,得到了这里的 feature:51x39x256(256是层数)

在这个特征参数的基础上,通过一个3x3的滑动窗口,在这个51x39的区域上进行滑动,stride=1,padding=2,这样一来,滑动得到的就是51x39个3x3的窗口。

对于每个3x3的窗口,作者就计算这个滑动窗口的中心点所对应的原始图片的中心点。然后作者假定,这个3x3窗口,是从原始图片上通过SPP池化得到的,而这个池化的区域的面积以及比例,就是一个个的anchor。换句话说,对于每个3x3窗口,作者假定它来自9种不同原始区域的池化,但是这些池化在原始图片中的中心点,都完全一样。这个中心点,就是刚才提到的,3x3窗口中心点所对应的原始图片中的中心点。如此一来,在每个窗口位置,我们都可以根据9个不同长宽比例、不同面积的anchor,逆向推导出它所对应的原始图片中的一个区域,这个区域的尺寸以及坐标,都是已知的。而这个区域,就是我们想要的 proposal。所以我们通过滑动窗口和anchor,成功得到了 51x39x9 个原始图片的proposal。接下来,每个proposal我们只输出6个参数:每个 proposal 和 ground truth 进行比较得到的前景概率和背景概率(2个参数)(对应图上的 cls_score);由于每个 proposal 和 ground truth 位置及尺寸上的差异,从 proposal 通过平移放缩得到 ground truth 需要的4个平移放缩参数(对应图上的 bbox_pred)。

所以根据我们刚才的计算,我们一共得到了多少个anchor box呢?

51 x 39 x 9 = 17900

约等于 20 k

bingo!

以上是自己最近几天看 faster RCNN的理解,如果有不对的地方,希望大神能够指正,免得误导更多小白,嘿嘿。




有一个问题不太明白,以一个点9种尺寸来取proposal,重复区域多。而且feature map相邻两个点对应原图的9个proposal也是很多重复区域的感觉。


马塔
其实这个答案所回答的问题只是整个faster RCNN中的第一步,只是对候选区域进行提取(RPN, region proposal networks, 候选区域生成网络)。这个过程只是希望能够得到覆盖目标的候选区域,所以有不同尺寸不同比例的proposal(这样才有最大可能可以在一个候选框中包括完整的目标)。而在这之后,确实会有很多重复区域,而这其实是候选区域生成之后的下一个问题。针对这个问题,一般会采用非极大值抑制算法进行去重(NMS, non maximum suppression),有兴趣你可以对这个进行进一步的了解。
anchor就只feature map上一个点,经过五层卷积之后,feature map 的大小时原图的1/16,也就是说,原图1000*600,经过卷积后得到的就是60*40的feature map,每个anchor上预测9个框,也就是我们得到60*40*9个propasal。选取不同尺度是因为目标的大小不同,选取不同的aspect是因为物体的形状各异,为了更好的适应各个形状










你可能感兴趣的:(faster rcnn中rpn的anchor)