Yolo v1训练步骤中的边界框

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

我了解到在YOLO中,我们将图像按单元格划分(7×7),并预测固定数量的边界框(论文中默认是2个,每个框有4个坐标:x, y, w, h),一个置信度分数,并且还为每个单元格预测类别分数。在测试步骤中,我们可以使用NMS算法来去除对同一对象的多次检测。enter image description here

1) 我们何时将图像划分为网格?事实上,当我阅读论文时,他们提到要划分图像,但当我查看网络的架构时,似乎有两部分:卷积层和全连接层。这是否意味着网络通过边界框输出“自然”地完成了划分?网格大小7×7是否特定于论文中使用的卷积部分?如果我们使用VGG,它是否会改变网格的大小?

编辑:似乎网格是通过网络输出“虚拟”划分的。

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

在训练时,我们只希望一个边界框预测器对每个对象负责。我们根据哪个预测与真实值的当前IOU最高,来分配一个预测器“负责”预测对象。这导致了边界框预测器之间的专业化。每个预测器在预测特定大小、纵横比或类别的对象方面变得更好,从而提高了总体召回率。

3) 我对这段话不太理解。事实上,文中提到图像中的每个对象都有一个边界框。但边界框限于单元格内,那么当对象大于一个单元格时,YOLO如何工作?

4) 关于输出层,他们说使用线性激活函数,但它是否使用最大值等于1?因为他们说他们将坐标标准化在0到1之间(我认为置信度和类别预测也是如此)。


回答:

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) 嗯,我不知道这个问题的答案,但我可以说在他们的代码中他们也使用了检测层,计算损失、IoUs和很多其他东西。我不太擅长阅读他们的代码,但你可能会有更好的运气:这是yolo github中检测层的代码

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注