gpt4 book ai didi

tensorflow - 如何在使用 model_main 进行训练的同时连续评估 tensorflow 对象检测模型

转载 作者:行者123 更新时间:2023-12-04 00:08:36 24 4
gpt4 key购买 nike

我使用 train.pyeval.py 成功训练了带有自定义示例的对象检测模型。并行运行这两个程序,我能够在训练期间在 tensorboard 中可视化训练和评估指标。

然而,这两个程序都被移到了 legacy 文件夹,而 model_main.py 似乎是运行训练和评估的首选方式(通过只执行一个过程)。但是,当我使用以下 model_main.py 开始 pipeline.config 时:

train_config {
batch_size: 1
num_steps: 40000
...
}
eval_config {
# entire evaluation set
num_examples: 821
# for continuous evaluation
max_evals: 0
...
}

我在 model_main.py 的输出中看到启用 INFO 日志,训练和评估是按顺序执行的(而不是像以前那样同时执行两个进程),并且在每个训练步骤之后都会进行完整的评估。
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 35932: ...
INFO:tensorflow:Saving checkpoints for 35933 into ...
INFO:tensorflow:Calling model_fn.
...
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-08-30-10:06:47
...
INFO:tensorflow:Restoring parameters from .../model.ckpt-35933
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [82/821]
...
INFO:tensorflow:Evaluation [738/821]
INFO:tensorflow:Evaluation [820/821]
INFO:tensorflow:Evaluation [821/821]
...
INFO:tensorflow:Finished evaluation at 2018-08-30-10:29:35
INFO:tensorflow:Saving dict for global step 35933: ...
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 35933: .../model.ckpt-35933
INFO:tensorflow:Saving checkpoints for 35934 into .../model.ckpt.
INFO:tensorflow:Calling model_fn.
...
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-08-30-10:29:56
...
INFO:tensorflow:Restoring parameters from .../model.ckpt-35934

这当然会以几乎没有任何进展的方式减慢训练速度。当我使用 model_main 的命令行参数 --num_eval_steps 将评估步骤减少到 1 时,训练和以前一样快(使用 train.pyeval.py ),但是评估指标变得无用(例如 DetectionBoxes_Precision/mAP... 变为常量并具有类似 10 甚至 -1 的值)。对我来说,它似乎只为同一幅图像不断计算这些值。

那么,启动 model_main.py 的正确方法是什么,才能取得合理的快速进展,并并行计算整个评估集的评估指标。

最佳答案

在training.py 中有一个类EvalSpec在 main_lib.py 中调用。
它的构造函数有一个名为 throttle_secs 的参数。它设置了后续评估之间的间隔,默认值为 600,它在 model_lib.py 中永远不会获得不同的值。
如果你有你想要的特定值,你可以简单地改变默认值,
但更好的做法当然是将它作为 model_main.py 的参数传递给 EvalSpec通过model_lib.py。

更详细地,将其设置为另一个输入标志flags.DEFINE_integer('throttle_secs', <DEFAULT_VALUE>, 'EXPLANATION') ,
然后throttle_secs=FLAGS.throttle_secs ,
然后更改 model_lib.create_train_and_eval_specs也收到 throttle_secs ,并在其中,将其添加到 tf.estimator.EvalSpec 的调用中.

编辑:
我发现你也可以设置 eval_interval_secs在 .config 文件的 eval_config 中。如果这有效(并非所有标志都受支持,因为它们从 eval.py 移动到 model_main.py) - 这显然是一个更简单的解决方案。如果没有 - 使用上面的解决方案。

EDIT2:我尝试使用 eval_interval_secs在 eval_config 中,它不起作用,因此您应该使用第一个解决方案。

关于tensorflow - 如何在使用 model_main 进行训练的同时连续评估 tensorflow 对象检测模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52099724/

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