使用Mask-RCNN训练自己的数据集
一、安装labelme
基于神经网络的深度学习算法等都属于数据驱动型算法,在实际应用中其效果会受到原始数据质量的影响;因此,在使用Mask-RCNN模型时,请首先进行数据标注工作;为了保证实验顺利进行如果没有正确配置 Anaconda 环境,请参考其他人的博客:博客;在配置好的 Anaconda 环境中创建一个新的虚拟环境,并按照以下步骤在终端中安装标注工具 LabelMe:
pip install labelme
pip install pyqt5
pip install pillow==4.0.0
代码解读
二、标注数据集
下一步开始标注数据,在终端中输入下面的代码会自动打开标注工具:
labelme
代码解读
接着选择第二项打开文件夹,如下图所示:

在指定的数据图片文件夹中进行操作,在每个 pictures 上执行右键操作,并在适当的位置执行以下步骤:首先,在每个 pictures 上进行标注操作,并详细记录标签信息;然后,在完成当前 images 的标注后切换至下一张 pictures;系统会显示保存对话框,并将修改后的图像直接存储至原始位置;完成所有 images 的标注工作后,默认生成包含所有标记信息的 JSON 文件;最后关闭终端窗口。

三、批量处理Json文件
当前的.json文件中已包含我们标注的信息,但目前还不能直接被代码读取为数据格式。不同深度学习代码中的数据存储格式需根据各自代码的编写方式来确定。以下以上述mask-rcnn为例,在json文件所在目录中新增一个.txt文本文件,请在新建的.txt文件中输入以下内容:
@echo off
for %%i in (*.json) do labelme_json_to_dataset "%%i"
pause
代码解读
完成保存操作并更改为.bat扩展名。将其转换为一个用于管理更改文件存储格式的批处理脚本。完成保存操作并双击运行该脚本。运行该脚本一段时间后会生成相应的存储目录结构。

如下图所示建立文件夹:

labelme_json文件夹存放的是上一步中得到的文件夹。
json文件夹存放的是标注得到的.json文件。
pic文件夹存放的是原图。
以下是对原文的同义改写
cv2_mask被存储为上一阶段生成位于该文件夹中的所有后缀为.png的mask图像文件的具体集合。其中包含多个图像实例,这些实例均经过必要的预处理以满足后续算法需求的具体信息如下:

执行将每个.png文件拷贝至文件夹中并同时完成重命名的操作耗时较长
import os
import shutil
for dir_name in os.listdir('./labelme_json'):
pic_name = dir_name[:-5] + '.png'
from_dir = './labelme_json/'+dir_name+'./label.png'
to_dir = './cv2_mask/'+pic_name
shutil.copyfile(from_dir, to_dir)
print (from_dir)
print (to_dir)
代码解读
将上述文件.py文件保存到如下目录,运行即可:

