【问题标题】:YOLO and adjusting number of anchor boxes for custom datasetYOLO 和调整自定义数据集的锚框数量
【发布时间】:2018-06-05 20:53:22
【问题描述】:

我正在实施 YOLO v2 和 3 以在自定义数据集上进行对象检测。虽然 YOLO v2 和 3 使用了大约 5 个锚框,但我通常对每张图像进行 50-100 次检测。我的感觉是,如果只有 5 个锚框,那么每个图像最多有 5 次检测,对吧?因此,我试图了解是否需要根据我的数据集调整锚框的数量。

我的问题是,锚框的数量是否需要大于任何训练图像中边界框的最大数量?那样,我永远不会遇到没有对应的检测锚箱。这是适应 YOLO 的正确思维方式吗?

如果我的直觉是正确的,那么我需要做 k-means 来聚类地面实况图像中的边界框并设置锚框坐标。然后我会使用blog post 中指定的常用回归方法。

感谢任何人提供的任何帮助。

【问题讨论】:

    标签: tensorflow keras object-detection convolutional-neural-network yolo


    【解决方案1】:

    我的感觉是,如果只有 5 个锚框,那么每个图像最多有 5 次检测,对吧?

    每个预测单元有五个锚框,而不是整个图像。让我们考虑 Yolo v2,其中输入图像的大小为 416x416x3,输出为 13x13xN。每个 13x13 对应于输入图像中的一个 32x32 单元区域(如下图所示来自博客文章),并且对于每个 13x13 单元,定义了 5 个锚点。因此,从技术上讲,您可以为大小为 416x416 的图像设置 13x13x5 的边界框(您也可以使用更大的图像进行训练,因为 yolo v2 是一个完全卷积的网络,然后您可以获得更多的细胞区域)。

    假设您的图像中有 50 个边界框,应根据边界框中心与单元格中心的接近程度将每个边界框分配给一个单元格。现在,对于这个单元格,选择 5 个提供最佳 IOU 的锚框之一。为每个单元构建一个标签,该标签应包含所有 5 个锚框的置信度分数和框位置和尺寸(除了选定的锚框,其他将标记为零)以及类别分数。

    在链接中提到的 k-means 聚类中,它描述了它们是如何到达五个锚框的。最好只使用 5 个边界框,除非您有任何具体原因要包含更多或有任何特定要求时具有不同的形状。

    【讨论】:

    • 好吧,这是有道理的。因此,每个 13 x 13 缩小的像素都由 5 个锚框定义。然后 CNN 将确定指定对象是否实际位于该像素的中心。这是有道理的。在博客文章中,它讨论了如何通过回归计算最终的边界框尺寸。因此,YOLO 算法使用 32x32 感受野计算预测边界框的尺寸——即使该边界框大于 32x32 感受野。
    • cnn 会预测那个像素的中心在哪里,它不需要在单元格的中心,如果你在博客中看到盒子尺寸是如何编码的,有(bx ,by),它给出了距离中心有多远(cx, cy)
    • 是的,我现在明白了。感谢您的帮助。
    【解决方案2】:

    锚框的数量部分会影响检测到的框的数量。

    YOLOv2 的输出形状为 (13, 13, B*(5+C)),其中 B 是锚框的数量,C 是您要尝试的类的数量探测。因此输出有 13*13=169 个网格单元。您可以将它们视为将输入图像划分为 13 x 13 个单元格。

    每个网格单元可以检测最多 B 个对象或绑定框。网格单元检测到的绑定框的数量取决于其 置信度 值。一个网格单元的每个 B 个边界框都有一个置信度,介于 0 和 1 之间。如果一个框的置信度大于一个阈值,网络最终会告诉我们一个框(或对象)被检测到

    假设一个网格单元具有以下置信度值,阈值为 0.1。

    [0.02, 0.3, 0.001, 0.9, 0.03] (B=5)

    在这种情况下,这个网格单元检测到 2 个框,并以较小的置信度丢弃其他 3 个框。

    所以如果你想减少检测框的数量,我建议你提高阈值

    【讨论】:

    • 哦,谢谢@Yoshio。是的,我明白你在说什么。基本上模型会检测到太多的框,然后根据阈值应用阈值来修剪框的数量。感谢您强调这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多