【问题标题】:How to define bounding box label in YOLO V1?如何在 YOLO V1 中定义边界框标签?
【发布时间】:2019-12-09 22:50:21
【问题描述】:
  1. 我正在尝试复制yolo v1,但是在创建标签时遇到了问题。
  2. Yolo v1有2个bounding box,那么当一个grid有一个object时,如何选择放哪个bounding box来放置位置信息呢?

例如

  1. 在 416*416 的图片中,有一个对象 [x,y,w,h]=[100,200,300,400]
  2. 按照 yolo 论文,将位置标准化为 [0.25, 0.084, 0.72, 0.96]
  3. 和yolo论文中一样,我需要创建一个张量7*7*30,大部分都是0,但是在[4,5,:]中张量应该是一个长度为30的向量: [置信度1,x1,y1,w1,h1,置信度2,x2,y2,w2,h2,c0,c1 ...] 像这样:

我的问题是,[confidence1, x1, y1, w1, h1, confidence2, x2, y2, w2, h2,] 是什么?

A、B、C选哪个?为什么?

【问题讨论】:

    标签: yolo


    【解决方案1】:

    在每个单元格中,生成固定数量 (B) 的边界框及其置信度分数。置信度分数是通过将每个对象的概率及其交集乘以预测框和地面实况框的并集来计算的。每个边界框由 5 个数字表示:四元组 (x;y;w;h) 和框的置信度得分。 x 和 y 是盒子中心的坐标, w 和 h 分别是盒子的宽度和高度。这四个数字是相对于图像的绝对宽度和高度的浮点值,它们可以介于 0.0 和 1.0 之间。置信度分数表示包含对象的框的可能性。每个网格单元包含不同类别数量的条件类别概率,因此,对于每个类别的对象,每个单元格中都有一个概率,而与 B 的值无关。注意,条件类别概率意味着属于特定类的对象以包含对象的框为条件。因此,对于每个网格单元,有 B×5 个数字表示边界框信息和 C 类概率。该预测信息被编码为 (S; S; B×5 + C) 形状的张量。

    如论文所述:

    预测被编码为 S × S × (B * 5 + C) 张量。为了 在 PASCAL VOC 上评估 YOLO,我们使用 S=7,B=2。帕斯卡 VOC 有 20 标记类,因此 C=20。我们最终的预测是一个 7×7×30 的张量。

    由于数据集有 20 个类,并且每个单元格中有 2 个边界框,因此您将拥有: B×2+20 = 2×5+20 = 30。这 20 个是类概率,可以是 0。在你的张量中,你放了 5 个零,所以我假设你有 5 个对象类。所以在这种情况下:

    B×2+5 = 9,如果你的 S 是 7 作为 YOLO 中的默认值,那么你的张量的长度将是:7×7×9 = 4989。因此,对于每个边界框,您有 9 个值,并且所有这些长度为 9 的向量都相互连接。对于您的问题,A 选项似乎更有可能为真。

    此图适用于 YOLOv3,在您的情况下,对于每个单元格,您有 2 个边界框和 20 个类(与有 5 个框和 6 个类的图相反)。但想法是相似的。

    【讨论】:

    • 感谢您的回答!但是我们这里有一些误解:1.我再次编辑问题,以使其更清楚2.我的班级人数也是20,而不是5。3.问题是如何在边界框label.
    • 您仍然应该选择 A。对于边界框手动注释,每个对象应该有 5 个元素:<object-class> <x_center> <y_center> <width> <height>,并且程序应该计算张量。此外,类概率不必全为 0,可以在 0 和 1 之间,选择得分最高的作为对象的类。
    • 你可以看看AlexeyAB关于如何注释数据集的解释。
    • 谢谢。我查了某人的代码:github.com/JY-112553/yolov1-keras-voc/blob/master/data/data.py他使用7 * 7 * 25的标签来复制yolov1。我想我在这里犯了一个错误:我认为label和predict的维度应该是一一对应的。实际上,7*7*25 标签到 7*7*30 预测,而不是 7*7*30 标签到 7*7*30 预测。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2021-06-22
    • 2018-08-13
    • 2021-08-01
    • 1970-01-01
    • 2022-12-04
    • 2017-11-16
    相关资源
    最近更新 更多