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

在NVIDIA NGC TensorFlow容器中转换TensorFlow模型至ONNX失败

解决TensorFlow转ONNX时的explicit_paddings空迭代器错误

问题场景

按照Triton推理服务器教程将TensorFlow的EAST文本检测模型转换为ONNX格式时,使用NVIDIA NGC TensorFlow 22.01容器执行转换命令失败,核心错误为Could not infer attribute explicit_paddings type from empty iterator,对应出错节点为resnet_v1_50/conv1/Conv2D。

执行步骤

本地环境操作:

wget https://www.dropbox.com/s/r2ingd0l3zt8hxs/frozen_east_text_detection.tar.gz
tar -xvf frozen_east_text_detection.tar.gz
docker run -it --gpus all -v ${PWD}:/workspace nvcr.io/nvidia/tensorflow:22.01-tf2-py3

容器内操作:

pip install -U tf2onnx
python -m tf2onnx.convert --input frozen_east_text_detection.pb --inputs "input_images:0" --outputs "feature_fusion/Conv_7/Sigmoid:0","feature_fusion/concat_3:0" --output detection.onnx  

核心错误信息

2023-11-19 10:20:17,650 - ERROR - pass1 convert failed for name: "resnet_v1_50/conv1/Conv2D"
...
ValueError: Could not infer attribute `explicit_paddings` type from empty iterator

错误原因

冻结的TensorFlow模型中,Conv2D节点包含了一个空的explicit_paddings属性列表,而ONNX的helper函数无法从空迭代器推断出该属性的数据类型,导致转换流程中断。

解决方法

方案1:降级tf2onnx版本

该空属性处理问题在tf2onnx 1.14.0版本中不存在,降级到对应版本即可规避:

pip uninstall -y tf2onnx
pip install tf2onnx==1.14.0

重新执行原转换命令即可完成转换。

方案2:修改冻结图,移除空属性

通过TensorFlow API加载冻结图,移除Conv2D节点中的空explicit_paddings属性后重新保存模型:

import tensorflow as tf

# 加载原始冻结图
with tf.io.gfile.GFile('frozen_east_text_detection.pb', 'rb') as f:
    graph_def = tf.compat.v1.GraphDef()
    graph_def.ParseFromString(f.read())

# 遍历节点,过滤空的explicit_paddings属性
for node in graph_def.node:
    if node.op == 'Conv2D':
        filtered_attrs = []
        for attr in node.attr:
            if attr.key == 'explicit_paddings' and len(attr.value.list.i) == 0:
                continue
            filtered_attrs.append(attr)
        node.attr[:] = filtered_attrs

# 保存修改后的模型
with tf.io.gfile.GFile('modified_frozen_model.pb', 'wb') as f:
    f.write(graph_def.SerializeToString())

使用修改后的模型执行转换:

python -m tf2onnx.convert --input modified_frozen_model.pb --inputs "input_images:0" --outputs "feature_fusion/Conv_7/Sigmoid:0","feature_fusion/concat_3:0" --output detection.onnx

方案3:指定较低的ONNX opset版本

尝试使用opset 13或更低版本进行转换,旧版本ONNX对padding属性的处理逻辑不同,可避免该错误:

python -m tf2onnx.convert --input frozen_east_text_detection.pb --inputs "input_images:0" --outputs "feature_fusion/Conv_7/Sigmoid:0","feature_fusion/concat_3:0" --output detection.onnx --opset 13

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:06:18