【问题标题】:Tensorflow object detection API: How to disable loading from checkpointTensorflow 对象检测 API:如何禁用从检查点加载
【发布时间】:2018-10-26 01:02:05
【问题描述】:

我通过将research/slim/nets/mobilenet/mobilenet_v2.pytensorflow/models 存储库中的expansion_size 从6 更改为4,创建了MobileNetV2 特征提取器架构的自定义变体。

我希望能够使用 model_main.py 脚本训练 SSD + Mobilenet_v2(进行此更改)模型,如对象检测 API 的 running_locally tutorial 中所述。

当我这样做时,我看到以下错误,这是有道理的:

`InvalidArgumentError (see above for traceback): Restoring from checkpoint failed. This is most likely due to a mismatch between the current graph and the graph from the checkpoint. Please ensure that you have not altered the graph expected based on the checkpoint.

解决这个问题:

  1. 我从pipeline.config 中删除了finetune_checkpoint 规范。
  2. 我在object_detection/model_hparams.py 中将load_pretrained=True 更改为load_pretrained=False
  3. 我将--hparams_overrides='load_pretrained=false' 作为命令行输入参数添加到model_main.py

尽管如此,我仍然看到同样的错误。

为什么 tensorflow 仍在尝试恢复检查点。我怎样才能让它不这样做?

【问题讨论】:

    标签: python tensorflow object-detection-api


    【解决方案1】:

    自己找到了解决方案。事实证明,即使我已经安排它不从我的管道配置文件中恢复检查点,但内部tf.Estimator 对象仍然可以使用指定的model_dir 中的检查点;尽管model_dir 的主要用途是作为输出目录,输出检查点被写入其中。

    我在official documentation for tf.Estimator 中找到了此信息。以下是相关摘录供参考:

    `model_dir:保存模型参数、图形等的目录。这也可用于将检查点从目录加载到估计器中,以继续训练先前保存的模型。如果是 PathLike 对象,则路径将被解析。如果设置为 None,则将使用 config 中的 model_dir。如果两者都设置,则它们必须相同。如果两者都为 None,则将使用临时目录。

    我原来的model_dir 中有一个旧检查点,它在架构上与我的自定义模型不兼容。因此我看到了错误。为了解决这个问题,我只是将我的model_dir 更改为指向一个新的空目录,它就可以工作了。我希望这对有类似问题的人有所帮助。

    【讨论】:

    • 谢谢@bappak。我花了很多时间试图找出问题所在。这种行为在 TFOD API 中没有明确说明,我相信这会导致很多人偶然发现这个问题,想知道发生了什么。
    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 2020-05-31
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2021-12-05
    • 2021-06-14
    相关资源
    最近更新 更多