Colab运行TF2目标检测报optimizers无experimental属性错误
问题背景
- 运行环境:Google Colab平台,目标为搭建TensorFlow 2目标检测API
- 参考材料:Medium平台发布的TensorFlow 2目标检测API配套教程
- 已完成前置操作:
- 从TensorFlow官方Model Garden仓库拉取模型代码
- 从官方TF2 Detection Model Zoo下载最新版
centernet_resnet50_v1_fpn_512x512_coco17_tpu-8预训练模型
- 故障触发节点:执行到教程第15步启动训练环节时抛出AttributeError,完整报错信息如下:
File "model_main_tf2.py", line 31, in <module> from object_detection import model_lib_v2 File "/usr/local/lib/python3.7/dist-packages/object_detection-0.1-py3.7.egg/object_detection/model_lib_v2.py", line 31, in <module> from object_detection import model_lib File "/usr/local/lib/python3.7/dist-packages/object_detection-0.1-py3.7.egg/object_detection/model_lib.py", line 35, in <module> from object_detection.builders import optimizer_builder File "/usr/local/lib/python3.7/dist-packages/object_detection-0.1-py3.7.egg/object_detection/builders/optimizer_builder.py", line 25, in <module> from official.modeling.optimization import ema_optimizer File "/content/gdrive/My Drive/TensorFlow/models/official/modeling/optimization/__init__.py", line 23, in <module> from official.modeling.optimization.optimizer_factory import OptimizerFactory File "/content/gdrive/My Drive/TensorFlow/models/official/modeling/optimization/optimizer_factory.py", line 36, in <module> 'adamw_experimental': tf.keras.optimizers.experimental.AdamW, AttributeError: module 'keras.api._v2.keras.optimizers' has no attribute 'experimental'
- 已尝试无效操作:安装tf-nightly版本、参考相关issue给出的方案修改,均未解决问题。
错误触发原因
该报错核心是TensorFlow安装版本与拉取的Model Garden代码版本不匹配:
- 拉取的Model Garden仓库main分支最新代码中,优化器工厂模块调用了
tf.keras.optimizers.experimental命名空间,该命名空间仅在特定TensorFlow版本中存在,版本过高或过低都会出现API路径变更问题 - Colab默认预装的TensorFlow版本、随机安装的tf-nightly构建版本,要么版本过低未合入该experimental命名空间,要么是Keras独立拆分后的高版本,将该路径下的优化器做了位置迁移,最终触发属性不存在的错误
- 参考的Medium教程发布时间较早,没有做版本锁定说明,直接拉取最新主分支代码、不匹配对应TensorFlow版本是这类环境报错的核心诱因,之前尝试的issue方案未生效也是因为没有对齐两个组件的版本对应关系。
修复操作步骤
按顺序执行以下操作即可正常启动训练,全程不需要修改源码:
- 先卸载环境中已存在的旧版object_detection包,避免多版本路径冲突:
!pip uninstall -y object-detection - 锁定TensorFlow版本,不要使用最新版或tf-nightly版本,执行以下安装命令后必须重启Colab运行时,清除旧版本缓存:
!pip install tensorflow==2.12.0 - 拉取和TensorFlow 2.12版本完全匹配的Model Garden稳定分支代码,不要拉取main分支:
!git clone --depth 1 --branch v2.12.0 https://github.com/tensorflow/models.git - 拉取代码完成后,进入research目录编译proto文件、安装目标检测API依赖:
%cd models/research !protoc object_detection/protos/*.proto --python_out=. !cp object_detection/packages/tf2/setup.py . !python -m pip install .
- 安装完成后执行官方验证脚本,确认环境配置正常:
!python object_detection/builders/model_builder_tf2_test.py
验证脚本输出OK、无报错时,再执行训练启动命令即可,不会再出现该属性错误。如果后续需要升级TensorFlow版本,只需要拉取对应版本号的Model Garden tag分支,保证两个组件版本号完全对齐,就不会出现这类API不兼容问题。
内容的提问来源于stack exchange,提问作者Leo Wong
相关产品推荐
相关产品推荐

