8

我想实现 Yolo v1,但我对算法有一些疑问。

我理解在 YOLO 中,我们将每个单元格 (7x7) 的图像划分为固定数量的边界框(论文中默认为 2 个,具有 4 个坐标:x、y、w、h),置信度分数我们还预测每个单元格的类别分数。在测试步骤中,我们可以使用 NMS 算法来去除对象的多次检测。 在此处输入图像描述

1)我们什么时候把图像分成网格?事实上,当我阅读他们提到划分图像的论文时,但当我查看网络架构时,似乎我们有两部分:卷积层和 FC 层。这是否意味着网络使用边界框输出“自然”地做到这一点?网格 7x7 的大小是否特定于卷积部分使用它?如果我们使用例如 VGG 会改变网格的大小吗?

编辑:由于我们网络的输出,网格似乎被“虚拟地”划分了。

2) 每个单元格使用 2 个边界框。但是在一个单元格中,我们只能预测一个对象。为什么我们使用两个边界框?

在训练时,我们只希望一个边界框预测器负责每个对象。我们分配一个预测器来“负责”预测一个对象,根据该预测与基本事实的当前 IOU 最高。这导致边界框预测器之间的专业化。每个预测器都能更好地预测某些尺寸、纵横比或对象类别,从而提高整体召回率。

3)我真的不明白这个报价。实际上,据说图像中的每个对象都有一个边界框。但是边界框仅限于单元格,那么当物体大于一个单元格时,YOLO 是如何工作的呢?

4)关于输出层,据说他们使用线性激活函数,但它是否使用等于1的最大值?因为他们说他们对 0 和 1 之间的坐标进行了归一化(我认为置信度和类别预测是一样的)。

4

1 回答 1

16

1)最后一层的输出将是一个大小为 SxSx(5B+C) 的向量。这意味着,如果您将采用此向量并且您将采用前 5 个值,即 x、y、w、h 和第一个单元格中第一个框的置信度,那么后五个值将对应于第二个边界框在第一个单元格中,您将拥有对应于类概率的 C 值,假设您有两个类和网络的以下输出 [0.21 0.98],因此第二类具有更大的概率,这意味着网络认为它是此网格单元中的第二类。所以是的,你是对的,图像实际上是分开的。

2)当他们训练网络时,他们选择了哪个预测器(从某个网格单元中的 B 个框中读取一个框)来惩罚。他们通过具有基本事实的最高 IoU 选择一个预测器。引自论文:“我们指定一个预测器“负责”预测一个对象,根据该预测与基本事实的当前 IOU 最高。因此,假设在预测过程中,第一个框的 IoU 为 0.3,第二个框的 IoU 为 0.7,我们选择第二个框来负责预测该对象,我们将仅从该框累积损失。因此,例如,在训练期间,网络自然会学习使用第一个预测器预测高框(人)和使用第二个预测器(汽车)预测宽框。所以使用多个框的原因是能够预测具有不同纵横比的框。

3)“但是边界框仅限于单元格,那么当物体大于一个单元格时,YOLO是如何工作的?”。YOLO 预测的边界框不限于网格单元,仅它的 (x,y) 坐标被限制在网格单元内。他们在论文中写道:“(x, y) 坐标表示相对于网格单元边界的框的中心。宽度和高度是相对于整个图像预测的。”。如您所见,它们预测 bbox 相对于整个图像的宽度和高度,而不是网格单元。

4) 好吧,我不知道这个问题的答案,但我可以说,在他们的代码中,他们还使用了检测层,用于计算损失、IoU 和许多其他东西。我不太擅长阅读他们的代码,但你可能会运气更好:这是 yolo github 中检测层的代码

PS 关于 YOLO 的另一个很好的信息来源:Joseph Redmon 在 youtube 上的演讲

于 2018-04-18T11:38:11.957 回答