Tensorflow 对象检测 API 低损失低置信度 - 检查点不保存权重

Tensorflow Object Detection API low loss low confidence - checkpoint not saving weights

几个月前,我使用 efficientdet_d0_512x512 在斯坦福狗上训练了一个自定义对象检测器,只有 2 类 只狗成功了。在不更改代码的情况下,我再次尝试这样做,尽管训练过程中的损失很低,但模型的置信度分数非常低 (<1%)。

然后我尝试使用初始训练后生成的检查点恢复训练,损失开始很高,就好像检查点不存在一样。

我也尝试过使用更快的 rcnn,得到了相同的结果。这是代码: https://colab.research.google.com/drive/1fE3TYRyRrvKI2sVSQOPUaOzA9JItkuFL?usp=sharing

我在想导出不工作,训练的权重没有保存。有什么想法吗?

您收到的许多警告似乎确实无法加载您的检查点:

WARNING:tensorflow:Unresolved object in checkpoint: 
(root). .......

经过一些研究,我在 Tensorflow 对象检测的模型存储库中发现了这个问题 API:https://github.com/tensorflow/models/issues/8892#issuecomment-680207038

基本上是说你应该改变 :

 fine_tune_checkpoint_type = "detection"

至:

fine_tune_checkpoint_type = "fine_tune"

这样加载的检查点将在 fine-tuning 中使用,并且 类 的数量不会导致您的配置文件和您开始使用的配置文件之间出现问题。 它还建议要小心,而你的 modeldir(自定义检查点和张量板事件将被保存的地方)是空的或不是出于同样的原因,但你似乎在你的 colab 笔记本上很擅长。

同样在不同的主题上,您应该注意您的学习率,现在您使用的是 cosine_decay_learning_rate,这需要一些预热步骤,在这种情况下为 2500。但是,您只使用了 800,因此当您停止训练时,热身步骤并未完成!如果出于某种原因你想保持较低的步数,你应该将学习率更改为 manual_step_learning_rate 或 exponential_decay_learning 率。否则你应该继续训练更长时间。

编辑:经过进一步调查,问题可能会更深入一些 github:https://github.com/tensorflow/models/issues/9229 你可能想关注这个以了解它的发展方向。