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

在Google Colab中复现卫星图像目标检测工作流时遭遇ImportError:无法从object_detection.protos导入preprocessor_pb2

解决Colab中TensorFlow Object Detection API的preprocessor_pb2导入错误

看起来你遇到的是典型的Protobuf编译路径/环境变量冲突问题,在Colab这种交互式环境里很容易踩坑——哪怕你跑了protoc编译命令,Python可能还是在加载安装到site-packages里的旧版object_detection包,而非你本地编译了proto的那个版本。下面是几个针对性的解决思路,按优先级尝试:

1. 调整安装顺序:先编译Protobuf,再以开发模式安装API

你之前的步骤是先安装API再编译proto,这会导致site-packages里的包没有编译后的pb2文件,而Python默认会优先加载site-packages的版本。反过来操作就能解决这个优先级问题:

# 切换到research目录
%cd /content/models/research

# 先清理可能存在的旧pb2文件
!rm -rf object_detection/protos/*.py

# 编译所有proto文件为Python模块
!protoc object_detection/protos/*.proto --python_out=.

# 以开发模式安装(-e参数会创建本地目录链接,后续修改会实时生效)
!pip install -e .

2. 强制指定PYTHONPATH并在同一命令中运行训练

Colab的%env设置有时候不会在后续的!命令中持续生效,或者路径优先级有问题。直接在运行train.py的命令里指定PYTHONPATH,确保加载本地的research目录:

%cd /content/models/research/object_detection
!PYTHONPATH="/content/models/research:/content/models/research/slim" python train.py --logtostderr \
--train_dir training/ \
--pipeline_config_path=training/ssd_inception_v2_coco.config

3. 替换Colab默认的Protobuf版本

Colab自带的protoc版本可能和TensorFlow Object Detection API不兼容(比如版本过低),替换为官方推荐的适配版本:

# 卸载默认protoc
!apt-get remove -y protobuf-compiler

# 下载并安装兼容版本(这里用3.19.0,适配大多数TF2.x版本的OD API)
!wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.0/protoc-3.19.0-linux-x86_64.zip
!unzip protoc-3.19.0-linux-x86_64.zip -d protoc3
!sudo mv protoc3/bin/* /usr/local/bin/
!sudo mv protoc3/include/* /usr/local/include/

# 验证版本是否替换成功
!protoc --version

替换完成后,回到步骤1重新编译proto并安装API。

4. 在Python代码中手动添加路径

如果上述shell层面的设置还是不生效,在运行train.py之前,先通过Python代码强制添加路径,确保加载本地编译的版本:

import sys
# 把research和slim目录放到Python路径的最前面,优先加载
sys.path.insert(0, '/content/models/research')
sys.path.insert(0, '/content/models/research/slim')

# 再运行训练命令
!python train.py --logtostderr \
--train_dir training/ \
--pipeline_config_path=training/ssd_inception_v2_coco.config

排查小技巧

  • 先检查编译后的文件是否存在:
    !ls /content/models/research/object_detection/protos/preprocessor_pb2.py
    
    如果不存在,说明protoc编译失败,先解决编译问题;如果存在但还是报错,就是路径优先级的问题。
  • 检查Python实际加载的object_detection路径:
    import object_detection
    print(object_detection.__file__)
    
    如果输出的是/usr/local/lib/python3.7/dist-packages/object_detection/__init__.py,说明加载的是site-packages里的旧版本,需要调整PYTHONPATH或者用开发模式安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:12:29