我想实现Yolo v1,但我对该算法有一些疑问。
我理解在YOLO中,我们划分每个单元格的图像(7x7),我们预测固定数量的边界框(本文默认为2,有4个坐标:x,y,w,h),一个置信度得分,我们也预测每个细胞的类别得分。在测试步骤中,我们可以使用NMS算法进行删除 多个检测对象。
1)我们什么时候将图像分成网格?事实上,当我阅读他们提到的用于分割图像的论文时,但当我看到网络的架构时,似乎我们有两个部分:卷积层和FC层。这是否意味着网络自然而然地“#34;边框输出?网格7x7的大小是否特定于卷积部分使用它的纸张?如果我们使用例如VGG它会改变网格的大小吗?
编辑:看起来网格被划分了“虚拟”#34;感谢我们的网络输出。
2)每个细胞使用2个边界框。但是在一个单元格中,我们只能预测一个对象。为什么我们使用两个边界框?
在训练时我们只需要一个边界框预测器 负责每个对象。我们分配一个预测变量 “负责”预测基于哪个对象 预测具有与地面最高的当前IOU 真相。这导致边界框之间的专业化 预测。每个预测变量都能更好地预测某些预测变量 尺寸,纵横比或物体类别,总体上有所改善 召回。
3)我真的不明白这句话。实际上,据说图像中的每个对象都有一个边界框。但是边界框仅限于单元格,因此当对象大于一个单元格时,YOLO如何工作?
4)关于输出层,据说它们使用线性激活函数,但它是否使用等于1的最大值?因为他们说他们将0和1之间的坐标标准化(我认为它对于置信度和类预测是相同的)。
答案 0 :(得分:3)
1)最终层的输出将是大小为SxSx(5B + C)的向量。这意味着如果你将采用这个向量,你将获得前5个值,即1,s单元格中第一个框的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和许多其他东西。我不太擅长阅读他们的代码,但你可能会有更好的运气:this is code for detection layer in yolo githubP.S。关于YOLO的另一个很好的信息来源:Joseph Redmon's presentation on youtube