我想为具有 JSON 格式原始标签的自定义数据集训练 YOLO3。JSON 中的每个边界框都指定为[x1, y1, x2, y2]
.
至此,我已经转换[x1, y1, x2, y2]
为[cx, cy, pw, ph]
,即边界框的中心x,中心y,缩放为图像的宽高;pw, ph
是边界框的宽度和高度相对于图像宽度和高度的比率。但我不认为这是完整的(甚至是正确的)。
据我了解,YOLO3 为每个网格单元分配 N 个锚框(图像分为 SxS 网格单元),因此,边界框的预测是相对于来自网格单元的给定锚框(一个锚框与基本事实的 IOU 最高)。公式如下:
因此,我应该如何准备 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]
。
因此,人的边界框的基本事实应该如何编码?它应该是与网格单元的特定锚点的偏移量吗?这对我来说仍然不清楚。
谢谢!