【问题标题】:YOLO object detection model?YOLO 物体检测模型?
【发布时间】:2017-08-22 14:32:31
【问题描述】:

目前,我正在阅读 Yolo9000 模型“https://arxiv.org/pdf/1612.08242.pdf”,我对模型如何预测目标检测的边界框感到非常困惑,我用 Tensorflow 做了很多示例,其中大部分我们提供给模型“图像和图像标签”。

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

【问题讨论】:

    标签: tensorflow deep-learning object-detection yolo


    【解决方案1】:

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

    1. 对象出现在该网格中的概率
    2. 如果一个对象位于该网格中,则该网格的坐标是多少 边界框?
    3. 如果一个对象位于这个网格中,它属于哪个类 属于?

    如果我们对所有 49 个网格位置的所有上述变量应用回归,我们将能够判断哪些网格位置有对象(使用第一个参数)。对于有物体的网格位置,我们可以通过第二个和第三个参数告诉边界框坐标和正确的类。

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

    【讨论】:

      【解决方案2】:

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

      link 中有一个非常有用的项目,如果您需要了解边界框,请查看该项目。

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

      【讨论】:

      • 我知道如何注释图像,但我不明白的是tensorflow如何预测坐标,我训练并测试了许多CNN,但它们都对所有图像应用过滤器,但是在物体检测的情况下,我们需要提取物体的 POSITION,Tensoflow 是如何做到的?
      • 到目前为止我所知道的是它将每张图像转换为灰度,但之后我也无法掌握更多细节。如果有人更好地了解此过程并对其进行解释,那将是最好的。
      【解决方案3】:

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

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

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

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

      2- 模型如何知道许多框属于一张图像?

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

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

      我认为一定有一个函数可以读取xml注释文件并确定哪些网格单元负责检测边界框。

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

      1. 类名丢失
      2. 框位置损失(x-y 坐标)
      3. 盒子形状的损失(盒子的宽度和高度)

      旁注:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-29
        • 2018-10-23
        • 2018-09-23
        • 1970-01-01
        • 2017-11-16
        • 1970-01-01
        • 2019-02-02
        • 2022-08-21
        相关资源
        最近更新 更多