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

问题描述 投票:2回答:1

我想在使用Google Cloud的新测试集上评估经过定制培训的Tensorflow对象检测模型。

我从以下地址获得了最初的检查站:qazxsw poi

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

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

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

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

然而,在我成功转移训练模型后,我想在新的测试数据集上使用计算性能指标,例如COCO mAP(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 )或PASCAL mAP(http://cocodataset.org/#detection-eval),这些数据集以前没有使用过(在训练期间也没有)在评估期间)。

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

http://host.robots.ox.ac.uk/pascal/VOC/pubs/everingham10.pdf

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

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

我知道如何获取评估数据集的这些指标,这些指标在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`.')

how to check both training/eval performances in tensorflow object_detection

后者是在TF的对象检测API仍然具有单独的评估和训练脚本时编写的。事实并非如此。

非常感谢您的帮助。

python tensorflow google-cloud-ml object-detection-api
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.