YOLO物体检测模型?

时间:2017-03-29 08:07:52

标签: tensorflow deep-learning object-detection yolo

目前,我正在阅读Yolo9000型号" https://arxiv.org/pdf/1612.08242.pdf"我很困惑模型如何预测对象检测的边界框,我用Tensorflow做了很多例子,并且在大多数情况下我们给模型"图像的图像和标签"。

我的问题是:   1-我们如何将边界框而不是标签传递给模型?   2-模型如何知道许多盒子属于一个图像?

3 个答案:

答案 0 :(得分:8)

在YOLO中,我们将图像分成7X7网格。对于每个网格位置,网络预测三件事 -

  1. 对象存在于该网格中的可能性
  2. 如果一个物体位于这个网格中,那么它的坐标是什么 边界框?
  3. 如果一个对象位于此网格中,则该类执行此操作 属于?
  4. 如果我们对所有49个网格位置的所有上述变量应用回归,我们将能够确定哪些网格位置具有对象(使用第一个参数)。对于具有对象的网格位置,我们可以使用第二个和第三个参数告诉边界框坐标和正确的类。

    一旦我们设计了一个可以输出所需信息的网络,就可以用这种格式准备训练数据,即在数据集中的每个图像中找到每个7X7网格位置的参数。接下来,您只需训练深度神经网络以回归这些参数。

答案 1 :(得分:0)

要传递图像的边界框,我们需要先创建它。您可以使用特定工具为任何图像创建边界框。在这里,您必须创建绑定其中对象的边界,然后标记该边界框/矩形。您可以为希望模型训练/识别的图像中的每个对象执行此操作。

这个link中有一个非常有用的项目,如果你需要了解边界框,你应该检查一下。

我刚开始用tensorflow学习对象检测。因此,当我获得有关向对象检测模型提供边界框的正确信息时,我也将在此更新。此外,如果您现在已经解决了这个问题,您还可以提供详细信息,以帮助其他人遇到同样的问题。

答案 2 :(得分:0)

1-我们如何将边界框而不是标签传递给模型?

例如,如果要训练执行对象检测(而不是对象分类)的模型,则必须将真值标签作为.xml文件传递。 xml文件包含有关图像中存在的对象的信息。有关对象的每个信息均由5个值组成:

  1. 该对象的类名,例如汽车或人类...
  2. xmin:框左上角点的x坐标
  3. ymin:框左上角点的y坐标
  4. xmax:框右下角的x坐标
  5. ymax:盒子x右下角点的y坐标

将图像内的一个边界框指定为一组5个值,如上所述。如果图像中有3个对象,则xml文件将包含3组该值。

2-模型如何得知许多盒子属于一个图像?

您知道,YOLOv2或YOLO9000的输出具有形状(13、13,D),其中D取决于要检测的对象类别。您可以看到有13x13 = 169个单元(网格单元),每个单元为D值(深度)。 enter image description here

在169个网格单元中,有一些网格单元负责预测边界框。如果真实边界框的中心落在网格单元上,则当给定相同图像时,该网格单元将负责预测该边界框。

我认为必须有一个读取xml注释文件并确定哪个网格单元负责检测边界框的功能。

enter image description here

要使模型不仅学习类,还需要学习盒子的位置和形状,我们必须构建适当的损失函数。 YOLOv中使用的损失函数也将成本放在盒子的形状和位置上。因此,将损失计算为以下各个损失值的加权总和:

  1. 丢失课程名称
  2. 丢失框位置(x-y坐标)
  3. 丢失框形状(框的宽度和高度)

侧面说明:

  • 实际上,一个网格单元最多可以检测B个盒子,其中B取决于 YOLOv2的实现。我用darkflow在我的
    上训练YOLOv2 自定义训练数据,其中B为5。因此该模型可以检测到169 * B 箱,总共是169 * B小损失之和。
  • D = B *(5 + C),其中C是您要检测的类数。
  • 在传递到模型之前,框的形状和位置为 转换为图像尺寸的相对值。