mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)

源代码地址:GitHub - junlintianxiatjm/Mask_RCNN-master007: 基于mask_rcnn的目标检测案例,本地win10系统CPU测试通过,踩过很多坑,填坑方法均已给出。【本地win10已调通】 

【亲测通过】MaskRcnn_tf1.x如何升级到MaskRcnn_tf2.x,实现RTX3090环境训练自定义数据集模型。_君临天下tjm的博客-CSDN博客一、背景:之前一篇博文中已经实现了maskrcnn_tf1.15.0环境的win10+cpu模型训练,但cpu训练实在是非常的耗时,据说tf1.x是支持RTX1060的(本人未测试),但不支持最新的RTX3090,查阅了很多资料,原因应该是tf1.x与tf2.x的差别比较大,必须升级到tf2.x,才可以正常使用rtx3090。下面是maskrcnn_tf1.15.0的开发案例,本人亲测可用。mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_君..https://blog.csdn.net/shanxiderenheni/article/details/123423905

1.版本信息

python 3.6.9

Tensorflow 1.15.0

keras  2.2.5

Pillow 5.3.0(必须,否则labelme执行json_to_dataset会出错)

Cv2(必须安装,训练模型时用到)

Wrapt

opt_einsum

Gast

scikit-image

IPython

虚拟环境完整配置库如下:

(py36_maskrcnn_env) C:\Users\DELL>pip list

WARNING: Ignoring invalid distribution -ip (f:\programfiles\anaconda3\envs\py36_maskrcnn_env\lib\site-packages)

Package                  Version

------------------------ -------------------

absl-py                  0.13.0

astor                    0.8.1

astunparse               1.6.3

backcall                 0.2.0

bleach                   1.5.0

cached-property          1.5.2

cachetools               4.2.2

certifi                  2021.5.30

chardet                  4.0.0

colorama                 0.4.4

cycler                   0.10.0

dataclasses              0.8

decorator                4.4.2

enum34                   1.1.10

flatbuffers              1.12

gast                     0.2.2

google-auth              1.32.1

google-auth-oauthlib     0.4.4

google-pasta             0.2.0

grpcio                   1.32.0

h5py                     2.10.0

html5lib                 0.9999999

idna                     2.10

imageio                  2.9.0

imgviz                   1.2.6

importlib-metadata       4.6.0

ipython                  7.16.1

ipython-genutils         0.2.0

jedi                     0.18.0

Keras                    2.2.5

Keras-Applications       1.0.8

keras-nightly            2.5.0.dev2021032900

Keras-Preprocessing      1.1.2

kiwisolver               1.3.1

labelme                  4.5.9

Markdown                 3.3.4

matplotlib               3.2.2

networkx                 2.5.1

numpy                    1.19.5

oauthlib                 3.1.1

object-detection         0.1

opencv-python            4.5.2.54

opt-einsum               3.3.0

parso                    0.8.2

pickleshare              0.7.5

Pillow                   5.3.0

pip                      21.1.3

prompt-toolkit           3.0.19

protobuf                 3.17.3

pyasn1                   0.4.8

pyasn1-modules           0.2.8

Pygments                 2.9.0

pyparsing                2.4.7

PyQt5                    5.15.2

PyQt5-sip                12.9.0

python-dateutil          2.8.1

PyWavelets               1.1.1

PyYAML                   5.4.1

QtPy                     1.9.0

requests                 2.25.1

requests-oauthlib        1.3.0

rsa                      4.7.2

scikit-image             0.16.2

scipy                    1.4.1

setuptools               52.0.0.post20210125

six                      1.15.0

tensorboard              1.15.0

tensorboard-data-server  0.6.1

tensorboard-plugin-wit   1.8.0

tensorflow               1.15.0

tensorflow-estimator     1.15.1

tensorflow-gpu           2.2.0

tensorflow-gpu-estimator 2.2.0

termcolor                1.1.0

tifffile                 2020.9.3

traitlets                4.3.3

typing-extensions        3.7.4.3

urllib3                  1.26.6

wcwidth                  0.2.5

Werkzeug                 2.0.1

wheel                    0.36.2

wincertstore             0.2

wrapt                    1.12.1

zipp                     3.4.1

WARNING: Ignoring invalid distribution -ip (f:\programfiles\anaconda3\envs\py36_maskrcnn_env\lib\site-packages)

WARNING: Ignoring invalid distribution -ip (f:\programfiles\anaconda3\envs\py36_maskrcnn_env\lib\site-packages) 

2.labelme中的json_to_dataset.py修改源代码,新版本中加入旧版本的yaml部分代码;

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第1张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第2张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第3张图片

