将ONNX模型转TFLite时出现KeyError: 'input.1'问题求助
问题场景
在Google Colab环境中,通过以下命令成功安装onnx-tensorflow:
!git clone https://github.com/onnx/onnx-tensorflow.git !cd onnx-tensorflow && pip install -e .
执行转换命令将ONNX模型转为TensorFlow冻结图时:
# Convert .onnx model to TensorFlow Freeze Graph !onnx-tf convert -i "/content/drive/MyDrive/model.onnx" -o "/content/model.pb"
触发如下错误:
tensorflow.python.autograph.pyct.error_utils.MultilineMessageKeyError: in user code:
File "/content/onnx-tensorflow/onnx_tf/backend_tf_module.py", line 99, in call *
output_ops = self.backend._onnx_node_to_tensorflow_op(onnx_node,
File "/content/onnx-tensorflow/onnx_tf/backend.py", line 347, in _onnx_node_to_tensorflow_op *
return handler.handle(node, tensor_dict=tensor_dict, strict=strict)
File "/content/onnx-tensorflow/onnx_tf/handlers/handler.py", line 59, in handle *
return ver_handle(node, **kwargs)
File "/content/onnx-tensorflow/onnx_tf/handlers/backend/conv.py", line 15, in version_11 *
return cls.conv(node, kwargs["tensor_dict"])
File "/content/onnx-tensorflow/onnx_tf/handlers/backend/conv_mixin.py", line 29, in conv *
x = input_dict[node.inputs[0]]KeyError: 'input.1'
解决步骤
检查ONNX模型输入节点命名
使用onnx工具查看模型的输入节点名称,确认是否存在input.1节点或命名不规范问题,在Colab中执行:import onnx model = onnx.load("/content/drive/MyDrive/model.onnx") print("模型输入节点:") for input in model.graph.input: print(input.name)若输出中无
input.1,说明转换过程中存在节点名称映射异常。禁用strict模式转换
strict模式会严格遵循ONNX规范,部分模型可能存在兼容问题,添加--strict False参数放宽约束:!onnx-tf convert -i "/content/drive/MyDrive/model.onnx" -o "/content/model.pb" --strict False重新导出ONNX模型并指定标准输入名称
如果模型从PyTorch等框架导出,重新导出时显式指定输入节点名称,避免自动生成非标准命名(如input.1)。以PyTorch为例:import torch model = torch.load("your_model.pth") model.eval() dummy_input = torch.randn(1, 3, 224, 224) # 匹配模型输入维度 torch.onnx.export(model, dummy_input, "model.onnx", input_names=["input"], output_names=["output"])用新导出的模型重新执行转换。
更换onnx-tensorflow稳定版本
源码版本可能存在兼容性问题,尝试安装稳定版:!pip uninstall -y onnx-tensorflow !pip install onnx-tensorflow==1.10.0之后重新执行转换命令。
验证ONNX模型有效性
先确认模型本身无损坏,用ONNX Runtime测试推理:import onnxruntime as ort import numpy as np test_input = np.random.randn(1, 3, 224, 224).astype(np.float32) # 匹配模型输入维度 sess = ort.InferenceSession("/content/drive/MyDrive/model.onnx") output = sess.run(None, {sess.get_inputs()[0].name: test_input}) print("模型推理成功,输出形状:", output[0].shape)若推理失败,需重新导出或修复模型。
内容的提问来源于stack exchange,提问作者Jidan Humaidi M200BSY1350

