首页 > 解决方案 > 使用新图像更新 TensorFlow 对象检测模型

问题描述

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

以下是一些替代方案:

  1. 将图像添加到以前的数据集并训练一个全新的模型
  2. 将图像添加到先前的数据集并继续训练先前的模型
  3. 仅包含新图像的新数据集并继续训练以前的模型

以下是我的想法:选项 1:会更耗时,但所有图像都会被“平等”对待。

选项 2:希望减少额外的训练时间,但一个问题是该算法可能会更多地加权较早的图像。

选项 3:这似乎是最好的选择。采用原始模型,只专注于训练新东西。

其中之一明显更好吗?每个的优点/缺点是什么?

此外,我想知道是否最好保留一个测试集作为准确性控制,或者每次创建一个包含更新图像的新集。也许将新图像的一部分添加到模型中,将另一部分添加到测试集,然后将旧的测试集图像反馈回模型(或将它们丢弃)?

标签: tensorflowobject-detectionobject-detection-api

解决方案


考虑您的数据集几乎完美的情况。如果您在新图像上运行模型(每周收集),那么结果(即带有分数的框)将正是您想要从模型中得到的结果,将这些添加到数据集中是没有意义的,因为模型不会学习任何新的东西.

对于不完美的数据集,新图像的结果将显示(一些)错误,这些错误适合进一步训练。但是数据集中可能已经存在“坏”图像,因此需要删除这些图像。这表明选项 1 必须按某个时间表发生,以完全消除“坏”图像的影响。

在较短的时间表上,如果新图像在域类别之间合理平衡(在某种意义上是先前数据集的代表性子集),则选项 3 是合适的。

选项 2 看起来很安全,也更容易理解。当您说“算法可能更多地加权早期图像”时,如果早期图像“好”,我不明白为什么这是一个问题。但是,我可以看到域可能会随着时间(演变)而变化,在这种情况下,您可能希望抵消旧图像的权重。我知道您可以修改训练数据来做到这一点,正如这个问题中所讨论的那样:

TensorFlow Object Detection API 中用于平衡数据的类权重


推荐阅读