anchorbox理解

关于Faster-Rcnn中的AnchorBox的一些理解

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

首先,faster-rcnn在计算anchorbox之前大概是下面这几步:

anchorbox理解_第1张图片

为了更方便理解,我列出了实际情况中一个图片的输入对应的过程中的各个输出结果的size,而实际情况中,输入的size是不确定的,resize之后的大小也不确定,这里只是为了方便理解和说明。可以看到,anchorbox实际上是基于feature map的,而anchorbox的数量为:75 x 100 x 9 = 67500,这里的9就是论文中的k,后面会说道,也就是说,anchorbox的数量是依赖与featuremap的,featuremap上的每个点,都对应着k个anchorbox。

关于anchorbox的生成

其实上面提到的k并不难理解,论文里说明,anchorbox有base的size,之后根据面积缩放因子(scales)和长宽比(aspect ratios)来得到k个不同大小的框。我不理解的是,这个base size是从哪来的?该不会是拍脑袋想出来的吧?论文里貌似也没怎么解释这个数字是怎么得到的。后来想了想,可能也是经过计算的,这个数值配上缩放之类的操作,大部分图片上的区域也就出来了。

其实featuremap对于anchorbox的生成的贡献就是提供了一个中心点而已,featuremap每个位置上的点,就对应一个anchorbox的中心,然后呢,我知道了这么多中心点,根据base size,scales,aspect ratios就可以算出来一个矩形的长和宽。矩形的中心点就是featuremap上的那个点对应原图上的点。

那么问题来了,这个矩形的长和宽的计算很好理解,但是怎么得到featuremap的点对应原图(这里原图指的是resize之后的图,后面也都这么说,因为是resize之后的图参与计算,得到的location信息是图上的相对比例的坐标,所以不用真正的原图也没关系)上是哪个点呢?之前我一直想不明白,以为有什么高端的算法,直到我看到代码以后,发现是我傻逼了。通过上面的图可以看到,原图过了网络之后,大概缩放比例就是8倍,源码里,有一个stride参数,也就是把featuremap的坐标平移一下(乘8)就得到相对于原图的坐标了。

所以anchorbox的值跟featuremap的值其实并没有什么卵关系,只和featuremap的size相关,这就比较好理解了吧。我们得到了anchorbox,它的值是一系在原图中的中心点和长宽值组成的矩形,接下来的操作就是根据anchorbox的位置和大小把featuremap切出对应区域然后做roipooling,回归等等……

你可能感兴趣的:(深度学习)