3.新建一个pic、json、train_data和transform_json文件夹,用labelme打标注;

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第4张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第5张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第6张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第7张图片

4.用右键“Run makedir”或命令“python makedir.py”生成四个子目录文件夹; 

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第8张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第9张图片

5.将json文件转换为模型需要的mask文件

超详细!使用Mask R-CNN训练自己的数据过程记录_常鸿宇的博客-CSDN博客

使用的是labelme的labelme_json_to_dataset函数。

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第10张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第11张图片

 mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第12张图片

 6.rename_cv2_mask.py ,复制label.png,并改名;

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第13张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第14张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第15张图片

7.将pic、json放到对应的train_data下pic、json,将transform_json下面的json文件夹都复制到train_data/labelme_json路径下。

Keras-MaskRCNN训练自己的数据_hhhuua的博客-CSDN博客_maskrcnn训练

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第16张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第17张图片

 8.下载mask_rcnn_coco.h5,放到根目录下

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第18张图片

9.新增文件train.py,注意修改相应参数;

Keras-MaskRCNN训练自己的数据_hhhuua的博客-CSDN博客_maskrcnn训练

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第19张图片

在工作区右键点选“Run ’train’”开始模型训练;

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第20张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第21张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第22张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第23张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第24张图片

管道缺陷数据集(338张):

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第25张图片

10.启动tensorboard,命令行是: tensorboard --logdir=log路径。

【TensorBoard】如何启动tensorboard的详尽步骤_fuqiuai的博客-CSDN博客_启动tensorboard

cmd命令:tensorboard --logdir=shapes20210707T1008

查看tensorboard可视化界面:http://localhost:6006/#scalars 

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第26张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第27张图片

11.测试模型:运行 Run‘test’;

Mask R-CNN tensorflow 训练自己的数据【从标注数据到最终训练和测试】超全教程,呕血踩坑,Ubuntu 16.04 完美运行_Somafish的博客-CSDN博客_mask rcnn tensorflow

检测结果出现很多框,是由于模型相关参数不正确引起的,需要多次尝试参数。

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第28张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第29张图片

运行 Run ’test2’:

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第30张图片

管道数据集测试结果如下:

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第31张图片

*问题总结*:

1. 将json文件转换为模型需要的mask文件需要修改labelme源码,D:\Anaconda3\Lib\site-packages\labelme\cli\json_to_dataset.py

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第32张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第33张图片

返回空文件夹,是因为路径问题;

解决方法:

labelme批量json_to_dataset转换_简简单单-CSDN博客

更改json_to_dataset.py源码,且修改路径。

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第34张图片

2.问题:UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 35: illegal multibyte sequence 

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第35张图片

解决方法:

python : 'gbk' codec can't decode byte 0xbe in position 18: illegal multibyte sequenc_腾阳的博客-CSDN博客

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第36张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第37张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第38张图片

3.问题:json_to_dataset.py不生成info.yaml文件; 

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第39张图片

解决方法:

Keras-MaskRCNN训练自己的数据_hhhuua的博客-CSDN博客_maskrcnn训练

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第40张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第41张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第42张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第43张图片

4.问题:AttributeError: ‘Model‘ object has no attribute ‘metrics_tensors‘,AttributeError: module 'tensorflow' has no attribute 'placeholder',类似问题都是tensorflow与keras的版本不匹配导致的。

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第44张图片

解决方法:

AttributeError: ‘Model‘ object has no attribute ‘metrics_tensors‘_mjiansun的专栏-CSDN博客  

Tensorflow=1.15.0

Keras=2.2.5

5.问题:测试.h5模型代码test.py出错,ValueError: Layer #391 (named "mrcnn_bbox_fc"), weight has shape (1024, 8), but the saved weight has shape (1024, 12).

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第45张图片

解决方法:

mask rcnn测试中遇到的问题解决_ilinda的博客-CSDN博客

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第46张图片

6.问题:执行 Run train.py训练模型时,提示警告信息:F:\ProgramFiles\anaconda3\envs\py36_maskrcnn_env\lib\site-packages\skimage\transform\_warps.py:830: FutureWarning: Input image dtype is bool. Interpolation is not defined with bool data type. Please set order to 0 or explicitely cast input image to another data type. Starting from version 0.19 a ValueError will be raised instead of this warning.

  order = _validate_interpolation_order(image.dtype, order)

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第47张图片

解决方法:

Maybe you can try the skimage version 0.16.2。when I use the version 0.17.2, I faced the same issue.Good luck!Idont know why.

pip install -U scikit-image==0.16.2

python - Input image dtype is bool. Interpolation is not defined with bool data type - Stack Overflow

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第48张图片

7.问题:运行train.py,训练模型时,有警告提示:

