TF2对象检测API:model_main_tf2.py-验证丢失?

问题描述

过去2个月,我一直在尝试训练对象检测模型,并通过遵循此tutorial终于成功。

这是我的colab,其中包含我的所有作品。

问题是,显示了训练损失,并且平均在减少,但是没有验证损失。

pipeline.config文件中,我确实输入了评估TFRecord文件(我假设它是验证数据输入),如下所示:

eval_config {

metrics_set:“ coco_detection_metrics”

use_moving_averages:假

}

eval_input_reader {

label_map_path:“注释/label_map.pbtxt”

随机播放:false

num_epochs:1

tf_record_input_reader {

input_path:“注释/测试记录”

}

}

我通读了model_main_tf2.py,它似乎在训练时不会评估,而只会在提到checkpoint_dir时评估。

因此,我只能监视训练集上的损失,而不能监视验证集上的损失。

结果,我不知道是否合适。

您有没有人成功使用model_main_tf2.py查看验证丢失?

此外,很高兴在训练中看到mAP分数。

我知道keras训练允许在张量板上看到所有这些内容,但是OD API似乎要困难得多。

感谢您的时间,如果您仍然对某些事情感到困惑,请告诉我。

解决方法

您必须打开另一个终端,然后运行此命令

python model_main_tf2.py \
   --model_dir=models/my_ssd_resnet50_v1_fpn \
   --pipeline_config_path=models/my_ssd_resnet50_v1_fpn/pipeline.config \
   --checkpoint_dir=models/my_ssd_resnet50_v1_fpn

API tutorial在该主题上不清楚。我有完全一样的问题。

事实证明,评估过程未包含在训练循环中,您必须以并行方式启动它。

它将等待并说出waiting for new checkpoint,这意味着您将使用以下内容开始培训:

python model_main_tf2.py --model_dir=models/my_ssd_resnet50_v1_fpn --pipeline_config_path=models/my_ssd_resnet50_v1_fpn/pipeline.config # note that the checkpoint_dir argument is not there

您的eval_interval_secs中的每个eval_config将运行一次评估。

根据文档,评估指标将存储在eval_0目录中您的检查点旁边,然后您就可以在tensorboard中进行绘制。

我同意这很难理解,因为它在文档中不是很清楚,并且也不太方便,因为我不得不分配另一个GPU进行评估以避免CUDA内存不足的问题

祝你有美好的一天