Mask R-CNN Anchors
- base_size = (4,8,16,32,64)
- ratio = (0.5, 1.0, 2.0)
- anchor_size = (32, 64, 128, 256, 512)
- scales = anchors / base_size 每个base_size 对应一个scales 8.
- 根据给定的base_size,生成一个base_anchor
例: [0,0,base_size-1,base_size-1] = [0,0,15,15]
- 对base_anchor进行坐标变换,由[xmin,ymin,xmax,ymax] 转换成[w,h,xc,yc].
例:[0,0,15,15] 转 [16, 16, 7.5, 7.5]
- 根据w和h计算矩形的面积,记为base_anchor的size.
例:16x16=256
- 将size除以不同的ratio得到一个数组,记为size_ratio.
例: ratio= [0.5,1.0,2.0] size_ratio = [512,256,128]
- 将每一个size_ratio开平方,得到的值记为ws, ws*ratio = hs,每一对(ws,hs,xc,yc) 经过转化为(xmin,ymin,xmax,ymax)格式,对应一个anchor。三个对应三对。
例: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,xmax,ymax) 重新转正换成(w,h,xc,yc) ,乘以scales= 8 ,.
例:[-3.5, 2, 18.5,13] 转化之后为 [23, 12, 7.5, 7.5 ] 乘以scales [ 184, 96, 7.5, 7.5 ]
- 将上一步生成的anchor 转成(xmin, ymin,xmax,ymax)格式.
例:最终16对应的 anchor [[-84., -40., 99., 55.], [-56., -56., 71., 71.], [-36., -80., 51., 95.]]
tensor([[-22., -10., 25., 13.],[-14., -14., 17., 17.], [-10., -22., 13., 25.]]),
tensor([[-40., -20., 47., 27.],[-28., -28., 35., 35.],[-20., -44., 27., 51.]]),
tensor([[-84., -40., 99., 55.], [-56., -56., 71., 71.], [-36., -80., 51., 95.]]),
tensor([[-164., -72., 195., 103.],[-112., -112., 143., 143.],[ -76., -168., 107., 199.]]),
tensor([[-332., -152., 395., 215.],[-224., -224., 287., 287.],[-148., -328., 211., 391.]])