- 下载源工程代码:https://github.com/matterport/Mask_RCNN;
- 解压,进入主文件夹,安装所需模块:
pip3 install -r requirements.txt;
-
下载Jupyter Notebook以及coco权重:mask_rcnn_coco.h5,了解Jupyter Notebook的使用方法,采用Jupyter Notebook打开文件夹samples下的balloon或者shapes子文件夹,在web界面左上角的file下面将其download为python格式的文件;
说明: samples文件夹下面的几个示例例程基本都有三个文件:inspect_data,inspect_model,shapes,其中第一个文件是生成数据,第二个用来检测模型,可查看分步计算的结果并展示,第三个是主文件,用来训练或者预测分割;
-
结合shapes和balloon两个例程,在其基础上进行修改使得代码可以处理自己的数据,就是继承已有的类(mrcnn类)进行函数覆盖,使其适用于自己的data。在继承的过程中,除了sample文件夹下面的代码在改变,其他如mrcnn文件夹下面的文件都不要动。具体来说需要修改的有以下几个类:
-
类1: class BrainwebConfig(Config), 在其下面定义自己的环境配置,例如每个GPU处理的图像数目、每步迭代的次数等;
-
类2:class BrainwebDataset(utils.Dataset),继承原数据类,定义自己的类,该类需要覆盖的函数主要有两个:load_brainweb和load_mask。
在load_brainweb函数中需要注意的主要有两个函数:add_class,add_image,前者添加类别,后者添加有关图像的信息,特别需要注意的是,在这一步并不需要导入所有图像的数据,只需要添加原始图像所在路径和有关图像的信息即可,原add_image中没有的参数都将被合并至self.imageinfo的一个dict下,以方便后续使用,比如mask数据的导入,具体代码如下图:
# 添加图像
for img_name in train_img_names:
image_path = os.path.join(dataset_dir, img_name)
image = skimage.io.imread(image_path)
height, width = image.shape[:2]
self.add_image("data", image_id = img_name, path = image_path,width = width, height=height)
在load_mask函数中需要利用到self.image_info中的信息,所以load_brainweb和load_mask要配合使用;具体代码如下:
# 添加图像
# 以下是自己编写的读取mask的代码
image_info = self.image_info[image_id]
mask = np.zeros([image_info["height"], image_info["width"], 3], dtype=np.uint8) # 每个实例中只有3种mask
image_name = image_info['id']
root_path = '/home/work/Mask_RCNN/datasets/data/mask_train_val/label_0_255_'
for r_num in range(3):
mask_name = root_path + str(r_num+