錨框:以每個像素點爲中心生成多個大小和寬高比不一樣的邊界框python
圖像 高h , 寬wios
大小爲s∈(0,1] 且 寬高比爲r>0
app
錨框的高 h1 = hs/√rspa
錨框的寬 w1 = ws√rcode
s1,...,sn 與 r1,... ,rm 這樣一張圖的錨框有 whnm 個blog
但對於一點來講,咱們感興趣的框有:(s1,r1),(s1,r2)......(s1,rm),(s2,r1),......(sn,r1)io
假如 w=416 h=416 s=[0.75,0.5,0.25] r=[1,2,,0.5] 在 (200,200 )處生成5個框:class
[44, 44, 356, 356], [96, 96, 304, 304], [148, 148, 252, 252], [0, 90, 416, 310], [90, 0, 310, 416]import
accard係數(Jaccard index)能夠衡量兩個集合的類似度。給定集合A和B,它們的Jaccard係數即兩者交集大小除以兩者並集大小:numpy
import math import numpy as np w = 416 h = 416 s = [0.75, 0.5, 0.25] r = [1, 2, 0.5] def create_box(x, y,imgw, imgh, sizes, ratios): # nn = int(len(sizes) + len(ratios) - 1) size_1 = sizes[0] ratio_1 = ratios[0] ratio_2 = ratios[1:] x = x / imgw y = y / imgh list_1 = [[ x - i * math.sqrt(ratio_1) / 2, y - i / (2 * math.sqrt(ratio_1)), x + i * math.sqrt(ratio_1) / 2, y + i / (2 * math.sqrt(ratio_1)) ] for i in sizes] list_2 = [[ x - size_1 * math.sqrt(i) / 2, y - size_1 / (2 * math.sqrt(i)), x + size_1 * math.sqrt(i) / 2, y + size_1 / (2 * math.sqrt(i)) ] for i in ratio_2] list_1.extend(list_2) list_all = [] for l in list_1: if l[0] < 0: l[0] = 0 else: l[0] = round(l[0] * imgw) if l[1] < 0: l[1] = 0 else: l[1] = round(l[1] * imgh) if l[2] > 1: l[2] = imgw else: l[2] = round(l[2] * imgw) if l[3] > 1: l[3] = imgh else: l[3] = round(l[3] * imgh) list_all.append(l) return list_all if __name__ == '__main__': print(create_box(200, 200, w, h, s, r))