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