为自己普及一下生成anchor的函数实现原理,方便看懂原理,追随源码(generate_anchors.py):
def generate_anchors(base_size=16, ratios=[0.5, 1, 2],
scales=2**np.arange(3, 6)):
base_anchor = np.array([1, 1, base_size, base_size]) - 1
ratio_anchors = _ratio_enum(base_anchor, ratios)
anchors = np.vstack([_scale_enum(ratio_anchors[i, :], scales)
for i in xrange(ratio_anchors.shape[0])])
return anchors
这个函数就是生成九个anchors的函数,首先有一个base_anchor坐标为[0,0,15,15],因为电脑是从0开始计数的,其实是[1,1,16,16],先调用_ratio_enum
def _ratio_enum(anchor, ratios):
w, h, x_ctr, y_ctr = _whctrs(anchor)
size = w * h
size_ratios = size / ratios
ws = np.round(np.sqrt(size_ratios))
hs = np.round(ws * ratios)
anchors = _mkanchors(ws, hs, x_ctr, y_ctr)
return anchors
在这个函数里先调用了_whctrs,作用是得到anchor 的四个参数,宽度w