正文
CTPN中anchors代码
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
import numpy as np
def generate_basic_anchors(sizes, base_size=16):
#base_anchor([0,0,15,15])
base_anchor = np.array([0, 0, base_size - 1, base_size - 1], np.int32)
anchors = np.zeros((len(sizes), 4), np.int32)
index = 0
for h, w in sizes:
anchors[index] = scale_anchor(base_anchor, h, w)
index += 1
return anchors
def scale_anchor(anchor, h, w):
#anchor为[0,0,15,15]
x_ctr = (anchor[0] + anchor[2]) * 0.5
y_ctr = (anchor[1] + anchor[3]) * 0.5
scaled_anchor = anchor.copy()
scaled_anchor[0] = x_ctr - w / 2 # xmin
scaled_anchor[2] = x_ctr + w / 2 # xmax
scaled_anchor[1] = y_ctr - h / 2 # ymin
scaled_anchor[3] = y_ctr + h / 2 # ymax
return scaled_anchor
def generate_anchors():
heights = [11, 16, 23, 33, 48, 68, 97, 139, 198, 283]
widths = [16]
sizes = []
for h in heights:
for w in widths:
sizes.append((h, w))
return generate_basic_anchors(sizes)
if __name__ == '__main__':
import time
t = time.time()
a = generate_anchors()
print(a)
a:
[[ 0 2 15 13]
[ 0 0 15 15]
[ 0 -4 15 19]
[ 0 -9 15 24]
[ 0 -16 15 31]
[ 0 -26 15 41]
[ 0 -41 15 56]
[ 0 -62 15 77]
[ 0 -91 15 106]
[ 0 -134 15 149]] shift_x = np.arange(0, 2) * 16#本来应该是特征图的宽高,为了方便演示,设置为2,3
shift_y = np.arange(0, 3) * 16
print("shift_x:", shift_x)
print("shift_y:",shift_y)
shift_x: [ 0 16]
shift_y: [ 0 16 32]
shift_x, shift_y = np.meshgrid(shift_x, shift_y) # in W H order
shift_x1:
[[ 0 16]
[ 0 16]
[ 0 16]]
shift_y1:
[[ 0 0]
[16 16]
[32 32]]
shifts = np.vstack((shift_x.ravel(), shift_y.ravel(),
shift_x.ravel(), shift_y.ravel())).transpose() # 生成feature-map和真实image上anchor之间的偏移量
print("shifts:",shifts)
shifts:
[[ 0 0 0 0]
[16 0 16 0]
[ 0 16 0 16]
[16 16 16 16]
[ 0 32 0 32]
[16 32 16 32]]
A = a.shape[0] # 10个anchor
K = shifts.shape[0] # 50*38,feature-map的宽乘高的大小
all_anchors = (a.reshape((1, A, 4)) +
shifts.reshape((1, K, 4)).transpose((1, 0, 2))) # 相当于复制宽高的维度,然后相加shape(1938,10,4)
all_anchors = all_anchors.reshape((K * A, 4)) # shape(19380,4)
all_anchors:(特征图上每个点产生10个框,与原图的偏移相加即原图行列每隔16个点产生10个坐标) [[ 0 2 15 13]
[ 0 0 15 15]
[ 0 -4 15 19]
[ 0 -9 15 24]
[ 0 -16 15 31]
[ 0 -26 15 41]
[ 0 -41 15 56]
[ 0 -62 15 77]
[ 0 -91 15 106]
[ 0 -134 15 149]
[ 16 2 31 13]
[ 16 0 31 15]
[ 16 -4 31 19]
[ 16 -9 31 24]
[ 16 -16 31 31]
[ 16 -26 31 41]
[ 16 -41 31 56]
[ 16 -62 31 77]
[ 16 -91 31 106]
[ 16 -134 31 149]
[ 0 18 15 29]
[ 0 16 15 31]
[ 0 12 15 35]
[ 0 7 15 40]
[ 0 0 15 47]
[ 0 -10 15 57]
[ 0 -25 15 72]
[ 0 -46 15 93]
[ 0 -75 15 122]
[ 0 -118 15 165]
[ 16 18 31 29]
[ 16 16 31 31]
[ 16 12 31 35]
[ 16 7 31 40]
[ 16 0 31 47]
[ 16 -10 31 57]
[ 16 -25 31 72]
[ 16 -46 31 93]
[ 16 -75 31 122]
[ 16 -118 31 165]
[ 0 34 15 45]
[ 0 32 15 47]
[ 0 28 15 51]
[ 0 23 15 56]
[ 0 16 15 63]
[ 0 6 15 73]
[ 0 -9 15 88]
[ 0 -30 15 109]
[ 0 -59 15 138]
[ 0 -102 15 181]
[ 16 34 31 45]
[ 16 32 31 47]
[ 16 28 31 51]
[ 16 23 31 56]
[ 16 16 31 63]
[ 16 6 31 73]
[ 16 -9 31 88]
[ 16 -30 31 109]
[ 16 -59 31 138]
[ 16 -102 31 181]]