是否可以针对每个类别从多个数据集中训练模型?

时间:2019-02-17 21:13:31

标签: python tensorflow object-detection-api

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

我发现并转换了带有注释的两个非常大的汽车和交通信号灯数据集。并从他们那里制作了两张tf唱片。

现在我想训练一个预训练模型,但是我很好奇它会起作用吗?当图像(例如“ 001.jpg”)有可能当然带有一些带注释的汽车边界框时(来自汽车数据集),但是如果还有交通信号灯,则也不会被注释->将这会导致学习率下降吗? (可能有许多这些“问题”图像)我应该如何改善呢?有什么解决方法吗? (我真的不想再次注释图像)

如果抱歉,它的愚蠢问题,谢谢您的答复-与此问题相关的某些链接将是最好的!

谢谢!

1 个答案:

答案 0 :(得分:1)

简短的回答是,可能会出现问题,但是您可以通过一些努力使它成为可能。 如果您有两个城市数据集,而在一个数据集中只有交通信号灯注解,在第二个数据集中只有汽车注解,那么第一个数据集中的每个汽车实例都会被当作错误的例子,而每个交通实例第二个数据集中的光将被作为错误的示例进行学习。 我能想到的两种可能的结果是:

  1. 该模型将不会收敛,因为它会尝试学习相反的事物。
  2. 该模型将收敛,但将针对特定领域。这意味着该模型将仅在来自第一个数据集的域的图像上检测交通信号灯,而在第二个数据集的域中检测汽车。 实际上,我尝试在不同的环境中这样做,并获得了结果。

为了能够了解学习交通信号灯和汽车的目标,无论它们来自哪个数据集,都需要修改损失函数。您需要告诉损失函数每个图像来自哪个数据集,然后仅计算相应类别上的损失(/将损失分类为零/将其分类为不对应)。因此,回到我们的示例,您仅在第一个数据集上计算损耗和向后传播交通信号灯,在第二个数据集上计算汽车。

出于完整性考虑,我将补充一点,如果有资源可用,那么更好的选择是对所有数据集上的所有类进行注释,以避免建议的修改,因为仅通过反向传播某些类,您就不会喜欢使用实际的错误示例其他课程。