将.pb文件转换为.tflite格式时提示SavedModel文件不存在问题如何解决
TF Hub模型转TFLite报错解决方案
报错原因
你遇到的报错:
SavedModel file does not exist at: openimages_v3_ssd_mobilenet_v2_1/{saved_model.pbtxt|saved_model.pb}
本质是TFLite转换器找不到符合要求的SavedModel文件,常见诱因有两个:
- 代码中
saved_model_dir填写的路径和你本地存放模型的实际路径不匹配,报错提示的路径是v3版本模型目录,你要转换的是v4版本,大概率是路径名拼写错误 - 没有将TF Hub平台的模型正确导出为本地SavedModel格式,直接使用了未解压的压缩包路径/网络URL作为输入路径,转换器仅支持读取本地包含
saved_model.pb文件的解压目录
正确转换步骤
方案1:先手动下载模型再转换
- 下载目标模型后解压到本地单独文件夹,确认文件夹根目录下存在
saved_model.pb文件和variables子文件夹 - 将代码中
saved_model_dir替换为该文件夹的完整绝对路径,不要使用相对路径避免识别出错 - 补充自定义算子允许配置后运行转换即可
方案2:直接通过tensorflow_hub库加载转换,无需手动下载
完整可运行代码如下:
import tensorflow as tf import tensorflow_hub as hub # 加载TF Hub目标模型 hub_model = hub.load("https://tfhub.dev/google/openimages_v4/ssd/mobilenet_v2/1") # 导出为本地SavedModel格式 tf.saved_model.save(hub_model, "./openimages_v4_ssd_mobilenet_v2_savedmodel") # 初始化TFLite转换器 converter = tf.lite.TFLiteConverter.from_saved_model("./openimages_v4_ssd_mobilenet_v2_savedmodel") # 允许自定义算子,该SSD模型包含自定义操作必须加此行 converter.allow_custom_ops = True # 执行转换 tflite_model = converter.convert() # 保存转换后的TFLite模型 with open('openimages_v4_ssd_mobilenet_v2.tflite', 'wb') as f: f.write(tflite_model)
注意事项
- 路径填写时不要包含中文、空格、特殊字符,避免不同系统的路径编码识别问题
- 推荐使用TensorFlow 2.4及以上版本执行转换,避免版本不兼容导致的额外报错
- 转换后的TFLite模型运行推理时,同样需要配置支持自定义算子的解释器才能正常使用
内容的提问来源于stack exchange,提问作者Ernane Domingues
相关产品推荐
相关产品推荐

