You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

运行matterport/MaskRCNN代码时遭遇AttributeError:module 'keras.engine' has no attribute 'Layer'

解决MaskRCNN导入时的AttributeError: module 'keras.engine' has no attribute 'Layer'错误

嘿,这个问题我之前帮好几个开发者踩过坑,本质就是你当前用的Keras(或者TensorFlow整合的tf.keras)版本和MaskRCNN代码里依赖的旧Keras API不匹配导致的——在较新的Keras版本(尤其是TensorFlow 2.x附带的tf.keras)里,keras.engine.Layer这个模块路径已经被调整了,而原版MaskRCNN还在沿用旧的写法,所以才会抛出这个属性找不到的错误。

给你几个可行的解决方案,按优先级排序:

  • 直接修改MaskRCNN的代码适配新版环境
    找到报错的/usr/local/lib/python3.7/dist-packages/mrcnn/model.py文件,做两处关键修改:

    1. 把文件开头的import keras.engine as KE替换成from tensorflow.keras.layers import Layer(如果代码里没导入tensorflow,还要加一句import tensorflow as tf
    2. 把第255行的class ProposalLayer(KE.Layer):改成class ProposalLayer(Layer):
      除了这个层,代码里其他用到KE.Layer的自定义层类也要同步替换成Layer,确保所有继承关系都适配新API。
  • 安装MaskRCNN兼容的旧版Keras和TensorFlow
    如果不想改代码,可以直接回退到官方测试过的兼容版本组合:

    pip uninstall -y keras tensorflow
    pip install keras==2.2.5 tensorflow==1.15.0
    

    这套版本能完美适配原版MaskRCNN,不会出现API不匹配的问题。

  • 切换到适配tf.keras的MaskRCNN分支
    现在有不少社区维护的MaskRCNN分支已经适配了TensorFlow 2.x的tf.keras环境,你可以替换掉当前的代码库,用这些更新后的版本,就能直接在新版TF环境下运行,不用再纠结版本兼容问题。

另外要注意:如果选择用TensorFlow 2.x环境,一定要把代码里所有的Keras导入都换成tf.keras的路径,比如把import keras.backend as K改成from tensorflow.keras import backend as K,这样能避免大部分版本冲突问题。

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

火山引擎 最新活动