1. yolov2-tiny
- 以输入为
416*416
,20类,5个anchor为例 - 使用的anchor是相对于特征图的,即anchor值是除以32的
- 一幅图的输出是
1*125*13*13
- 125由5个anchor组成,每个anchor中的值是[x,y,w,h,c,p1,p2…p20]
- 所以输出就是
13*13
个第一个anchor的x,13*13
个第一个anchor的y…13*13
个第一个anchor的p20,共25*13*13
个; 13*13
个第2个anchor的x…13*13
个第2个anchor的p20,共50*13*13
个;…13*13
个第5个anchor的p20,共125*13*13
个; - 以下代码的结果是框的左上点和右下点除以输入图像宽高
for i in range(4, 125, 25):
for j in range(13):
for k in range(13):
conf = sigmoid(input0_data[0][i][j][k]) * sigmoid(input0_data[0][i+1][j][k])
if conf > 0.9:
print(conf)
tx=input0_data[0][i-4][j][k]
ty=input0_data[0][i-3][j][k]
tw=input0_data[0][i-2][j][k]
th=input0_data[0][i-1][j][k]
cx=k
cy=j
pw=int(i/25)*2
ph=pw+1
pw=anchors[pw]
ph=anchors[ph]
bx = sigmoid(tx)+cx
bx /= 13
by = sigmoid(ty)+cy
by /= 13
bw = pw*math.exp(tw)
bw /= 13
bh = ph*math.exp(th)
bh /= 13
bx -= bw / 2
by -= bh / 2
print(bx,by,bw+bx,bh+by)
2. yolov3
- 以输入为
416*416
,80类,9个anchor为例 - 使用的anchor是相对于输入图像大小的
- yolov3使用mask机制,一幅图输出3组结果,每组3个anchor,第一组的输出为
1*255*13*13
- 组织方式同上
- 以下代码的结果是框的左上点和右下点除以输入图像宽高
ans=[116, 90, 156, 198, 373, 326]
for i in (4, 89, 174):
for j in range(13):
for k in range(13):
conf = sigmoid(input0_data[0][i][j][k]) * sigmoid(input0_data[0][i+16][j][k])
if conf > 0.9:
print(conf)
tx=input0_data[0][i-4][j][k]
ty=input0_data[0][i-3][j][k]
tw=input0_data[0][i-2][j][k]
th=input0_data[0][i-1][j][k]
cx=k
cy=j
pw=int(i/85)*2
ph=pw+1
pw=ans[pw]
ph=ans[ph]
bx = sigmoid(tx)+cx
bx /= 13
by = sigmoid(ty)+cy
by /= 13
bw = pw*math.exp(tw)
bw /= 416
bh = ph*math.exp(th)
bh /= 416
bx -= bw / 2
by -= bh / 2
print(bx,by,bw+bx,bh+by)