0

我正在尝试使用 tensorflow.js 来预测来自预训练对象检测模型的输出,但是我收到了错误,model.predict(inputImage)其中是

Uncaught (in promise) 错误:输入张量计数不匹配,图模型有 425 个占位符,而输入张量有 1 个。

我正在使用
- tensorflowjs 版本 - 1.0.1
- tensorflow - 2.0.0-dev20190404

html " https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.4 "

我正在使用 SSD_Mobilenet_V2 模型并从“ http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz ”下载它

我使用此命令将 tf 模型转换为 web 格式

tensorflowjs_converter --input_format tf_saved_model ./saved_model ./tfjs_saved_modelSSDMobilenetV2

在这行 javascript 代码中出现错误:

const boxes = await model.predict(processedImage);

处理后的图像是形状为 (300,300,3) 的 tf.tensor3d。

4

3 回答 3

1

这似乎与此处的 GitHub 问题有关 -有关背景信息,另请参阅此处的GitHub 问题。

幸运的是,解决方案很简单:您只需要在调用时手动指定输入和输出节点即可。我在这里使用模型 tensorflowjs 1.2.10.1 和 tfjs 1.2.10 对此进行了测试。

    let outputs = await model.executeAsync(
        { 'image_tensor' : tf.zeros([1, 300, 300, 3]) },
        [ 'detection_boxes','detection_scores','detection_classes','num_detections']);
    tf.print(outputs);

这会产生以下没有错误的结果:

Tensor
    [[[0, 0, 0, 0],
      [0, 0, 0, 0],
      [0, 0, 0, 0],
      ...,
      [0, 0, 0, 0],
      [0, 0, 0, 0],
      [0, 0, 0, 0]]],Tensor
     [[0, 0, 0, ..., 0, 0, 0],],Tensor
     [[1, 1, 1, ..., 1, 1, 1],],Tensor
    [0]

祝你好运!

于 2019-10-24T06:03:13.323 回答
0

coco-ssd使用 (1, 300, 300, 3) 作为形状:https ://github.com/tensorflow/tfjs-models/blob/master/coco-ssd/src/index.ts

也许这就是问题所在?

于 2019-06-21T01:31:31.320 回答
0

我们有同样的错误。目前我们猜测:

  • 这与该模型最初是使用 tensorflow 1.x 训练的事实有关,而 tensorflowjs 现在使用其转换器 tensorflow 2.0-alpha 加载。
  • 反省 model.json 我们发现很多“unused_control_flow_input_”可能与仅用于训练目的的输入张量有关。

但是,我们只是猜测,没有文档。tensorflow 平台的可互换性对于任何实际的生产部署都非常重要,但在这里我们确实遗漏了很多信息。

于 2019-05-09T07:59:58.427 回答