深度学习实战(十八)——faster rcnn中anchor的生成过程理解

          

        首先,根据给定的base_size,生成一个所谓的base_anchor,其值为[0,0,base_size-1,base_szie-1]。例如当base_size=16的时候就生成一个坐标为[0,0,15,15]的矩形。

        第二步根据上面的上面得到base_anchor进行坐标变换,计算出中心点xc,yc和矩形的高和宽w,h.即将我们说xmin,ymin,xmax,ymax形式的坐标转化为w,h,xc,yc的坐标形式。用我们的例子就是从[0,0,15,15]变成了[16,16,7.5,7.5]。再依据w和h计算矩形的面积,这里记为base_anchor的size。将size除以不同的ratio得到一个数组,称之为size_ratios。此时size=256, size_ratios=[512,256,128]。接下来将每一个size_ratio开平方得到的值记为ws,而将ws*ratio的值记为hs,而每一对(ws,hs)和(xc,yc)则可以重新变换坐标生成一个anchor,三个size_ratio对应三对(ws,hs),即可以变换为三个anchor.将之堆叠在一起称为ratio_anchors. size_ratios=[512,256,128],对应的ws=[22,16,11],hs=[12,16,22]。则ratio_anchors=[[ -3.5   2.   18.5  13. ]  ,[ 0.    0.   15.   15. ],[ 2.5   -3.   12.5  18. ]]

坐标转化的方法如下图,非常简单   
                                                  

                                                                 [xmin,ymin,ymax,ymax]-->[ws,hs,xc,yc]     

                                        

                                                       [ws,hs,xc,yc]->[xmin,ymin,ymax,ymax]à->ratio_anchors

                                                

                                                                           ratio_anchors坐标轴上表示

第三步将上一步得到ratio_anchors的每一个anchor的w和h 乘上scales得到新的(ws,hs).如果scales=[8,16,32]三个scale,那么我们就可以得到3*3=9对(ws,hs),从而通过坐标变换得到9个anchors,这里是在(0,0)点处生成anchor,再进行滑动就可以得到所有的propsal区域

           9个anchor 的坐标及对应的ws,hs

                                     

     Anchor 的坐标绘制

       根据上文,我的理解是在某一层上先生成这一层对应大小的anchors即ratio_anchors,乘上scales得到的anchors应该是指对应于不同尺度上的大小,相当于将这个anchor分别放大了8,16,32 倍来对应原图上不同尺度的物体,再和gt进行匹配。但之所以实验出错,推测还是在匹配上处理的有问题。

转自:

faster rcnn中anchor的生成过程理解

发布了150 篇原创文章 · 获赞 200 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/qq_37764129/article/details/102093108