如何将边界框(x1,y2,x2,y2)转换为YOLO样式(X,Y,W,H)

时间:2019-05-13 15:52:12

标签: image-processing machine-learning computer-vision artificial-intelligence yolo

我正在训练YOLO模型,我的边界框采用以下格式:- x1,y2,x2,y2 => ex(100,100,200,200) 我需要将其转换为YOLO格式,例如: X,Y,W,H => 0.436262 0.474010 0.383663 0.178218

我已经计算出中心点X,Y,高度H和重量W。 但是仍然需要如前所述将它们转换为浮点数。

3 个答案:

答案 0 :(得分:3)

对于那些寻找相反问题的人(yolo 格式到普通 bbox 格式)

def yolobbox2bbox(x,y,w,h):
    x1, y1 = x-w/2, y-h/2
    x2, y2 = x+w/2, y+h/2
    return x1, y1, x2, y2

答案 1 :(得分:1)

这是python中的代码片段,用于将x,y坐标转换为yolo格式

def convert(size, box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[1])/2.0
    y = (box[2] + box[3])/2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

im=Image.open(img_path)
w= int(im.size[0])
h= int(im.size[1])


print(xmin, xmax, ymin, ymax) #define your x,y coordinates
b = (xmin, xmax, ymin, ymax)
bb = convert((w,h), b)

检查我的示例程序,将LabelMe注释工具格式转换为Yolo格式https://github.com/ivder/LabelMeYoloConverter

答案 2 :(得分:0)

YOLO将图像空间归一化为在x和y方向上都从0扩展到1。要在(x,y)坐标和yolo(u,v)坐标之间转换,您需要将数据转换为u = x / XMAX; y = y / YMAX,其中XMAX,YMAX是您正在使用的图像阵列的最大坐标。

这全部取决于以相同方式定向图像阵列。