YOLO 对象检测:算法如何预测比网格单元更大的边界框?

Posted

技术标签:

【中文标题】YOLO 对象检测:算法如何预测比网格单元更大的边界框?【英文标题】:YOLO object detection: how does the algorithm predict bounding boxes larger than a grid cell? 【发布时间】:2018-11-07 13:47:23 【问题描述】:

我试图更好地了解 YOLO2 和 3 算法的工作原理。该算法处理一系列卷积,直到它下降到13x13 网格。然后它能够​​对每个网格单元内的对象以及这些对象的边界框进行分类。

如果您查看这张图片,您会看到红色的边界框比任何单个网格单元都大。边界框也以对象的中心为中心。

当网络激活基于单个网格单元时,我的问题是如何预测边界框超出网格单元的大小。我的意思是,对于预测在该单元格中检测到的对象的边界框的神经元来说,网格单元格之外的所有内容都应该是未知的。

更确切地说,这是我的问题:

1.该算法如何预测比网格单元大的边界框?

2。算法如何知道物体的中心位于哪个单元格中?

【问题讨论】:

【参考方案1】:

好吧,这不是我第一次看到这个问题,对于我遇到的所有架构都有同样的问题和事实 YOLO 1 & 2 em> yoloquest, 网络图在哪里暗示了一些分类和定位在第一层或图像被输入的那一刻踢它。它通过一系列卷积层和过滤器(没有忘记池,只是觉得它们是网络中最懒惰的元素,加上我讨厌游泳池,包括其中的单词)。

这意味着在网络流信息的基本级别可以看到 或以不同方式表示,即从像素到轮廓、形状、 在对象被正确分类或定位之前的特征等 就像在任何普通的 CNN 中一样

由于表示边界框预测的张量和 分类位于网络的末端(我看到 反向传播回归)。我认为更适合 说网络:

    将图像划分为单元格(实际上网络的作者是用训练标签数据集这样做的) 对于每个划分的单元格,尝试预测具有置信度分数的边界框(我相信卷积和过滤器紧随其后 细胞分裂负责能够正确地拥有 网络预测的边界框比每个单元都大,因为它们 如果您查看完整的 YOLO,一次以多个细胞为食 建筑,没有不完整的)。

总而言之,我的看法是网络预测更大 一个单元格的边界框,而不是每个单元格都这样做 即网络可以被视为一个普通的 CNN,它的输出为 each classification + number of bounding boxes per cell 他们的唯一目标是 应用卷积和特征图来检测、分类和 使用forward pass 定位对象。

forward pass 暗示分裂中的相邻细胞不会向后/递归地查询其他细胞,更大边界框的预测是通过下一个特征图和连接到先前细胞分裂的接受区域的卷积。中心的盒子也是训练数据的函数,如果它变成左上角,它就不是中心的(请原谅语法)。

【讨论】:

【参考方案2】:

YOLO 预测锚点的偏移量。锚点被初始化,使得有 13x13 组锚点。 (在 Yolov3 中,每组有 k=5 个锚点,不同的 yolo 版本有不同的 k。)锚点分布在图像上,以确保检测到所有部分的对象。

锚点可以有任意大小和纵横比,与网格大小无关。如果您的数据集大多具有较大的前景对象,那么您应该将锚点初始化为较大。如果只需要对锚点进行小幅调整,YOLO 就会学得更好。

每个预测实际上都使用了整个图像的信息。通常来自图像其余部分的上下文有助于预测。例如车辆下方的黑色像素可能是轮胎或阴影。

算法并不真正“知道”对象中心位于哪个单元格中。但是在训练期间,我们从地面实况中获得了这些信息,我们可以训练它进行猜测。经过足够的训练,它最终会很好地猜测。可行的方法是将最接近地面实况的锚点分配给对象。其他锚点被分配给其他对象或背景。分配给背景的锚点应该具有低置信度,而分配给对象的锚点会评估其边界框的 IoU。所以训练加强了一个anchor给出高置信度和准确的边界框,而其他anchor给出低置信度。您问题中的示例不包括任何低置信度的预测(可能是为了让事情保持简单),但实际上低置信度的预测比高置信度的预测要多得多。

【讨论】:

【参考方案3】:

对于预测在该单元格中检测到的对象的边界框的神经元来说,网格单元格之外的所有内容都应该是未知的。

这不太对。这些单元格对应于图像的一个分区,如果对象的中心位于其中,神经元已经学会在其中做出响应。

然而,这些输出神经元的感受野比细胞大得多,实际上覆盖了整个图像。因此,它能够识别并在一个比其分配的“中心单元格”大得多的对象周围绘制一个边界框。

所以一个细胞以输出神经元的感受野的中心为中心,但它是一个小得多的部分。它也有些随意,例如,可以将图像中的单元格重叠 - 在这种情况下,当对象位于其单元格的重叠区域中心时,您会期望相邻的神经元同时触发。

【讨论】:

以上是关于YOLO 对象检测:算法如何预测比网格单元更大的边界框?的主要内容,如果未能解决你的问题,请参考以下文章

视觉检测中的YOLO家族算法是一种两步检测的方法,对吗

目标检测算法详解 YOLO(You only look once)

使用 YOLO v5 进行目标检测

yolo物体检测算法如何进行迁移学习?

yolo 算法 网格的两个bounding box大小是怎么确定的

第三十五节,目标检测之YOLO算法详解