Estimator的model_fn包含params参数,但不会将参数传递给Estimator

时间:2018-09-04 09:03:12

标签: tensorflow object-detection object-detection-api

我正在尝试在本地运行对象检测API。

我相信我已经按照TensorFlow Object Detection API文档中所述进行了所有设置,但是,当我尝试运行model_main.py时,将显示此警告,并且模型无法训练。 (我真的不能确定模型是否在训练中,因为该过程并未终止,但是没有进一步的日志出现)

  

警告:tensorflow:估计器的model_fn(.model_fn位于0x0000024BDBB3D158>)包括   params参数,但不会将参数传递给Estimator。

我要传递的代码是:

python tensorflow-models/research/object_detection/model_main.py \
--model_dir=training \
--pipeline_config_path=ssd_mobilenet_v1_coco.config \
--checkpoint_dir=ssd_mobilenet_v1_coco_2017_11_17/model.ckpt \
--num_tain_steps=2000 \
--num_eval_steps=200 \
--alsologtostderr

什么可能导致此警告?

为什么代码似乎卡住了?

请帮助!

5 个答案:

答案 0 :(得分:9)

我遇到了同样的问题,并且发现此警告与模型无法正常工作的问题无关。我可以使模型正常工作,如警告所示。

我的错误是我误解了running_locally.md文档中的这一行

“ $ {MODEL_DIR}指向将在其中写入训练检查点和事件的目录”

我将MODEL_DIR更改为{project directory}/models/model,其中目录结构为:

+data
  -label_map file
  -train TFRecord file
  -eval TFRecord file
+models
  + model
    -pipeline config file
    +train
    +eval

它奏效了。希望这可以为您提供帮助。

编辑:,尽管这可能可行,但是在这种情况下,model_dir不包含任何已保存的检查点文件,如果您在保存一些检查点文件后停止训练并再次重新启动,则该训练仍然会被跳过。 doc指定了推荐目录结构,但不必与tfrecord的所有路径都具有相同的结构,可以在配置文件中配置预训练的检查点。

实际原因是当model_dir包含已经到达NUM_TRAIN_STEP的检查点文件时,脚本将假定训练已完成并退出。删除检查点文件,然后重新开始培训即可。

答案 1 :(得分:1)

在我的情况下,我遇到了同样的错误,因为我在.cpkt文件所在的文件夹中,也有预训练模型的检查点。

删除该文件位于.tar.gz文件中,培训工作正常。

enter image description here

答案 2 :(得分:0)

您的脚本似乎不错。 我们应该注意的一件事是,新的model_main.py将不会打印训练日志(例如训练步骤,lr,损失等)。它只会在一次或多次发生之后打印评估结果,这将是好久了。
因此,“该过程没有终止,但是没有进一步的日志出现”是正常的。您可以使用“ nvidia-smi”检查gpu情况,或使用tensorboard检查它的运行状态。

答案 3 :(得分:0)

我也收到此错误,这是因为我以前在不同的数据集/模型/配置文件上训练了模型,并且以前的ckpt文件仍然存在于我正在使用的目录中,因此移动了旧的ckpt训练数据到另一个目录解决了问题

答案 4 :(得分:0)

我也遇到了此警告消息。我检查了nvidia-smi,看来培训还没有开始。还尝试重新组织输出目录,但没有成功。检出Configuring the Object Detection Training Pipeline (tensorflow official)后,我发现这是配置问题。通过添加load_all_detection_checkpoint_vars: true解决了该问题。