训练一个 YOLO 风格的物体检测器

数据挖掘 美国有线电视新闻网 计算机视觉 物体检测 约洛
2022-02-17 22:14:07

tl;博士我正在尝试训练一个小型 CNN(两个卷积层和两个连接层)来在 COCO 数据集中找到人类。我的网络够大吗?如果够,大概需要多少个训练周期(有 64115 个训练图像)?

我正在尝试制作一个可以在图像中围绕人类绘制边界框的神经网络。

我最初打算使用 YOLO,因为它已经存在并且完全符合我的要求。但是,我发现通过 YOLO 网络进行单次前向传递需要很多秒,这对于我的目的来说太慢了。由于我的任务要简单得多(YOLO 可以区分许多对象类,而我只对人类感兴趣),而且我不需要那么高的准确性,我决定按照 YOLO 的风格制作一个更小的 CNN,但是层数和参数少得多。

我已经制作了一个具有两个卷积层和两个全连接层的 CNN,它可以在几分之一秒内完成前向传递,并且我正在对来自 COCO 数据集的包含人类的图像进行训练。我现在的问题是,由于网络太小,我不知道它是否能真正执行任务,也不知道在尝试更大的架构之前要训练多长时间。我还担心,由于我使用的是普通笔记本电脑,因此可能需要数月甚至数年才能进行足够的培训。

如果有人能告诉我这类任务的最小网络规模是多少,以及通常需要多少个训练周期,将不胜感激。或者,如果我做出了错误的假设(即,我可能错误地使用了预训练网络,因为它们太慢了),如果有人能指出这一点,那将非常有帮助。

1个回答

正如@Nikos M. 所说,它基于反复试验。以下是一些您可能会觉得有用的提示 -

  1. 创建一个足够好的验证集。
  2. 使用 YOLO-tiny 版本而不是自定义架构。
  3. 使用 Google Colab

需要多少 epoch 的训练

你的数据非常大。训练时间取决于 batch_siz、learning_rate 和其他超参数。所以我建议按照步骤运行你的训练循环(一步 = 一个反向传播)。开始运行大量步骤(或无限步骤)的训练。但是,每隔 100-200 步(根据您的速度)在Val 集上测试您的模型并检查模型的准确性。如果模型仅在 2000 步后就获得了足够的准确度,则中断训练。确保在一定数量的步骤后保存检查点。

我最初打算使用 YOLO

我假设你从 2016 年开始使用 YOLO。之后有很多版本的 YOLO,我主要建议你尝试YOLO-tiny模型。您会为 YOLO (v3,v4,v5) 的每个版本找到这些微型模型。这些模型超快且超小。使用这些预训练模型的另一个优势是它们是经过预训练的!如果需要,您将节省大量培训时间。

因为我在一台普通的笔记本电脑上

使用google colab获取免费的高端 GPU。如果在谷歌驱动器中获取数据是一个问题,那么尝试将图像大小调整为网络的标准输入大小(如 448x448),这将大大减少数据集的大小。如果这并没有将数据集的大小缩小很多,请尝试在数据集的一部分上进行训练,并尝试在 Val 集上获得良好的准确性。我觉得 60K 已经是一个非常庞大的数据集,并且我使用最多 3K-5K 图像训练了具有非常高准确度的模型。(但我再次没有看到你的任务和你的图像)。