首页 > 解决方案 > Tensorflow.js 导入冻结模型导致缺少 dict 值 ImageTensor 错误

问题描述

我使用 tensorflowjs-converter 导出了预训练的 deeplab v3 模型。我找到了 output_node_name 并使用以下命令来量化和导出模型

tensorflowjs_converter --input_format=tf_frozen_model --output_node_names='SemanticPredictions' --quantization_bytes 1 --saved_model_tags=serve frozen_inference_graph.pb deeplab_web_model_quant

模型被导出,我有以下目录结构

-rw-rw-r-- 1 ubuntu ubuntu 4194304 Jan 28 20:41 group1-shard1of10
-rw-rw-r-- 1 ubuntu ubuntu 4194304 Jan 28 20:41 group1-shard2of10
-rw-rw-r-- 1 ubuntu ubuntu 4194304 Jan 28 20:41 group1-shard3of10
-rw-rw-r-- 1 ubuntu ubuntu 4194304 Jan 28 20:41 group1-shard4of10
-rw-rw-r-- 1 ubuntu ubuntu 4194304 Jan 28 20:41 group1-shard5of10
-rw-rw-r-- 1 ubuntu ubuntu 4194304 Jan 28 20:41 group1-shard6of10
-rw-rw-r-- 1 ubuntu ubuntu 4194304 Jan 28 20:41 group1-shard7of10
-rw-rw-r-- 1 ubuntu ubuntu 4194304 Jan 28 20:41 group1-shard8of10
-rw-rw-r-- 1 ubuntu ubuntu 4194304 Jan 28 20:41 group1-shard9of10
-rw-rw-r-- 1 ubuntu ubuntu 3257567 Jan 28 20:41 group1-shard10of10
-rw-rw-r-- 1 ubuntu ubuntu   94668 Jan 28 20:41 weights_manifest.json
-rw-rw-r-- 1 ubuntu ubuntu  263831 Jan 28 20:41 tensorflowjs_model.pb

所以我在本地压缩这个目录传输并使用以下内容加载导出的模型

const model = await tf.loadFrozenModel(
    'http://localhost:8080/tensorflowjs_model.pb',
    'http://localhost:8080/weights_manifest.json');

我得到一个像这样的奇怪错误:

graph_executor.ts:382 Uncaught (in promise) Error: The dict provided in model.execute(dict) has the keys [], but is missing the required keys: [ImageTensor].
    at e.checkInput (graph_executor.ts:382)
    at e.execute (graph_executor.ts:148)
    at e.execute_ (frozen_model.ts:204)
    at e.predict (frozen_model.ts:155)
    at HTMLButtonElement.runButton.onclick (index.js:13)

我更深入地研究了这个 ImageTensor 的全部内容。它在模型中被列为输入张量名称。但是,在导出时只能指定 output_node_names。反正有调试这个吗?我不知道如何继续,因为错误消息并没有透露太多。

谢谢大家的帮助。

标签: tensorflowtensorflow.js

解决方案


FrozenModel 中的 predict 方法具有以下签名:

predict(
  inputs: tfc.Tensor|tfc.Tensor[]|tfc.NamedTensorMap,
  config?: tfc.ModelPredictConfig): tfc.Tensor
  |tfc.Tensor[]|tfc.NamedTensorMap

你需要在调用 predict 方法时提供输入的张量作为第一个参数,这个值应该与你的 python 模型的 ImageTensor 定义相对应。


推荐阅读