卷积神经网络——Faster Rcnn中的anchor和Proposal

刚开始看到anchor和Proposal的时候有一些细节搞不清楚,在这里记录一下。
anchor是Proposal的基础,现有anchor以后,从 anchor中根据条件选择出来的就可以作为Proposal了。Proposal后面再经过RoIPooling就可以做分类和回归了。

拷贝的图片,侵删
拷贝的图片,侵删
下面先介绍一下anchor的生成过程。

anchor

概念

anchor(锚):个人理解是基于一个中心点创建出的几种大小和长宽比的框,这个中心点怎么确定呢?是根据Feature Map中每一个点在输入图片中对应的点。

anchor的创建是在Faster R-CNN的哪个阶段呢?是在backbone的输入传入RPN后首先生成anchor,然后将anchor分别给两个分支去处理,一个分支使用softmax进行二分类,判断该anchor的框内有没有物体,有则为positive,没有则为negative;另一个分支进行边框回归,使anchor的边框更接近ground truth的框,因为默认生成的anchor框与实际框还是有偏差的。最终根据两个输出加原始图片信息生成Proposal。
在这里插入图片描述

anchor的生成过程

anchor的生成就是在上图中的红色框中完成。

anchor生成主要分为一下几步:
第一步:使用一个kernel_size为3x3,stride=1,padding=2的卷积核,使用该卷积核遍历backbone输出的Feature Map;
第二步:然后取3x3的滑动窗口的中心点对应的输入图像的点作为锚点;
第三步:以图像中的锚点作为中心取3种面积{128128, 256256, 512*512}和3种长宽比{1:1, 1:2, 2:1}的anchor。也就是说每一个点对应9个anchor。

那么第二步中特征图中滑动窗口的点怎么映射回输入图像呢?
这就涉及到另一个概念:感受野。这块还是单独写一个文章介绍吧,又欠账了。

Proposal的生成过程

当anchor生成以后就要生成最终的Proposal了。首先对anchor有两部分的操作:分类和边框回归。
分类是上图中上面的分支,通过softmax进行二分类,将anchor分为前景和背景,分别对应positive和negative。
边框回归获取anchor针对ground true的偏移。得到这两个信息后开始选取符合条件的anchor作为Proposal。

主要分为以下几步:
第一步:先将前景的anchor按照softmax得到的score进行排序,然后取前N个positive anchor;
第二步:利用im_info中保存的信息,将选出的anchor由MxN的尺度还原回PxQ的尺度,刨除超出边界的anchor,M N P Q参考最上面的图;
第三步:执行NMS(nonmaximum suppression,非极大值抑制);
第四步:将NMS的结果再次按照softmax的score进行排序,取N个anchor作为最终的Proposal;

至此Proposal的生成就结束了,需要注意的是最后的Proposal是这对赢MxN的尺度。

猜你喜欢

转载自blog.csdn.net/itlilyer/article/details/109728975