Tensorflow无限期地运行"Running per image evaluation"



我现在正在使用tensorflow API运行我的第一个tensorflow作业(对象检测训练(。我正在使用来自模型动物园的SSD移动网络网络。我使用>>ssd_mobilenet_v1_0.75_depth_quantized_300x300_coco14_sync.config<<作为配置文件,并作为微调检查点>>ssd_mobilenet_v1_0.75_depth_300x300_coco14_sync_2018_07_03<<检查点。

我使用以下命令开始训练:

PIPELINE_CONFIG_PATH='/my_path_to_tensorflow/tensorflow/models/research/object_detection/models/model/ssd_mobilenet_v1_0.75_depth_quantized_300x300_coco14_sync.config'
MODEL_DIR='/my_path_to_tensorflow/tensorflow/models/research/object_detection/models/model/train'
NUM_TRAIN_STEPS=200000
SAMPLE_1_OF_N_EVAL_EXAMPLES=1
python object_detection/model_main.py 
--pipeline_config_path=${PIPELINE_CONFIG_PATH} 
--model_dir=${MODEL_DIR} 
--num_train_steps=${NUM_TRAIN_STEPS} 
--sample_1_of_n_eval_examples=$SAMPLE_1_OF_N_EVAL_EXAMPLES 
--alsologtostderr

没有来我的问题,我希望社区可以帮助我。我花了一夜时间训练网络,它训练了1400步,然后开始评估每张图像,该图像运行了整夜。第二天早上我看到,那个网络只评估了,训练仍然是 1400 步。您可以在下图中看到部分控制台输出。

评估的控制台输出

我尝试通过使用配置文件中的 eval 配置参数来控制。

eval_config: {
metrics_set: "coco_detection_metrics"
use_moving_averages: false
num_examples: 5000
}

我添加了 max_evals = 1,因为文档说我可以像这样限制评估。我还更改了 eval_interval_secs = 3600,因为我每小时只想要一个评估。这两种选择都没有效果。

我还尝试了 modelzoo 中的其他配置文件,但没有运气。我在谷歌上搜索了几个小时,只是为了找到答案,告诉我更改我已经更改的参数。所以我来堆栈溢出寻求这件事的帮助。

谁能帮助我,也许有同样的经历?提前感谢您的所有帮助!

环境信息

$ pip freeze | grep tensor
tensorboard==1.11.0
tensorflow==1.11.0
tensorflow-gpu==1.11.0
$ python -V
Python 2.7.12

我想出了这个问题的解决方案。tensorflow 1.10 及之后的问题是,您无法像以前一样在配置文件中设置检查点步骤或检查点秒。默认情况下,tensorflow 1.10 及之后每 10 分钟保存一次检查点。如果您的硬件速度不够快,并且您需要 10 分钟以上的评估时间,那么您就会陷入循环。

因此,要更改时间步长或训练步骤,直到新的检查点被保护(触发评估(,您必须导航到以下文件夹中的model_main.py:

张量流/模型/研究/object_detection/

打开model_main.py后,导航到第 62 行。在这里你会发现

config = tf.estimator.RunConfig(model_dir=FLAGS.model_dir(

例如,要在 2500 步后触发检查点保存,请将条目更改为:

config = tf.estimator.RunConfig(model_dir=FLAGS.model_dir,save_checkpoints_steps=2500(.

现在,模型每 2500 步保存一次,然后完成评估。

您可以通过此选项传递多个参数。您可以在此处找到文档:

Tensorflow/

Tensorflow/contrib/learn/python/learn/estimators/run_config.py.

从第 231 行到 294 行,您可以看到参数和文档。

我希望我能帮助你解决这个问题,你不必像我一样寻找答案。

在您的情况下,评估可能需要 10 分钟以上吗?可能是由于 10 分钟是进行评估的默认间隔,因此它会继续评估。

遗憾的是,当前的 API 不容易支持更改评估的时间间隔。 默认情况下,评估在每次保存检查点后进行,默认情况下设置为 10 分钟。 因此,您可以通过指定save_checkpoint_secssave_checkpoint_steps作为 MonitoredSession(或 MonitoredTrainingSession(实例的输入来更改保存检查点的时间。不幸的是,据我所知,这些参数不能设置为model_main.py标志或配置文件中的标志。因此,您可以通过硬编码来更改它们的值,也可以将它们导出以使其可用。

另一种方法,在不更改保存检查点的频率的情况下,修改指定为throttle_secstf.estimator.EvalSpec的评估频率。 请参阅我在此处有关如何将此参数导出到model_main.py的说明。

最新更新