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=j
cy=k
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=j
cy=k
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)