YOLO:什么更好?每个标签多个网络或单个网络中的多个标签?

数据挖掘 神经网络 图像识别 约洛
2022-03-11 22:17:34

我想使用 YOLOv3 网络,加载预先存在的训练权重,然后重新训练结束层以识别 20 个标签。

在训练中向单个网络添加标签会降低其准确性吗?

训练多个模型会更好吗:

例如

Model A : recognizes 5 labels (ferrari,honda,ford,toyota,tesla)
Model B : regonzies 10 labels (store front / stopsign, speed sign, super charger station , etccc. )
Model C : recongizes 5 labels (pedestrian, dog, marathon runner, bicycler, scooter rider)

或单个模型

Model D: Recognizes 20 labels (all labels above put together)

模型 D 会像模型 A、B、C 加起来一样准确吗?

1个回答

它特别取决于数据大小和模型容量。

因此,我们不能在任何实验之前给出明确的“是”或“否”。但是,我们可以列举可能的案例、原因和改进方法,而不管任何特定的模型或数据集。

  1. 如果每个类别的数据点数量不足(现实中经常出现这种情况),则组合类别的单个模型表现更好,因为通过在不同但相关的任务之间共享模型(即共享知识)来减弱数据短缺的影响. 然而,我们不应该忘记模型的容量,如果模型容量不足以完成组合任务(这取决于模型的架构和大小),这种共享会适得其反,因为模型将其有限的容量分散到多个任务中,并且成为“万事通,无所事事”。因此,如果模型容量允许,这种方法是有利的,这对于具有灵活大小约束的神经网络来说不太重要。

  2. 如果每个类别的数据点数量足够多(这种情况很少发生),或者模型容量有限(例如,当模型性能在超过 10% 的数据上训练时停止改进),则每个类别的单个模型更好,因为没有容量将被浪费在不同的(尽管相关的)任务上。从不同的角度来看,虽然这种选择在模型精度方面可能不太有利,但它允许在较小的任务上进行并行开发,即 更快的生产,这对于我们在模型精度方面支付的成本来说可能是一个合理的收益。

两种方法

我们也可以将这两种方法结合起来。首先,我们在组合类别上训练模型,然后我们将训练模型的一部分(或部分)(例如层、最终预测等)提供给将在一个类别上训练的特定模型。这正是预训练模型为我们所做的事情,它被训练用于具有更多数据的更一般的任务(甚至可能是不同但相关的任务),然后我们将其用于特定任务。

在你的情况下,你可以去三个级别:

  1. 已经搭建好的预训练YOLO,
  2. 在所有类别上训练 MyYOLO(例如,使用来自 YOLO 的最后一层的一个输入,以及一个直接来自图像的输入),以及
  3. 在特定类别上训练 MyYOLO2(例如,使用来自 MyYOLO 的一个输入和一个直接来自图像的输入)。请注意,在每个级别,先前模型的权重保持不变以提供恒定的输入。