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

Ale*_*lex 8 object-detection tensorflow object-detection-api

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

这里有一些选择:

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

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

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

选项3:这似乎是最佳选择。采用原始模型,只专注于培训新事物。

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

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

Ala*_*son 3

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

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

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

选项 2 看起来相当安全并且更容易理解。当你说“算法可能会对早期图像进行更多加权”时,如果早期图像“好”,我不明白为什么这是一个问题。但是,我可以看到该域可能会随着时间的推移(进化)而改变,在这种情况下,您可能希望平衡旧图像的权重。据我所知,您可以修改训练数据来执行此问题中讨论的操作:

用于平衡 TensorFlow 对象检测 API 中的数据的类权重