我正在训练一个 YOLO 模型,我的边界框格式如下:
x1, y1, x2, y2 => 例如 (100, 100, 200, 200)
我需要将其转换为类似于以下格式的 YOLO 格式:
X, Y, W, H => 0.436262 0.474010 0.383663 0.178218
我已经计算了中心点 X, Y,以及高度 H 和宽度 W。但仍然需要一种方法将它们转换为所提到的浮点数格式。
回答:
YOLO 将图像空间标准化为在 x
和 y
方向上从 0 到 1。为了在您的 (x, y)
坐标和 YOLO 的 (u, v)
坐标之间转换,您需要将数据转换为 u = x / XMAX
和 v = y / YMAX
,其中 XMAX
和 YMAX
是您使用的图像数组的最大坐标。
这都取决于图像数组的方向是否一致。
这里是一个用于执行转换的 C 语言函数
#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <math.h>struct yolo { float u; float v; };struct yolo convert (unsigned int x, unsigned int y, unsigned int XMAX, unsigned int YMAX){ struct yolo point; if (XMAX && YMAX && (x <= XMAX) && (y <= YMAX)) { point.u = (float)x / (float)XMAX; point.v = (float)y / (float)YMAX; } else { point.u = INFINITY; point.v = INFINITY; errno = ERANGE; } return point;}/* convert */int main(){ struct yolo P; P = convert (99, 201, 255, 324); printf ("Yolo coordinate = <%f, %f>\n", P.u, P.v); exit (EXIT_SUCCESS);}/* main */