gpt4 book ai didi

python - 如何仅在评估模式下运行 TF 对象检测 API model_main.py

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:50 25 4
gpt4 key购买 nike

我想使用 Google Cloud 在新测试集上评估自定义训练的 Tensorflow 对象检测模型。

我从以下位置获得了初始检查点: https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

我知道 Tensorflow 对象检测 API 允许我使用以下方法同时运行训练和评估:

https://github.com/tensorflow/models/blob/master/research/object_detection/model_main.py

为了开始这样的工作,我提交了以下 ml-engine 工作:

gcloud ml-engine jobs submit training [JOBNAME] 
--runtime-version 1.9
--job-dir=gs://path_to_bucket/model-dir
--packages dist/object_detection-
0.1.tar.gz,slim/dist/slim-0.1.tar.gz,pycocotools-2.0.tar.gz
--module-name object_detection.model_main
--region us-central1
--config object_detection/samples/cloud/cloud.yml
--
--model_dir=gs://path_to_bucket/model_dir
--pipeline_config_path=gs://path_to_bucket/data/model.config

然而,在我成功地对模型进行迁移训练后,我想在一个新的测试数据集上使用计算性能指标,例如 COCO mAP( http://cocodataset.org/#detection-eval ) 或 PASCAL mAP ( http://host.robots.ox.ac.uk/pascal/VOC/pubs/everingham10.pdf )以前使用过(既没有在训练期间也没有在评估期间)。

我已经看到,model_main.py 中可能有标志:

flags.DEFINE_string(
'checkpoint_dir', None, 'Path to directory holding a checkpoint. If '
'`checkpoint_dir` is provided, this binary operates in eval-only
mode, '
'writing resulting metrics to `model_dir`.')

但我不知道这是否真的意味着 model_main.py 可以在独占评估模式下运行?如果是,我应该如何提交ML-Engine作业?

或者,Tensorflow API 中是否有任何函数允许我基于 COCO 和/或 Pascal mAP 评估现有的输出字典(包含边界框、类标签、分数)?如果有,我可以轻松地在本地读取 Tensorflow 记录文件,运行推理,然后评估输出字典。

我知道如何为评估数据集获取这些指标,这些指标是在 model_main.py 中训练期间评估的。但是,根据我的理解,我仍然应该报告新测试数据集上的模型性能,因为我比较了多个模型并实现了一些超参数优化,因此我不应该报告评估数据集,对吗?更笼统地说:我真的无法理解为什么要从单独的培训和评估(因为它在遗留代码中)切换到组合的培训和评估脚本?

编辑:我找到了两个相关的帖子。但是我不认为提供的答案是完整的:

how to check both training/eval performances in tensorflow object_detection

How to evaluate a pretrained model in Tensorflow object detection api

后者是在 TF 的对象检测 API 仍然具有单独的评估和训练脚本时编写的。情况已不再如此。

非常感谢您的帮助。

最佳答案

如果您指定 checkpoint_dir 并将 run_once 设置为 true,那么它应该在 eval 数据集上只运行一次评估。我相信指标将写入 model_dir 并且也应该出现在您的控制台日志中。我通常只是在我的本地机器上运行它(因为它只是对数据集进行一次传递)并且不是分布式作业。不幸的是,我还没有尝试在 CMLE 上运行这个特定的代码路径。

关于为什么我们有一个组合脚本......从对象检测 API 的角度来看,我们试图在 tf.Estimator 范例中编写东西 --- 但你是对的,我个人觉得当这两个功能存在于不同的二进制文件中。如果你愿意,你总是可以把这个功能包装在另一个二进制文件中:)

关于python - 如何仅在评估模式下运行 TF 对象检测 API model_main.py,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55455824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com