TensorFlow Object Detection API中google.protobuf runtime_version导入错误求助
解决TensorFlow Object Detection API中
google.protobuf的runtime_version导入错误 问题根源
错误ImportError: cannot import name 'runtime_version' from 'google.protobuf'的核心原因是:你克隆的TensorFlow models仓库中,编译生成的anchor_generator_pb2.py等proto文件依赖protobuf 3.21及以上版本的runtime_version模块,但你当前安装的是protobuf 3.20.3(该版本无此模块)。
出现此问题通常是因为:
- 系统中安装的
protoc(proto编译器)版本高于Python环境的protobuf版本,导致编译出的pb2文件调用了高版本API - 未重新编译models仓库中的proto文件,直接使用了仓库预生成的、适配高版本protobuf的pb2文件
解决方案
方案1:对齐protoc与Python protobuf版本并重新编译
- 检查protoc版本
执行命令查看当前系统的proto编译器版本:protoc --version - 对齐版本
- 如果protoc版本是3.21+:将Python环境的protobuf升级到对应版本(例如protoc是3.21.12,执行
pip install protobuf==3.21.12) - 如果要保留protobuf 3.20.3:下载对应3.20.3版本的protoc二进制文件,替换系统中的protoc,确保版本一致
- 如果protoc版本是3.21+:将Python环境的protobuf升级到对应版本(例如protoc是3.21.12,执行
- 重新编译proto文件
在models/research目录下执行,重新生成适配当前protobuf版本的pb2文件:protoc object_detection/protos/*.proto --python_out=. - 重新运行测试脚本
python object_detection/builders/model_builder_tf2_test.py
方案2:切换到TensorFlow 2.11对应的models分支
如果你希望保留protobuf 3.20.3,可以切换到TensorFlow 2.11官方对应的models分支,该分支的proto文件不会依赖高版本API:
cd models git checkout r2.11 cd research
之后重新执行方案1中的步骤3和4即可。
关键注意事项
- 编译proto文件是TensorFlow Object Detection API部署的必要步骤,不能跳过
- 优先遵循TensorFlow官方版本兼容性要求,TensorFlow 2.11.0官方推荐protobuf版本为3.20.0-3.20.3,使用该范围版本时必须确保protoc版本与之匹配
内容的提问来源于stack exchange,提问作者tanny bhai gamerz
相关产品推荐
相关产品推荐

