为 YOLO3 准备地面实况标签

数据挖掘 数据集 物体检测 约洛
2021-10-14 19:35:24

我想为具有 JSON 格式原始标签的自定义数据集训练 YOLO3。JSON 中的每个边界框都指定为[x1, y1, x2, y2].

至此,我已经转换[x1, y1, x2, y2][cx, cy, pw, ph],即边界框的中心x,中心y,缩放为图像的宽高;pw, ph是边界框的宽度和高度相对于图像宽度和高度的比率。但我不认为这是完整的(甚至是正确的)。

据我了解,YOLO3 为每个网格单元分配 N 个锚框(图像分为 SxS 网格单元),因此,边界框的预测是相对于来自网格单元的给定锚框(一个锚框与基本事实的 IOU 最高)。公式如下:

YOLO3 BB

因此,我应该如何准备 ground truth 以便 YOLO3 能够理解它们?我是否必须以某种方式颠倒这些公式?另外如何考虑不同数量的尺度和不同数量的锚框?

举一个具体的例子:假设我有一个416 x 416图像和一个13 x 13网格单元的配置。地面实况边界框(来自数据集)是[x1=100, y1=100, x2=200, y2=200],类 = c。YOLO3 的转换值是多少?

LE:假设我们有 2 个班级[car, person]和 2 个锚点(1 个宽,1 个高)。

输出是否会是一个形状张量,13 x 13 x (2*(5+2))其中网格单元的大多数值(形状的向量2*(5+2))为 0,除了一个特定的单元(地面实况边界框的中心所在的单元)?

在这种情况下,对于那个单元格(比如c[i,j]),假设给定锚点 2 的最大 IOU 并且地面实况类是person这意味着c[i,j,:7](anchor 1 prediction) 将被忽略,c[i,j,7:](anchor 2 prediction)将被忽略[bx, by, bw, bh, conf, 0, 1]

因此,人的边界框的基本事实应该如何编码?它应该是与网格单元的特定锚点的偏移量吗?这对我来说仍然不清楚。

谢谢!

1个回答

因此,人的边界框的基本事实应该如何编码?

边界框由边界框中心的归一化坐标定义。它应该在文本文件中表示为一行:

<object-class> <x> <y> <bb_width> <bb_height>

给定3个类:

0 full-image
1 top-left-quater
2 left-half

分别填充完整图像、左上四分之一和左半部分的三个边界框将表示如下:

0 0.500000 0.500000 1.000000 1.000000
1 0.250000 0.250000 0.500000 0.500000
2 0.250000 0.500000 0.500000 1.000000

更多细节: