14

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

在此处输入图像描述

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

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

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

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

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

4

3 回答 3

8

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

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

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

所以一个细胞以输出神经元的感受野的中心为中心,但它是一个小得多的部分。它也有点随意,例如,可以想象具有重叠的细胞——在这种情况下,当一个物体位于其细胞的重叠区域的中心时,您会期望相邻的神经元同时激发。

于 2018-05-29T05:38:13.543 回答
3

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

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

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

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

于 2019-08-15T22:42:23.843 回答
1

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

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

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

    1. 将图像划分为单元格(实际上网络的作者是用训练标签数据集做的)
    2. 对于每个划分的单元格,尝试预测具有置信度分数的边界框(我相信在单元格划分之后的卷积和过滤器能够正确地让网络预测比每个单元格更大的边界框,因为它们以多个单元格为食一次,如果你查看完整的 YOLO 架构,没有不完整的)。

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

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

于 2019-10-24T15:30:23.287 回答