Tensorflow 对象检测:使用新检测到的图像重新训练模型

Tensorflow Object Detection: Using new detected images to retrain model

我在这个论坛上搜索过类似的问题,但没有人回答 ()。我已经成功地创建了我的自定义火车模型(我们将其命名为 model1)。想知道我是否可以使用 model1 处理的新图像来进一步训练 model1?它会提高模型的准确性吗?

它可能会改善它,但它很棘手。这会导致过度拟合。改进数据集实际上会有所帮助,但对它自己的模型检测到的图像没有帮助。检测到此类图像是因为模型已经在这些图像上表现良好,所以帮助不大。

你实际需要的恰恰相反。您需要教模型识别它之前无法识别的图像

准确性将取决于正确分类的图像数量,而不仅仅是训练图像的总数。 https://developers.google.com/machine-learning/crash-course/classification/accuracy. If you consider that the new images are to be used for training (have correct labels), then you should consider re-training the model. Take a look at this post https://datascience.stackexchange.com/questions/12761/should-a-model-be-re-trained-if-new-observations-are-available

机器学习(即您在此处用于对象检测的方法)的主要问题是泛化。在您的情况下,它是在训练期间未使用的图像中识别与您用于训练的图像相同类型的对象的能力。

显然,如果您能够在训练期间使用所有可能的图像,您的系统将是完美的(实际上,这将是一个简单的精确图像匹配问题)。在更真实的设置中,您使用的训练图像越多,获得更好物体检测器的机会就越大。

通常,将 难样本 添加到您的训练集中更有价值。因此,如果您的应用程序允许(特别是在计算时间方面),您确实可以添加数据集中错误检测到的所有图像(带有正确的标签),这可能有助于获得更好的模型,能够检测新图像上的物体处于更硬的状态。

但是,这实际上取决于您在做什么。如果您想将您的系统与另一个系统进行比较,您需要使用相同的(训练和)测试图像才能公平。 为了进行基准测试,您不能在训练数据集中包含测试图像!当您计算准确度(在 validation/test 数据集上)以比较多个设置时,请确保您在此比较中是公平的。

您可以通过多种方式使用当前模型 (model1):

  • 在新图像上检测新训练的不良结果(困难示例)
  • 在新图像上检测好的评价结果​​
  • 在现有数据集中的图像上检测不良图像(错误的标签等)

新图像的一些不良结果将是非对象(对抗性)并且不能直接用于训练(但请参阅:https://github.com/tensorflow/models/issues/3578#issuecomment-375267920)。

从现有数据集中删除不良图像需要从头开始重新训练,除非有一些从模型中提取 "untraining" 图像的时髦方法。

最终,人们最终会接近一个完美的数据集,它充分利用了所选模型架构的容量,尽管该领域可能会随着时间的推移而发展。

我认为这个问题没有被广泛讨论的原因是因为大多数研究人员必须使用常见的数据集,以便他们可以比较他们的方法(精彩阅读:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5697567/)。