darknet之输出转化边界框座标

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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章