image_id 4

D:/python-workspace/Mask_RCNN-master2/train.py:89: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.

  temp = yaml.load(f.read())

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第49张图片

解决方法:

关于Yaml更新并弃用yaml.load()导致老代码报错 YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated_R_Rick-CSDN博客

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第50张图片

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第51张图片

8.执行transform_json.py文件,将json文件转换为模型需要的mask文件时,报错。

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第52张图片

 解决方法:

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第53张图片

 mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第54张图片

 

9.问题:AttributeError: module 'tensorboard.plugins.pr_curve.summary' has no attribute 'pb'

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第55张图片

解决方法:

参考资料:AttributeError: module 'tensorboard.plugins.pr_curve.summary' has no attribute 'pb' - 简书 

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第56张图片

10.问题:IndexError: boolean index did not match indexed array along dimension 0; dimension is 0 but corresponding boolean dimension is 1

 mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第57张图片

 解决方法:

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第58张图片

 11.问题:module 'tensorflow' has no attribute 'placeholder'

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第59张图片

解决方法:

参考资料:tensorflow与keras对应关系 - 知乎 

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第60张图片

12.问题:'Model' object has no attribute 'metrics_tensors'

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第61张图片

解决方法:

参考资料:'Model' object has no attribute 'metrics_tensors' 问题解决!!!_qq_643582002的博客-CSDN博客 

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第62张图片

13.如何保存检测结果截图:

解决方法:添加下面两个代码即可,保存目录需要提前建好,或者代码中判断再生成。

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第63张图片

 运行结果如下:

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第64张图片

14.报错:AssertionError: len(images) must be equal to BATCH_SIZE。

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第65张图片

解决方法:train.py文件修改下面两个参数值;

GPU_COUNT = 1
IMAGES_PER_GPU = 1

mask_rcnn 训练自定义数据集(本地win10系统cpu已调通,采坑无数,均已列出解决方法)_第66张图片

目录

1.版本信息

2.labelme中的json_to_dataset.py修改源代码,新版本中加入旧版本的yaml部分代码;

3.新建一个pic、json、train_data和transform_json文件夹,用labelme打标注;

4.用右键“Run makedir”或命令“python makedir.py”生成四个子目录文件夹; 

5.将json文件转换为模型需要的mask文件

 6.rename_cv2_mask.py ,复制label.png,并改名;

7.将pic、json放到对应的train_data下pic、json,将transform_json下面的json文件夹都复制到train_data/labelme_json路径下。

 8.下载mask_rcnn_coco.h5,放到根目录下

9.新增文件train.py,注意修改相应参数;

管道缺陷数据集(338张):

10.启动tensorboard,命令行是: tensorboard --logdir=log路径。

11.测试模型:运行 Run‘test’;

*问题总结*:

1. 将json文件转换为模型需要的mask文件,需要修改labelme源码,D:\Anaconda3\Lib\site-packages\labelme\cli\json_to_dataset.py

2.问题:UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 35: illegal multibyte sequence 

3.问题:json_to_dataset.py不生成info.yaml文件; 

4.问题:AttributeError: ‘Model‘ object has no attribute ‘metrics_tensors‘,AttributeError: module 'tensorflow' has no attribute 'placeholder',类似问题都是tensorflow与keras的版本不匹配导致的。

5.问题:测试.h5模型代码test.py出错,ValueError: Layer #391 (named "mrcnn_bbox_fc"), weight has shape (1024, 8), but the saved weight has shape (1024, 12).

6.问题:执行 Run ‘train.py’训练模型时,提示警告信息:F:\ProgramFiles\anaconda3\envs\py36_maskrcnn_env\lib\site-packages\skimage\transform\_warps.py:830: FutureWarning: Input image dtype is bool. Interpolation is not defined with bool data type. Please set order to 0 or explicitely cast input image to another data type. Starting from version 0.19 a ValueError will be raised instead of this warning.

  order = _validate_interpolation_order(image.dtype, order)

7.问题:运行train.py,训练模型时,有警告提示:

8.执行transform_json.py文件,将json文件转换为模型需要的mask文件时,报错。

9.问题:AttributeError: module 'tensorboard.plugins.pr_curve.summary' has no attribute 'pb'

10.问题:IndexError: boolean index did not match indexed array along dimension 0; dimension is 0 but corresponding boolean dimension is 1

 11.问题:module 'tensorflow' has no attribute 'placeholder'

12.问题:'Model' object has no attribute 'metrics_tensors'

13.如何保存检测结果截图:

14.报错:AssertionError: len(images) must be equal to BATCH_SIZE。



你可能感兴趣的:(目标检测,mask_rcnn,python,目标检测,深度学习)