到此我们的数据集制作完毕。
四、下载Mask-RCNN源码
如需获取修改版代码,请加入QQ群:817442229或联系博主QQ:2425113371以获取免费版本。将数据集重命名为mydata放置在指定文件夹后即可直接使用官方版本。以下是官方版本源码的GitHub链接:[Release Mask R-CNN 2.0 · matterport/Mask_RCNN · GitHub](https://github.com/matterport/Mask_RCNN/releases/tag/v2.0 "Release Mask R-CNN 2.0 · matterport/Mask_RCNN · GitHub)
五、环境搭建
对于从事深度学习的人来说,conda是一个常用的工具.在此情境下,默认假设读者已经正确安装并配置好了conda工具.建议在项目根目录下创建新的虚拟环境,该项目的源代码开发历史较为悠久,较高的Python版本可能会带来诸多后续问题,通常建议采用Python2版本来进行环境配置,但在这里为了演示方便,并没有限制必须使用Python2;这样操作并不会影响最终结果.等会儿我们将开始处理源码的具体修改工作
conda create -n MaskRCNN python=3.6
代码解读
创建好后使用如下命令激活环境:
source activate MaskRCNN
代码解读
这里在ubuntu系统下应该是:
conda activate MaskRCNN
代码解读
在该环境中进行tensorflow的安装,请特别提醒您注意以下几点:必须选择一个合适的tensorflow版本(具体使用的是1.5.0版本),请一定明确指定tensorflow版本号(如果不指定,默认下载最新版本)。这可能会导致后续程序运行出现问题:
pip install tensorflow==1.5.0
代码解读
在这里也可以获取相应的 GPU 版本。使用 GPU 版本通常能带来显著性能提升。然而需要注意的是,TensorFlow、CUDA及 CUDNN 等软件包也需相应选择兼容的版本。因此,在尝试使用 GPU 版时,请确保已安装正确的 CUDA 及 CUDNN 环境。
pip install tensorflow-gpu==1.5.0
代码解读
当前使用的CUDA版本为9.0;请访问PyTorch官方文档以获取相应的PyTorch版本信息;通过PyTorch帮助我们安装所需的CUDA库和cuDNN库。
conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=9.0 -c pytorch
代码解读
可以使用如下代码查看是否安装成功:
import torch
print(torch.cuda.is_available())
print(torch.backends.cudnn.is_available())
print(torch.cuda_version)
print(torch.backends.cudnn.version())
代码解读
运行结果打印出两个true表明配置成功完成;可能会出现错误提示信息,在此情况下无需特别处理即可继续后续操作。
下面再安装keras,注意,keras的版本要和tensorflow对应:
pip install keras==2.1.6
代码解读
当下载速度较慢时,请考虑更换源地址,并在上述代码后-i处更换新的安装位置。例如,在安装其他包时同样适用这种方法非常实用:
pip install keras==2.1.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
代码解读
安装完成后,在PyCharm中打开了代码文件夹,并单击了终端窗口;在此处可以通过以下代码来安装requirements.txt中的所有必要的包:
pip install -r requirements.txt
代码解读
如果下载完成后未出现错误且能够顺利运行代码,则表明环境配置已经完成。然而,在大多数情况下会遇到问题的原因在于...由于博主曾遇到类似情况(具体原因略去),若采用该方法出现故障,则需要逐一安装requirements.txt中的各项依赖包:
pip install numpy
pip install scipy
pip install Pillow
pip install cython
pip install matplotlib
pip install scikit-image
pip install opencv-python
pip install h5py
pip install imgaug
pip install IPython[all]
代码解读
依次执行上述代码中的每一行,在每次软件包安装完成后,请立即执行测试代码以验证tensorflow是否能够正常运行。由于某些软件包版本之间可能存在不兼容性问题可能导致tensorflow无法正常工作,请确保在安装完成后及时进行测试。以下是用于验证的测试代码:
import tensorflow as tf
import keras
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
代码解读
当在未安装requirements.txt文件下的包运行上述代码时,可能出现错误的情况通常是tensorflow与numpy版本不兼容。我使用的numpy版本为1.16.0,并且这是能够与tensorflow 1.5.0兼容同时又能运行所有依赖包的最低要求版本。
pip install numpy==1.16.0
代码解读
当numpy更新后仍出现错误时

当我在安装OpenCV Python包时,很可能遇到错误。这是因为由于默认下载的是最新版本的OpenCV库与tensorflow==1.5.0不兼容的原因。为了修复这个问题,请问您是如何操作的?
pip install opencv-python==4.3.0.38
代码解读
安装完以上的包,运行代码可能还会出现警告:

该警告发生的原因是因为scikit-image版本不可用性吗?请按照以下步骤操作以解决问题:
pip install -U scikit-image==0.16.2
代码解读
对于那些无关紧要的警告信息,则可予以忽略。然而出现这样的红色报错提示却让人感到非常不快,在代码的最前端建议添加如下代码块以实现有效的屏蔽。
版本冲突触发异常,并被系统自动跳过
import warnings
warnings.filterwarnings("ignore")
六、对下载好的源码进行修改
1、修改train_test.py的第57行,改为类别数+1。

在train_test.py文件中修改第121行代码,在原有注释内容基础上进行更新或删除操作。具体来说就是根据类别数量相应地增加或替换相应的代码行内容。每个新添加的行中的第二个参数应设置为序号,并确保第三个参数对应正确的类别名称。

将这段代码从train_test.py中的第178到182行更改为自己的本地存储路径,并切换到基于本地文件系统的工作流程中进行处理。假设你的数据集按照之前说明的位置布局存放,则无需更改当前设置即可运行程序。

建议在config.py中对DETECTION_MIN_CONFIDENCE进行参数设置。通过降低该参数的数值来提高预测的准确性。

5、修改train_test.py的61~62行可以指定图片大小。

6、修改train_test.py的160~163行。

其余参数无需修改,完成之后运行train_test文件即可开始训练。
七、测试代码
运行测试代码要安装pycocotools,运行:
pip install pycocotools
代码解读
若出现如下报错:

说明缺少Microsoft Visual C++ 14.0这个东西,去以下地址安装即可:
https://my.visualstudio.com/Downloads?q=build tools
搜索build tools,下载DVD格式的build tools:

完成下载后进行安装。然而该方案会导致巨大的内存消耗,一种更为简洁高效的方法可以通过在终端执行来实现
conda install libpython m2w64-toolchain -c msys2
代码解读
具体内容可以参考:
The software is compatible with Microsoft Visual C++ 14.0, available on -博客
