用mmdetection跑通Mask-RCNN

数据准备工作

  1. 原始数据分两个文件夹,images(彩色图片)、mask(掩膜照片,一定要转换成灰度图
  2. images的名字若为“ABC.jpg”,mask里的掩膜照片应该这样命名“ABC_type_num.png”(这里的type是训练集的分类,我这里只有一种分类‘polyp’,一般从数据集json文件里的label就可以看到分类;num是从0开始的序列0, 1, …)
    用mmdetection跑通Mask-RCNN_第1张图片

    用mmdetection跑通Mask-RCNN_第2张图片

生成coco数据集

用coco转换代码将数据集转换成coco类型(即生成一个json文件,其中包含掩膜照片的信息,所以训练时不需要掩膜照片)

  1. 首先安装pycocotools,https://pypi.org/project/pycocotools/#files 下载文件pip安装
  2. 安装cpython pip install cpython
  3. 安装git pip install git
  4. 安装pycococreator,
pip install git+https://github.com/waspinator/pycococreator.git
  1. 数据集放置及代码设置如下,程序路径分train、val、test三次运行,即可,其中annotations放置的是掩膜照片。运行三次会生成三个json文件,文件名改成下图所示。
    用mmdetection跑通Mask-RCNN_第3张图片

运行mmdetection代码

  1. 将转换好的coco格式文件如下放在mmdetection文件夹中
  2. 新建一个data/coco文件夹,如下图再创建四个文件夹,其中annotations文件夹下放置上步生成的三个json文件,剩下三个文件夹放置训练、验证、测试所用的彩色照片
    用mmdetection跑通Mask-RCNN_第4张图片
  3. 代码修改

(1)datasets/coco.py修改成自己的分类,如下图,只有一个分类的时候别忘了逗号

在这里插入图片描述(2)mmdet/core/evaluation/class_names.py修改成自己的分类,如下图
在这里插入图片描述 (3)configs/base/models/mask_rcnn_r50_fpn.py修改num_classes的值为分类的数量(千万不要+1),我这里是改成1,有的模型是有四个num_classes,四个全都要改,可以用Ctrl+F查找一下。
在这里插入图片描述
在这里插入图片描述
(4) 补充:首先查看自己的配置文件,2.7版本和网上有的教程不一样,配置文件只有如下信息
用mmdetection跑通Mask-RCNN_第5张图片

从图中可以看出我们的配置文件分为四个部分,我们需要分别打开,修改其中信息
用mmdetection跑通Mask-RCNN_第6张图片
(4.1) 修改./configs_base_\dataset\coco_instance.py 在train_pipeline和test_pipeline中间添加val_pipeline(据说是添加验证步骤,具体有没有用我还不清楚,但是不会报错)

val_pipeline =[
dict(type='LoadImageFromFile'),
dict(type='LoadAnnotations', with_bbox=True),
dict(type='Resize', img_scale=(1333, 800), keep_ratio=True),
dict(type='RandomFlip', flip_ratio=0.5),
dict(type='Normalize', **img_norm_cfg),
dict(type='Pad',size_divisor=32),
dict(type='DefaultFormatBundle'),
dict(type='Collect',keys=['img', 'gt_bboxes', 'gt_labels']),
]

用mmdetection跑通Mask-RCNN_第7张图片

(4.2) 然后在configs_base_\schedules\schedule_1x.py中修改epoch和学习率(原文件是8个GPU学习率是0.02,我这只有1个GPU所以是0.02/8=0.0025)
用mmdetection跑通Mask-RCNN_第8张图片

(4.3) 最后修改configs_base_\default_runtime.py
首先第一行修改成checkpoint_config = dict(create_symlink=False),避免FileNotFoundError: [Errno 2] No such file or directory: ‘epoch_1.pth’ 这个错误。
然后取消第八行的注释,这是为了可以在训练以后通过tensorboard查看训练结果。
最后在最后一行修改成workflow = [('train', 1), ('val', 1)],据说也是为了验证。
用mmdetection跑通Mask-RCNN_第9张图片

  1. 运行代码(后面路径部分根据自己想要的模型来写)
python tools/train.py configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py
python tools/test.py configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py work_dirs/mask_rcnn_r50_fpn_1x_coco/latest.pth --eval bbox segm

你可能感兴趣的:(机器学习,pytorch,神经网络,深度学习)