Win10环境下配置Mask RCNN,通过修改model.py文件调通源码,成功运行demo.ipynb
Win10下Mask RCNN环境配置,笔者配置了整整一周,期间从tensorflow1.3版本换到2.5版本都没有成功,最后通过一定的代码修改终于跑通demo.py,于是泪水中带着喜悦写下这篇博客,希望大家少走点弯路,该配置流程在tensorflow1.3-2.5版本下均可,具体过程如下
1、版本信息
自己调试了tensorflow1.0和2.0版本,均已实现,版本影响不大,一些博客说,tensorflow版本必须小于2.0,不存在,以下跟着我的流程,让你驾驭任何版本。
Tensorflow==1.12.0
Keras==2.2.4
或者
Tensorflow==2.3.0
Keras==2.4.3
2、下载代码
项目源代码地址:https://github.com/matterport/Mask_RCNN
3、下载COCO数据集预训练模型
在COCO数据集上预训练权重(mask_rcnn_coco.h5),下载地址:https://github.com/matterport/Mask_RCNN/releases
4、安装pycocotools
在COCO数据集上训练或者是测试,需要安装pycocotools,clone下COCO放在anaconda文件夹,地址:https://github.com/philferriere/cocoapi;
1)接下来进入coco文件夹下的PythonAPI目录:cd coco/PythonAPI;
2)输入:python setup.py build_ext --inplace 进行编译;
3)产生错误,直接删掉setup.py中Wno-cpp和Wno-unused-function参数;
4)再输一次python setup.py build_ext --inplace重新编译;
5)接着输入python setup.py build_ext install 进行编译。
以下是在运行demo.ipynb中出现的错误,以及解决方法
5、AttributeError: module ‘tensorflow’ has no attribute ‘log’;
解决方案参考:https://github.com/keras-team/keras/issues/13960
修改model.py源码,修改内容如下
From:
return tf.log(x) / tf.log(2.0)
To:
return tf.math.log(x) / tf.math.log(2.0)
6、ValueError: Tried to convert ‘shape’ to a tensor and failed. Error: None values not supported.
解决方案参考:https://github.com/matterport/Mask_RCNN/issues/1820
修改model.py原代码,这里要修改两句,分别如下
mrcnn_bbox = KL.Reshape((s[1], num_classes, 4), name="mrcnn_bbox")(x)
to:
mrcnn_bbox = KL.Reshape((-1, num_classes, 4), name="mrcnn_bbox")(x)
indices = tf.stack([tf.range(probs.shape[0]), class_ids], axis=1)
to:
indices = tf.stack([tf.range(tf.shape(probs)[0]), class_ids], axis = 1)
7、AttributeError: module ‘tensorflow._api.v2.sets’ has no attribute ‘set_intersection’
解决方案参考:https://github.com/tensorflow/tensorflow/issues/43982
修改model.py如下
import tensorflow as tf
to:
import tensorflow.compat.v1 as tf
8、AttributeError: module ‘keras.engine.saving’ has no attribute ‘load_weights_from_hdf5_group_by_name’
解决方案参考https://github.com/matterport/Mask_RCNN/issues/2252
修改源码如下
2129: if by_name:
2130: saving.load_weights_from_hdf5_group_by_name(f, layers)
2131: else:
2132: saving.load_weights_from_hdf5_group(f, layers)
modified to
keras_model.load_weights(filepath, by_name=by_name)
9、Unable to open file (truncated file: eof = 7340032, sblock->base_addr = 0, stored_eof = 126651688)
解决方案参考:
https://*.com/questions/58606029/unable-to-open-file-truncated-file-eof-7340032-sblock-base-addr-0-store
模型下载不完整,重新下载预训练模型。