我想在使用Google Cloud的新测试集上评估经过定制培训的Tensorflow对象检测模型。
我从以下地址获得了最初的检查站:qazxsw poi
我知道Tensorflow对象检测API允许我通过以下方式同时运行训练和评估:
要开始这样的工作,我提交以下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仍然具有单独的评估和训练脚本时编写的。事实并非如此。
非常感谢您的帮助。
如果指定How to evaluate a pretrained model in Tensorflow object detection api并将checkpoint_dir
设置为true,那么它应该在eval数据集上运行一次评估。我相信度量标准将写入model_dir,并且还应出现在控制台日志中。我通常只在我的本地机器上运行它(因为它只是对数据集进行一次传递)并且不是分布式作业。不幸的是我没有尝试在CMLE上运行这个特定的代码路径。
关于为什么我们有一个组合脚本...从Object Detection API的角度来看,我们试图在tf.Estimator范例中编写东西---但你是对的,我个人觉得这两个功能更容易一些住在不同的二进制文件中。如果你愿意,你总是可以在另一个二进制文件中包含这个功能:)