如何在 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 中从头开始训练?的主要内容,如果未能解决你的问题,请参考以下文章