是否可以为每个 class 从多个数据集训练模型?

Is it possible to train model from multiple datasets for each class?

我对对象检测还很陌生。我正在使用 tensorflow 对象检测 API,我现在正在为我的项目收集数据集 model_main.py 来训练我的模型。

我发现并转换了两个相当大的带有注释的汽车和交通信号灯数据集。并从中制作了两张 tfrecords。

现在我想训练一个预训练模型,但我很好奇它会起作用吗?例如“001.jpg”这样的图像可能会有一些带注释的汽车边界框(它来自汽车数据集),但如果也有红绿灯,它就不会被注释 - > 会不会导致学习率不好? (可以有很多这些 "problematic" 图片)我应该如何改进它?有什么解决方法吗? (实在不想再给图加注释了)

如果这是愚蠢的问题,我很抱歉,感谢您的任何回复 - 一些与此问题相关的链接将是最好的!

谢谢!

简短的回答是肯定的,这可能有问题,但您可以通过一些努力使之成为可能。 如果你有两个城市数据集,一个只有交通灯的注释,第二个只有汽车的注释,那么第一个数据集中的每个汽车实例都将被学习为错误示例,每个交通实例第二个数据集中的光将被学习为错误的例子。 我能想到的两种可能的结果是:

  1. 模型不会收敛,因为它试图学习相反的东西。
  2. 模型会收敛,但会特定于领域。这意味着该模型将仅检测来自第一个数据集域的图像上的交通灯,以及第二个数据集域中的汽车。 事实上,我尝试自己在不同的设置中这样做,并得到了这个结果。

为了能够 objective 学习交通灯和汽车,无论它们来自哪个数据集,您都需要修改损失函数。你需要告诉损失函数每个图像来自哪个数据集,然后只计算对应的类上的损失(/zero out 类上的损失不对应)。所以回到我们的例子,你只计算损失并在第一个数据集上反向传播交通灯,在第二个数据集上反向传播汽车。

为了完整起见,我将补充一点,如果资源可用,那么更好的选择是注释所有数据集上的所有 类,以避免建议的修改,因为仅反向传播某些 类, 你不喜欢为其他 类.

使用实际的错误示例