YOLO 和调整自定义数据集的锚框数量

YOLO and adjusting number of anchor boxes for custom dataset

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

我的问题是,锚框的数量是否需要大于任何训练图像中边界框的最大数量?那样的话,我永远不会运行 进入没有相应锚框的检测。这是改编 YOLO 的正确思考方式吗?

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

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

My sense is that if there are only 5 anchor boxes, then there are at most 5 detections per image right?

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

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

关于link中提到的k-means聚类,描述了他们是如何得出5个anchor boxes的。最好坚持使用 5 个边界框,除非有任何特定原因需要包含更多边界框或在出现任何特定要求时具有不同的形状。

anchor boxes的数量部分影响检测框的数量。

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

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

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

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

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

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