Tensorflow对象检测API低损耗低置信度-检查点无法节省权重

问题描述

几个月前,我使用stanforddet_d0_512x512和仅两类成功的狗对斯坦福犬进行了自定义对象检测器训练。不更改代码,我再次尝试这样做,尽管训练过程中的损失很低,但是该模型却抽出了非常低的置信度得分(

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

我还尝试使用更快的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"

,以便在微调中使用加载的检查点,并且类数不会在您的配置文件和您开始的配置文件之间引起问题。 它还建议要小心,而出于相同的原因,而您的modeldir(将保存自定义检查点和tensorboard事件的位置)为空还是出于空白,但这似乎对您的colab笔记本很满意。

在另一个主题上,您也应该注意学习率,现在使用的是cosine_decay_learning_rate,它需要一些预热步骤,在这种情况下为2500。但是,您仅使用800,因此在停止训练时预热步骤无法完成!如果出于某种原因要保持较低的步数,则应将学习率更改为manual_step_learning_rate或exponential_decay_learning率。否则,您应该使训练持续更长的时间。

编辑:经过进一步调查,该问题可能在github上的问题更加严重:https://github.com/tensorflow/models/issues/9229 您可能需要关注此情况,以了解发生的情况。