Ubuntu18 SOM部署YOLOv4.pb模型遇protobuf解析错误求助
解决
google.protobuf.message.DecodeError加载YOLOv4 .pb模型问题 针对你在Ubuntu 18 SOM上加载YOLOv4 .pb模型时遇到的解码错误,结合本地运行正常的情况,给出以下排查和解决步骤:
检查模型文件完整性
本地可正常加载但SOM上出错,优先排查文件传输是否导致损坏:- 在本地和SOM上分别计算模型文件的MD5哈希值,确认文件一致:
# 本地执行 md5sum your_model.pb # SOM上执行 md5sum your_model.pb - 若哈希值不同,重新传输模型文件,建议使用
scp命令或带校验的传输工具,避免丢包。
- 在本地和SOM上分别计算模型文件的MD5哈希值,确认文件一致:
修复Protobuf环境冲突
即使版本号显示一致,也可能存在安装不彻底或依赖冲突:- 卸载现有Protobuf并重新安装指定版本:
pip uninstall protobuf -y pip install protobuf==3.19.1 - 验证当前环境的Protobuf版本:
import google.protobuf print(google.protobuf.__version__) - 建议使用Python虚拟环境隔离依赖,避免其他包干扰Protobuf版本。
- 卸载现有Protobuf并重新安装指定版本:
适配TensorFlow 2.x API
TF2.x中tf.GraphDef属于兼容模块,替换原有代码为TF2推荐写法:import tensorflow as tf with tf.io.gfile.GFile(checkpoint_filename, "rb") as file_handle: graph_def = tf.compat.v1.GraphDef() graph_def.ParseFromString(file_handle.read())若你的模型是SavedModel格式,可直接用更简洁的加载方式:
model = tf.saved_model.load("path/to/saved_model_dir")验证模型导出格式
在本地用以下代码确认模型本身是标准TensorFlow GraphDef格式:import tensorflow as tf with tf.io.gfile.GFile("your_model.pb", "rb") as f: graph_def = tf.compat.v1.GraphDef() graph_def.ParseFromString(f.read()) print(f"成功加载{len(graph_def.node)}个节点")若本地能正常输出节点数量,说明模型本身无问题,问题集中在SOM的环境或文件传输环节。
内容的提问来源于stack exchange,提问作者renu
相关产品推荐
相关产品推荐

