使用新图像更新Tensorflow目标检测模型

9

我使用Tensorflow的目标检测API使用自定义数据集训练了一个更快的RCNN模型。随着时间的推移,我想继续使用额外的图像(每周收集)更新模型。目标是优化准确性并随着时间的推移加权新图像。

以下是几种选择:

  1. 将图像添加到先前的数据集并训练全新的模型
  2. 将图像添加到先前的数据集并继续训练之前的模型
  3. 只使用新图像创建新数据集并继续训练之前的模型

这是我的想法:

选项1:可能会耗费更多时间,但所有图像都会被平等处理。
选项2:额外的训练时间可能较少,但一个担忧是算法可能会更加重视早期的图像。
选项3:这似乎是最好的选择。拿原始模型并专注于培训新内容。
是否有一种显然更好?每种方法的利弊是什么?
此外,我想知道是将一个测试集保持为准确性的控制还是每次创建一个包括新图像的新测试集更好。也许将新图像的一部分添加到模型和另一部分添加到测试集中,然后将旧的测试集图像反馈到模型(或将其删除)?

1个回答

2
考虑数据集几乎完美的情况。如果您在新图像上运行模型(每周收集),则结果(即具有分数的框)将与模型所需的完全相同,因此将这些结果添加到数据集中是没有意义的,因为模型不会学到任何新东西。
对于不完美的数据集,来自新图像的结果将显示(一些)错误,并且这些错误适合进行进一步的训练。但是,数据集中可能已经存在“坏”图像,因此最好将其删除。这表明选项1必须按计划发生,以完全消除“坏”图像的影响。
在较短的时间表上,如果新图像在域类别上相当平衡(在某种意义上是先前数据集的代表性子集),则选项3是合适的。
选项2似乎非常安全且易于理解。当您说“算法可能更加重视早期图像”时,如果早期图像是“好”的,我不认为这是一个问题。但是,我可以看出域随时间可能会发生变化(演变),在这种情况下,您可能希望抵消旧图像的权重。我了解您可以修改训练数据来做到这一点,如本问题所讨论的那样。

在TensorFlow目标检测API中使用类权重平衡数据


我喜欢这个想法,即删除被定义为有负面影响的图像,以提高检测结果的准确性。但是,如何确定一个“不好”的图像呢? - eerick
1
我正在尝试使用一组先前训练过的图形(在相同数据上 - 多种模型 - MNet2/3),并计算共识值(即对于每个图像,通过某些iou阈值匹配每个类别的检测结果,然后平均得分)。由于我有每日新数据流(鸟类摄像头),我会在新数据上“调整”这个联合体,然后将其应用于训练数据并考虑结果。这已经有效地发现了一些错误图像 - 我还不知道这种技术是否会提供除清除明显错误之外的有用结果。 - Alaric Dobson
@eerick 总体目的是将训练数据组织成一个教学大纲(请参见我上面的评论)。 - Alaric Dobson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接