使用新图像更新 Tensorflow 对象检测模型

Updating Tensorflow Object detection model with new images

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

这里有几个备选方案:

  1. 将图像添加到以前的数据集并训练一个全新的模型
  2. 将图像添加到之前的数据集并继续训练之前的模型
  3. 只有新图像的新数据集并继续训练以前的模型

以下是我的想法: 选项 1:会更耗时,但会处理所有图像 "equally"。

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

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

其中之一明显更好吗?每个的 pros/cons 是多少?

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

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

对于不完美的数据集,新图像的结果会显示(一些)错误,这些错误适合进一步训练。但是数据集中可能已经有 "bad" 个图像,最好删除这些图像。这表明选项 1 必须按照某个时间表发生,以完全消除 "bad" 图像的影响。

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

选项 2 似乎很安全并且更容易理解。当您说 "the algorithm might be weighting the earlier images more" 时,如果较早的图像是 "good",我不明白为什么这是个问题。但是,我可以看到域可能会随着时间的推移而改变(进化),在这种情况下,您可能希望平衡旧图像的权重。我知道您可以修改训练数据来做到这一点,正如这个问题中所讨论的那样:

Class weights for balancing data in TensorFlow Object Detection API