kri*_*nab 13 computer-vision deep-learning tensorflow yolo convolutional-neural-network
我试图更好地了解 YOLO2 和 3 算法的工作原理。该算法处理一系列卷积,直到它得到一个13x13
网格。然后它能够对每个网格单元内的对象以及这些对象的边界框进行分类。
如果您查看此图片,您会看到红色的边界框比任何单个网格单元格都大。此外,边界框以对象的中心为中心。
我的问题是当网络激活基于单个网格单元时,预测的边界框如何超过网格单元的大小。我的意思是网格单元之外的所有东西对于预测在该单元格中检测到的对象的边界框的神经元来说应该是未知的。
更准确地说,这是我的问题:
1.算法如何预测大于网格单元格的边界框?
2.算法如何知道对象的中心位于哪个单元格中?
网格单元之外的所有内容对于预测在该单元格中检测到的对象的边界框的神经元来说应该是未知的。
这不太对。细胞对应于图像的一个分区,如果对象的中心位于其中,神经元已经学会了做出响应。
然而,感受野这些输出神经元比细胞大得多,实际上覆盖了整个图像。因此,它能够识别并围绕比其分配的“中心单元格”大得多的对象绘制边界框。
所以一个细胞以输出神经元的感受野的中心为中心,但它是一个小得多的部分。它也有点随意,例如可以想象具有重叠的细胞——在这种情况下,当一个物体位于其细胞重叠区域的中心时,您会期望相邻的神经元同时激发。
YOLO 预测锚点的偏移量。锚点被初始化为有 13x13 组锚点。(在 Yolov3 中,每组有 k=5 个锚点,不同的 yolo 版本有不同的 k。)锚点分布在图像上,以确保检测到所有部分的对象。
锚点可以具有任意大小和纵横比,与网格大小无关。如果您的数据集主要包含大型前景对象,那么您应该将锚点初始化为较大的值。如果 YOLO 只需要对锚点进行小的调整,它就会学得更好。
每个预测实际上都使用整个图像的信息。通常,图像其余部分的上下文有助于预测。例如,车辆下方的黑色像素可能是轮胎或阴影。
该算法并不真正“知道”对象的中心位于哪个单元格中。但在训练过程中,我们从真实情况中获得了这些信息,我们可以训练它进行猜测。经过足够的训练,它最终会非常擅长猜测。其工作方式是将最接近地面实况的锚点分配给该对象。其他锚点被分配给其他对象或背景。分配给背景的锚应该具有较低的置信度,而分配给对象的锚则评估其边界框的 IoU。因此,训练强化了一个锚点以提供高置信度和准确的边界框,而其他锚点则提供低置信度。您问题中的示例不包含任何低置信度的预测(可能试图让事情变得简单),但实际上,低置信度预测会比高置信度预测多得多。