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