获取错误:TensorList形状不匹配:形状1和3必须使用tensorflowjs匹配

2024-10-01 02:32:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Google Colab上使用对象检测API训练了一个Mobilenet Tensorflow模型。完成培训后,我保存保存的模型并用Python运行该模型。该模型运行良好,能够按预期检测到目标

要将检查点转换为tensorflow保存的模型,请执行以下操作:

python /content/models/research/object_detection/exporter_main_v2.py \
    --trained_checkpoint_dir {model_dir} \
    --output_directory {output_directory} \
    --pipeline_config_path {pipeline_file}

我使用Python加载和预测模型,使用:

model = tf.keras.models.load_model("path....")


def run_inference_image(model, image):
    image = np.asarray(image)
    input_tensor = tf.convert_to_tensor(image)
    input_tensor = input_tensor[tf.newaxis, ...]
    output_dict = model(input_tensor)
    num_detections = int(output_dict.pop('num_detections'))
    output_dict = {key: value[0, :num_detections].numpy()
                   for key, value in output_dict.items()}
    output_dict['num_detections'] = num_detectionss.
    output_dict['detection_classes'] = output_dict['detection_classes'].astype(
        np.int64)
    return output_dict

要将模型转换为tensorflowjs,我将运行以下命令:

tensorflowjs_converter --control_flow_v2=True --input_format=tf_saved_model --metadata= --saved_model_tags=serve --signature_name=serving_default --strip_debug_ops=True --weight_shard_size_bytes=4194304 ./saved_model ./web_model

转换工作正常,不会引发任何错误

当我尝试使用tensorflowjs的模式时会出现问题:


    const model = await loadGraphModel("http://127.0.0.1:8080/model.json");
    // random image so I can test
    model.executeAsync(tf.zeros([1,320,320,3]).toInt()).then(predictions => {
      console.log(predictions)
      tf.engine().endScope();
    });

此时会引发异常:

util_base.js:107 Uncaught (in promise) Error: TensorList shape mismatch:  Shapes -1 and 3 must match
    at Module.assert (util_base.js:107)
    at assertShapesMatchAllowUndefinedSize (tensor_utils.js:26)
    at TensorList.setItem (tensor_list.js:239)
    at _callee2$ (control_executor.js:309)
    at tryCatch (runtime.js:63)
    at Generator.invoke [as _invoke] (runtime.js:282)
    at Generator.prototype.<computed> [as next] (runtime.js:116)
    at asyncGeneratorStep (asyncToGenerator.js:3)
    at _next (asyncToGenerator.js:25)
    at asyncToGenerator.js:32
    at new Promise (<anonymous>)
    at Module.<anonymous> (asyncToGenerator.js:21)
    at Module.executeOp (control_executor.js:411)
    at operation_executor.js:59
    at executeOp (operation_executor.js:139)
    at _loop (graph_executor.js:543)
    at GraphExecutor.processStack (graph_executor.js:579)
    at GraphExecutor._callee4$ (graph_executor.js:469)
    at tryCatch (runtime.js:63)
    at Generator.invoke [as _invoke] (runtime.js:282)
    at Generator.prototype.<computed> [as next] (runtime.js:116)
    at asyncGeneratorStep (asyncToGenerator.js:3)
    at _next (asyncToGenerator.js:25)
    at asyncToGenerator.js:32
    at new Promise (<anonymous>)
    at GraphExecutor.<anonymous> (asyncToGenerator.js:21)
    at GraphExecutor.executeWithControlFlow (graph_executor.js:513)
    at GraphExecutor._callee2$ (graph_executor.js:326)
    at tryCatch (runtime.js:63)
    at Generator.invoke [as _invoke] (runtime.js:282)
    at Generator.prototype.<computed> [as next] (runtime.js:116)
    at asyncGeneratorStep (asyncToGenerator.js:3)
    at _next (asyncToGenerator.js:25)
    at asyncToGenerator.js:32
    at new Promise (<anonymous>)
    at GraphExecutor.<anonymous> (asyncToGenerator.js:21)
    at GraphExecutor._executeAsync (graph_executor.js:365)
    at GraphExecutor._callee3$ (graph_executor.js:385)
    at tryCatch (runtime.js:63)
    at Generator.invoke [as _invoke] (runtime.js:282)
    at Generator.prototype.<computed> [as next] (runtime.js:116)
    at asyncGeneratorStep (asyncToGenerator.js:3)
    at _next (asyncToGenerator.js:25)
    at asyncToGenerator.js:32
    at new Promise (<anonymous>)
    at GraphExecutor.<anonymous> (asyncToGenerator.js:21)
    at GraphExecutor.executeFunctionAsync (graph_executor.js:396)
    at _loop$ (control_executor.js:99)
    at tryCatch (runtime.js:63)
    at Generator.invoke [as _invoke] (runtime.js:282)

我尝试过使用tensorflowjs^2.0.0和tensorflowjs^3.0.0,但出现了相同的错误。我已经培训了两种不同的型号,分别是SSD MobileNet V2 FPNLite 320x320和SSD MobileNet V2 320x320

我还尝试用TensorFlowJS2和3转换模型,但都没有用


Tags: 模型outputmodelasjsgeneratordictat