faster rcnn中anchor的生成過程理解

繩繩兮不可名發表於2018-07-27

首先,根據給定的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進行匹配。但之所以實驗出錯,推測還是在匹配上處理的有問題。

相關文章