You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EfficientDet-D2从TensorFlow转ONNX遇输入张量异常及转换失败问题

EfficientDet模型TensorFlow转ONNX的输入形状指定问题

问题描述

  • 初始转换命令将EfficientDet-D2的SavedModel转ONNX:
    python3 -m tf2onnx.convert --saved-model ./tmp/efficientdet-d2-saved_model --output ./tmp/efficientdet-d2.onnx --opset 12
    
  • 转换后用Netron可视化,输入张量显示为unk_3256这类未知形式,无法正常推理
  • 尝试指定输入形状转换时,执行以下命令报错ValueError: Failed to import metagraph, check error log for more info.:
    python3 -m tf2onnx.convert --saved-model ./tmp/efficientdet-d2-saved_model --output ./tmp/efficientdet-d2.onnx --opset 13 --inputs "image_files:[1,3,768,768]"
    

解决步骤

1. 确认SavedModel的输入签名信息

先用官方工具查看模型的输入张量名称、默认形状和数据类型,避免用错输入名:

tf.saved_model.cli show ./tmp/efficientdet-d2-saved_model --all

重点查看serving_default签名下的输入字段,EfficientDet的TF模型通常输入张量名为image而非image_files,且默认输入格式为NHWC(即[batch, height, width, channels]),而非命令中写的NCHW格式。

2. 使用正确的转换命令

情况1:保持TF原生NHWC格式转换

如果推理框架支持NHWC,直接用匹配的形状转换:

python3 -m tf2onnx.convert --saved-model ./tmp/efficientdet-d2-saved_model \
  --output ./tmp/efficientdet-d2.onnx \
  --opset 13 \
  --inputs "image:[1,768,768,3]" \
  --signature-def serving_default

情况2:转换为ONNX常用的NCHW格式

如果需要NCHW格式的输入,添加--inputs-as-nchw参数指定转置输入:

python3 -m tf2onnx.convert --saved-model ./tmp/efficientdet-d2-saved_model \
  --output ./tmp/efficientdet-d2.onnx \
  --opset 13 \
  --inputs "image:[1,768,768,3]" \
  --inputs-as-nchw image \
  --signature-def serving_default

3. 额外排查要点

  • 升级tf2onnx到最新版本,避免版本兼容问题:
    pip install --upgrade tf2onnx tensorflow
    
  • 如果模型有多个签名定义,必须用--signature-def指定正确的推理签名(通常是serving_default)

内容的提问来源于stack exchange,提问作者ABD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:51:04