如何在 TensorFlow 对象检测 API 中从头开始训练?

Posted

技术标签:

【中文标题】如何在 TensorFlow 对象检测 API 中从头开始训练?【英文标题】:How to train from scratch in TensorFlow object detection API? 【发布时间】:2018-08-12 15:59:56 【问题描述】:

github 问题2446 说如果我们想从头开始训练,我们需要在model.config评论这一行:

#fine_tune_checkpoint: "PATH_TO_BE_CONFIGURED/model.ckpt"
from_detection_checkpoint: true

我关注了这个问题并评论了这一行,以便在我自己的数据集中训练 SSD_mobilenet。 可以训练,损失可以减少,但准确率保持在0.0

我之前在模型动物园的预训练模型上使用了对象检测api,它在mAP=90%时运行良好,这两个任务之间的唯一区别是model.config中的注释行。

我想知道如何使用 TensorFlow 中的对象检测 api 从头开始​​训练检测模型。谢谢!

【问题讨论】:

你得到答案了吗? 【参考方案1】:

我建议您继续微调您的模型,而不是从头开始训练它。从头开始训练模型需要更多的计算时间来使模型收敛,这意味着您再次从随机权重开始并调整它们直到它们收敛,这最终会收敛,但收敛的时间可能是一周或一个月因为它是一个大型神经网络。

在微调中,您将使用以前的权重,但您将根据自己的数据集对其进行微调,最终结果是您的模型可以帮助您在自己的数据集中进行检测。最终模型也或多或少是从头开始训练的结果,因为该模型仅适用于您的新数据集和新类。

【讨论】:

谢谢!在我提出这个问题并继续训练模型后,准确率在提高,但仍低于在相同训练步骤中微调模型。 当然,调整权重需要更长的时间,但在一个实例中你会得到很好的准确性。如果你厌倦了持续的训练,可以通过之前训练的检查点来训练它,那么它可能会很容易。感谢您接受答案。 @olive_tree,不,我不建议这样做。微调模型总是更好。从头开始训练会消耗大量时间和资源,因此我强烈建议您从微调开始。此外,您将以两种方式获得的最终精度和精度将或多或少相同。希望对你有帮助 @willSapgreen 我真的很抱歉耽搁了。好吧,如果我没记错的话,根据您的描述,在我看来,您指的是迁移学习。通常注释fine_tune_checkpoint只会让流程从头开始 @olive_tree 很高兴您发现了从头开始训练的复杂性。您可以使用在 COCO 数据集上训练的模型,您应该认为深度网络是从图像中提取特征的网络,而不是模式匹配器。因此,即使您使用医学数据对 coco 预训练模型进行微调,理论上它也应该有效。

以上是关于如何在 TensorFlow 对象检测 API 中从头开始训练?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 tensorflow 对象检测 API 中使用“忽略”类?

如何在 TensorFlow 对象检测 API 中从头开始训练?

如何在 iOS 中运行 Tensorflow 对象检测 API 模型?

如何修改 ssd mobilenet 配置以使用 tensorflow 对象检测 API 检测小对象?

Tensorflow 对象检测 api:如何使用 imgaug 进行增强?

如何从代码运行 tensorflow 对象检测 api (model_main_tf2)?