Thö*_*lin 5 python tensorflow google-cloud-ml object-detection-api
我想在使用 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
Run Code Online (Sandbox Code Playgroud)
但是,在成功转移训练模型后,我想使用计算性能指标,例如 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`.')
Run Code Online (Sandbox Code Playgroud)
但是不知道这是否真的意味着model_main.py可以在独占评估模式下运行?如果是,我应该如何提交 ML-Engine 作业?
或者,Tensorflow API 中是否有任何函数允许我基于 COCO 和/或 Pascal mAP 评估现有的输出字典(包含边界框、类标签、分数)?如果有,我可以轻松地在本地读取 Tensorflow 记录文件,运行推理,然后评估输出字典。
我知道如何为评估数据集获取这些指标,这些指标是在 model_main.py 中训练期间进行评估的。但是,根据我的理解,我仍然应该在新的测试数据集上报告模型性能,因为我比较了多个模型并实施了一些超参数优化,因此我不应该报告评估数据集,对吗?更一般地说:我真的无法理解为什么要从单独的训练和评估(就像在遗留代码中一样)切换到组合的训练和评估脚本?
编辑:我找到了两个相关的帖子。但是,我认为所提供的答案并不完整:
如何在 tensorflow object_detection 中检查训练/评估性能
如何评估 Tensorflow 对象检测 api 中的预训练模型
后者是在 TF 的对象检测 API 仍有单独的评估和训练脚本时编写的。现在已经不是这样了。
非常感谢您的帮助。
小智 6
如果您将checkpoint_dir
和 设置run_once
为 true,则它应该在 eval 数据集上只运行一次评估。我相信指标将写入 model_dir 并且也应该出现在您的控制台日志中。我通常只是在我的本地机器上运行它(因为它只是对数据集进行一次传递)并且不是分布式作业。不幸的是,我还没有尝试在 CMLE 上运行这个特定的代码路径。
关于为什么我们有一个组合脚本......从对象检测 API 的角度来看,我们试图在 tf.Estimator 范式中编写东西---但是你是对的,我个人发现当这两个功能时它更容易一些住在不同的二进制文件中。如果需要,您始终可以将此功能包装在另一个二进制文件中 :)
归档时间: |
|
查看次数: |
5070 次 |
最近记录: |