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

如何在TensorFlow 2.x目标检测API中导出冻结推理图并解决相关报错

TensorFlow 2.x Object Detection API导出冻结推理图解决方案

报错原因说明

_UserObject has no attribute 'inputs'报错的根因是Object Detection API导出的SavedModel是经过封装的自定义对象,不是原生tf.keras.Model实例,直接对加载后的根对象取inputs属性不生效,必须先获取对应的推理签名函数。

方案1:从已导出的SavedModel直接转换

先通过官方提供的exporter_main_v2.py脚本导出标准SavedModel,再通过以下代码转换为单个冻结推理图:

import tensorflow as tf
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2

# 按实际路径替换
saved_model_path = "exporter_main_v2导出的SavedModel目录路径"
output_pb_path = "待保存的冻结图路径/frozen_inference_graph.pb"

# 加载SavedModel
model = tf.saved_model.load(saved_model_path)
# 获取OD API默认的推理签名函数
infer_func = model.signatures["serving_default"]

# 把变量转换为常量,完成冻结
frozen_function = convert_variables_to_constants_v2(infer_func)

# 写入冻结pb文件
tf.io.write_graph(
    graph_or_graph_def=frozen_function.graph,
    logdir=".",
    name=output_pb_path,
    as_text=False
)

如果需要确认输入输出节点名用于后续推理,可追加以下代码打印:

print("输入节点列表:", [node.name for node in frozen_function.inputs])
print("输出节点列表:", [node.name for node in frozen_function.outputs])

方案2:修改官方导出脚本直接生成冻结图

可以直接修改exporter_main_v2.py的逻辑,在导出SavedModel的步骤完成后,直接插入上述转换代码,导出时同步生成冻结图,无需后续单独转换。

注意事项

  • 转换得到的冻结图和TensorFlow 1.x版本export_inference_graph.py导出的结构完全兼容,可直接用于原有适配TF1冻结图的推理链路
  • 不要直接对tf.saved_model.load()返回的根对象取inputs/outputs属性,必须通过signatures["serving_default"]获取推理函数后再操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:03