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

Yas*_*ius 2 python object-detection tensorflow object-detection-api tensorflow2.0

过去 2 个月,我一直在尝试训练对象检测模型,最终按照本教程取得了成功。

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

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

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

评估配置{

指标集:“coco_detection_metrics”

use_moving_averages: 假

}

eval_input_reader {

label_map_path: "注释/label_map.pbtxt"

洗牌:假

num_epochs: 1

tf_record_input_reader {

输入路径:“注释/test.record”

}

}

我通读了model_main_tf2.py,它在训练时似乎没有评估,但只在提到 checkpoint_dir 时评估。

因此,我只能监控训练集上的损失,而无法监控验证集上的损失。

因此,我不知道过拟合或欠拟合。

你们中有人成功地使用 model_main_tf2.py 来查看验证损失吗?

此外,很高兴看到经过训练的 mAP 分数。

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

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

小智 6

您必须打开另一个终端并运行此命令

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
Run Code Online (Sandbox Code Playgroud)

API 教程在该主题上不清楚。我有完全相同的问题。

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

它会等待并说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 \
   --checkpoint_dir=models/my_ssd_resnet50_v1_fpn
Run Code Online (Sandbox Code Playgroud)

它将eval_interval_secs在您的eval_config.

根据文档,eval 指标将存储在 eval_0 目录中的检查点旁边,然后您将能够在张量板中绘制。

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

祝你今天过得愉快