我正在尝试在本地运行对象检测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
什么可能导致此警告?
为什么代码似乎卡住了?
请帮助!
答案 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)
答案 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
解决了该问题。