Colab中Matterport Mask-RCNN与TensorFlow兼容问题求助
适配TensorFlow 2.x的Mask-RCNN解决方案(Colab环境+自定义COCO类)
问题背景
在Colab的Jupyter Notebook中运行Mask-RCNN,克隆官方仓库:
!git clone https://github.com/matterport/Mask_RCNN.git
手动修改model.py中的KE.Layer为KE.base_layer.Layer后,仍出现如下报错:
TypeError: Could not build a TypeSpec for KerasTensor(type_spec=TensorSpec(shape=(None, None, 4), dtype=tf.float32, name=None), name='tf.math.truediv/truediv:0', description="created by layer 'tf.math.truediv'") of unsupported type <class 'keras.engine.keras_tensor.KerasTensor'>.
确认是TensorFlow版本兼容问题,后续陷入依赖循环:
- 仓库自带的
requirements.txt因pip的parse_requirements方法兼容问题无法正常安装依赖 - 尝试安装TensorFlow 1.14.0时,虽可通过指定whl包安装,但无法将该配置写入
requirements.txt,且会与现有依赖(如kapre 0.3.7要求tensorflow>=2.0.0)冲突
需求:寻找适配TensorFlow 2.x环境的Mask-RCNN分支,需支持自定义COCO格式类别,且可在Colab正常运行。
解决方案
1. 选用TF2.x兼容的Mask-RCNN分支
直接使用社区维护的、已完成TensorFlow 2.x适配的Mask-RCNN衍生分支,这类分支已经修复了KerasTensor类型相关的兼容报错,无需手动修改model.py中的层引用代码。
- 克隆分支后,直接执行
!pip install -r requirements.txt即可安装适配的依赖,不会出现parse_requirements的兼容问题
2. 配置自定义COCO格式类别
这类兼容分支大多保留了原版的COCO数据集接口,只需简单调整即可支持自定义类别:
- 准备好符合COCO格式的标注文件(
annotations.json)和对应图片数据集 - 修改分支中的
coco.py(或对应数据集配置文件),在class_names列表中添加你的自定义类别名称,同时将NUM_CLASSES参数设置为「自定义类别数量 + 1」(+1是因为要包含背景类) - 在训练脚本中指定你的数据集路径和标注文件路径,即可启动训练
3. Colab环境避坑指南
- 先卸载现有TensorFlow版本:
!pip uninstall tensorflow -y,再安装分支要求的TF2.x版本(如2.8.x或2.10.x,具体以分支的requirements.txt为准) - 安装依赖时加上
--upgrade参数,避免版本冲突:!pip install -r requirements.txt --upgrade - 如果遇到kapre等依赖冲突,可单独安装兼容版本并跳过依赖检查:
!pip install kapre==0.3.7 --no-deps(前提是分支代码不依赖kapre的TF2专属特性)
内容的提问来源于stack exchange,提问作者ArieAI
相关产品推荐
相关产品推荐

