我正在尝试使用tensorflow.js来预测经过预训练的对象检测模型的输出,但是在model.predict(inputImage)
中出现错误,即
未捕获(承诺)错误:输入张量计数不匹配,图形模型有425个占位符,而输入张量有1个。
我正在使用
-tensorflowjs版本-1.0.1
-张量流-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);
处理后的图像的形状为tf.tensor3d(300,300,3)。
答案 0 :(得分:0)
我们有相同的错误。目前,我们猜测:
但是,我们只是猜测而已,没有文档。 tensorflow平台的可互换性对于任何实际的生产部署都非常重要,但是在这里我们确实缺少许多信息。
答案 1 :(得分:0)
coco-ssd
使用(1、300、300、3)来表示形状:https://github.com/tensorflow/tfjs-models/blob/master/coco-ssd/src/index.ts
也许是问题所在?
答案 2 :(得分:0)
这似乎与GitHub issue here有关-有关背景信息,另请参见GitHub issue here。
幸运的是,解决方案很简单:您只需在进行调用时手动指定输入和输出节点即可。我在这里使用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]
祝你好运!