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

时间:2018-05-29 01:48:34

标签: tensorflow deep-learning computer-vision convolutional-neural-network yolo

我想更好地了解YOLO2& 3种算法有效。该算法处理一系列卷积,直到它变为13x13网格。然后,它能够对每个网格单元格中的对象以及这些对象的边界框进行分类。

enter image description here

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

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

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

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

2。算法如何知道对象中心位于哪个单元格中?

3 个答案:

答案 0 :(得分:4)

  

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

这不太对劲。单元格对应于图像的分区,如果对象的中心位于神经元内,神经元已经学会响应。

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

因此,细胞集中在输出神经元的感受野的中心,但是是一个小得多的部分。它也有点武断,例如可以想象有重叠的细胞 - 在这种情况下,当物体在细胞的重叠区域居中时,你会期望相邻的神经元同时发射。

答案 1 :(得分:0)

YOLO预测锚点的偏移量。初始化锚,以便有13x13套锚。 (在Yolov3中,每组具有k = 5个锚点,不同的yolo版本具有不同的k。)这些锚点分布在图像上,以确保检测到所有部分的物体。

锚点可以具有任意大小和长宽比,与网格大小无关。如果您的数据集主要包含大型前景对象,则应将锚点初始化为较大。 YOLO仅需对锚点进行少量调整即可学习得更好。

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

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

答案 2 :(得分:0)

好吧,这不是我第一次提出这个问题,对于我在我遇到的所有 YOLO 1 & 2 yoloquest没有网络图暗示在第一层或馈入图像的那一刻对其进行分类和本地化。它穿过一系列卷积层和滤镜(不要忘记合并只是觉得它们是网络中最懒惰的元素,而且我讨厌包含其中的单词的游泳池。)

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

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

    1. 将图像划分为单元(实际上,网络的作者使用训练标签数据集来完成此操作)
    2. 对于每个划分的单元,尝试用置信度得分预测边界框(我相信卷积和滤波器会在之后 细胞分裂负责能够正确地拥有 网络预测边界框大于每个单元格,因为它们 如果您看完整的YOLO,一次要喂一个以上的细胞 架构,没有不完整的一种)。

    总而言之,我的看法是网络预测更大 一个单元的边界框,而不是每个单元都这样做 即可以将网络视为具有以下内容的正常CNN: each classification + number of bounding boxes per cell的唯一目标是 应用卷积和特征图来检测,分类和 用forward pass定位对象。

  

forward pass意味着该分区中的相邻单元格不会向后/递归查询其他单元格,较大的边界框的预测是通过下一个特征图和卷积连接到先前的单元格分区的接受区域来进行的。同样,质心的框是训练数据的函数,如果将其更改为左上角,则它不是质心的(原谅语法)。