YOLO算法——理解训练数据

数据挖掘 神经网络 深度学习 约洛
2021-09-26 06:41:30

我正在Coursera上学习“卷积神经网络” ,它由 Andrew Ng 教授。我在第 3 周,对 YOLO 算法感到困惑。我检查了 coursera 上的课程论坛,但我仍然不清楚,似乎很多人对此感到困惑

  1. 什么是训练数据?所有的图像和物体在它的位置?因此对于图像,如果其中有一辆车和一个人,那么输入将是图像的矢量表示、中心的位置 (x,y)、2 个对象的高度和宽度以及包含在每个盒子。因此,图像的总矢量表示 + 2 个中心的 4 个坐标 + 2 个框的 4 个高度和宽度 + 2 个目标代码 - 一个用于人,一个用于汽车。对?
  2. 测试数据是什么?仅测试图像的矢量表示?该课程讨论将图像拆分为s 网格。我最初认为将s 网格中的一个小方块作为输入。但我认为情况并非如此。必须馈送整个图像。那是对的吗?
  3. 如何使用来自 s*s 网格的正方形?
  4. 训练图像和测试图像的大小必须相同吗?他们所说的“汽车检测数据集有 720x1280 图像,我们已将其预处理为 608x608 图像”是什么意思。在第 3 周的作业中?

更新 1------------------------------------------------------

  1. 如果火车图像有 2 个对象且最大类别为 3,那么输入将是图像的矢量表示 + 8*2 的输入矢量吗?
  2. 输入向量的长度会根据单个图像中的对象而变化吗?
  3. 我仍然不清楚如何使用 s 网格。如果图像中间有一辆大汽车,而 YOLO 从图像中心的 s 网格中看一个小方块,则无法检测到有汽车。我们必须从中心到 YOLO 提供更大的正方形,以便它知道有车。那么喂一个小方块有什么用呢?
  4. 我们如何喂一个更大的正方形?
  5. 从 s*s 网格馈送正方形的过程是否发生在多个卷积层之后(因此基本上较小的正方形代表更大的区域)?
  6. 您有图像及其缩小版本的示例吗?他们的一些数据科学正在萎缩吗?

--------------------更新2

我读了答案,又看了一遍视频,还是不清楚

2.输入向量的长度会根据单个图像中的对象而变化吗?例如,如果 image1 有 5 个对象,那么输入的长度将比只有 1 个对象的图像长得多。我们如何在输入不是固定宽度的情况下提供此类数据。我们是否找到具有最大对象的图像并确定输入的长度,而对于其余图像,我们只需填充 0(以使输入向量具有相同的长度)?

  1. 我仍然对 ss 网格感到困惑。我最初问如何使用来自 s*s 网格的正方形?

阅读以下答案后,我更新的问题是我仍然不清楚如何使用 ss 网格。如果图像中间有一辆大汽车,而 YOLO 从图像中心的 ss 网格中看一个小方块,则无法检测到有汽车。我们必须从中心到 YOLO 提供更大的正方形,以便它知道有车。那么喂一个小方块有什么用呢?

答案(在原始答案的评论中)说 3:网格单元不包含整个边界框,而仅包含边界框的中点。

我的困惑是:根据前面的讨论,我们不单独提供网格单元。我们一次性输入整个图像。那么创建 ss 网格有什么意义呢。如果图像只看一次,那么算法如何检测两个物体——一辆大车和一辆小车?我们创建网格,网格仅用于查找对象的中点。但随后整个对象被识别。我仍然不清楚这部分。

我觉得我不是唯一一个很难理解 YOLO 的人。我在课程的评论部分看到多个线程提出了类似的问题,我将不胜感激耐心和指导

1个回答
  1. 对于您需要的每个边界框

    • p_c:任何物体/没有物体(背景)
    • b_x, b_y, b_w, b_h: x, y, 边界框的宽度和高度
    • c_i: 对象 i / 没有对象 i

对于例如2 个边界框3 个类别(例如汽车、人、红绿灯),您的输入向量将如下所示(括号中的上标表示边界框的索引)

[pC(1)bX(1)b是的(1)bw(1)bH(1)C1(1)C2(1)C3(1)pC(2)bX(2)b是的(2)bw(2)bH(2)C1(2)C2(2)C3(2)]

  1. 整个图像被输入到模型中。这就是YOLO如此之快的本质原因。它只查看整个图像一次。

  2. 这是由CNN完成的。基本上,卷积的每个部分都对应一个网格单元。例如,图像中的右上方单元格对应于每一层中过滤器的右上方部分。这在该图像的左侧可视化: 约洛

  3. 是的,它们必须具有相同的尺寸。这是大多数 CNN 所期望的。训练集中的所有图像必须具有相同的大小,测试集中的图像也是如此。图像被缩小并变形为 608x608 大小的正方形