目前,我正在阅读Yolo9000型号" https://arxiv.org/pdf/1612.08242.pdf"我很困惑模型如何预测对象检测的边界框,我用Tensorflow做了很多例子,并且在大多数情况下我们给模型"图像的图像和标签"。
我的问题是: 1-我们如何将边界框而不是标签传递给模型? 2-模型如何知道许多盒子属于一个图像?
答案 0 :(得分:8)
在YOLO中,我们将图像分成7X7网格。对于每个网格位置,网络预测三件事 -
如果我们对所有49个网格位置的所有上述变量应用回归,我们将能够确定哪些网格位置具有对象(使用第一个参数)。对于具有对象的网格位置,我们可以使用第二个和第三个参数告诉边界框坐标和正确的类。
一旦我们设计了一个可以输出所需信息的网络,就可以用这种格式准备训练数据,即在数据集中的每个图像中找到每个7X7网格位置的参数。接下来,您只需训练深度神经网络以回归这些参数。
答案 1 :(得分:0)
要传递图像的边界框,我们需要先创建它。您可以使用特定工具为任何图像创建边界框。在这里,您必须创建绑定其中对象的边界,然后标记该边界框/矩形。您可以为希望模型训练/识别的图像中的每个对象执行此操作。
这个link中有一个非常有用的项目,如果你需要了解边界框,你应该检查一下。
我刚开始用tensorflow学习对象检测。因此,当我获得有关向对象检测模型提供边界框的正确信息时,我也将在此更新。此外,如果您现在已经解决了这个问题,您还可以提供详细信息,以帮助其他人遇到同样的问题。
答案 2 :(得分:0)
1-我们如何将边界框而不是标签传递给模型?
例如,如果要训练执行对象检测(而不是对象分类)的模型,则必须将真值标签作为.xml文件传递。 xml文件包含有关图像中存在的对象的信息。有关对象的每个信息均由5个值组成:
将图像内的一个边界框指定为一组5个值,如上所述。如果图像中有3个对象,则xml文件将包含3组该值。
2-模型如何得知许多盒子属于一个图像?
您知道,YOLOv2或YOLO9000的输出具有形状(13、13,D),其中D取决于要检测的对象类别。您可以看到有13x13 = 169个单元(网格单元),每个单元为D值(深度)。
在169个网格单元中,有一些网格单元负责预测边界框。如果真实边界框的中心落在网格单元上,则当给定相同图像时,该网格单元将负责预测该边界框。
我认为必须有一个读取xml注释文件并确定哪个网格单元负责检测边界框的功能。
要使模型不仅学习类,还需要学习盒子的位置和形状,我们必须构建适当的损失函数。 YOLOv中使用的损失函数也将成本放在盒子的形状和位置上。因此,将损失计算为以下各个损失值的加权总和:
侧面说明: