轻松训练Mask RCNN网络, 生成定制化的instance segmentation(物体分割) 模型 (含图文步骤)

像素级的物体识别和分割是Computer Vision中很重要的一个功能, 也是利用Deep Learning来进行上手的重要一步.

1. 环境准备

1.1 安装Detectron

依据这个连接步骤进行安装: https://github.com/facebookresearch/Detectron/blob/master/INSTALL.mdpython

1.2 使用COCO 2017数据集进行training的测试

下载coco2017数据集, 并存放在 ./detectron/detectron/datasets/data/coco目录下面。下载后的数据集有三个目录,分别是train2017, val2017, annotationsgit

修改文件 ./detectron/detectron/datasets/dataset_catalog.py, 添加对这个新的数据集的定义。github

'coco_train2017': {
        _IM_DIR:
            _DATA_DIR + '/coco/train2017',
        _ANN_FN:
            _DATA_DIR + '/coco/annotations/instances_train2017.json'
    },
    'coco_val2017': {
        _IM_DIR:
            _DATA_DIR + '/coco/val2017',
        _ANN_FN:
            _DATA_DIR + '/coco/annotations/instances_val2017.json'
    },

修改配置文件: configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml, 把“TRAIN”的“DATASETS"改为"coco_train2017", 把"TEST"的"DATASETS"改为"coco_val2017"json

执行命令:bash

python tools/train_net.py     --cfg configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml     OUTPUT_DIR ./train_output

2. 准备训练数据

2.1 使用LabelMe标注多边形数据

网上有许多LabelMe的安装方法, 这里就再也不重复。在win7下面完成安装,在cmd窗口输入测试

labelme

就能够进入LableMe的窗口。spa

标注后,每张图片会生成一个json文件。code

2.2 把LabelMe的数据转换为coco数据格式

LabelMe产生的Json文件须要进行转换,才能被Detectron所训练。该连接的python文件能够完成转换:https://github.com/lindylin1817/labelme2cocoblog

在./mydata目录下存放全部LabelMe产生的标注.json文件,运行以下命令完成转换。图片

python labelme2coco.py

转换后的文件为new.json。该数据集可用为训练数据,所以把new.json重命名为train.json

2.3 生成验证数据validation

重复上面的步骤,把训练数据集中的一部分图片标注,做为验证数据集。经过labelme2coco.py,生成validate.json

3. 使用Detectron进行数据训练

在./detectron/detectron/datasets/data下面建立目录mytrain,用于存放全部的训练数据和验证数据。

创建目录./detectron/detectron/datasets/data/mytrain/train , 把全部用于训练的.jpg文件拷贝到该路径下。

创建目录./detectron/detectron/datasets/data/mytrain/validation , 把全部用于验证的.jpg文件拷贝到该路径下。

创建目录./detectron/detectron/datasets/data/mytrain/annotations , 把train.json和validation.json拷贝到该路径下。

修改文件 ./detectron/detectron/datasets/dataset_catalog.py, 添加对这个新的数据集的定义。

'my_train': {
        _IM_DIR:
            _DATA_DIR + '/mytrain/train',
        _ANN_FN:
            _DATA_DIR + '/mytrain/annotations/train.json'
    },
    'my_validation': {
        _IM_DIR:
            _DATA_DIR + '/mytrain/validation',
        _ANN_FN:
            _DATA_DIR + '/mytrain/annotations/validation.json'
    }

修改配置文件: configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml, 把“TRAIN”的“DATASETS"改为"my_train", 把"TEST"的"DATASETS"改为"my_validation"

执行命令:

python tools/train_net.py     --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml     OUTPUT_DIR ./mytrain_output

"e2e_mask_rcnn_R-50-FPN_1x.yaml"该配置文件定义了训练的选项, 包括使用MaskRCNN, Resnet50, 等

4. 调整训练参数

为了能得到合理的训练结果, 咱们须要对训练中出现的不一样问题进行解决. 解决的重要方法就是调整训练参数. 如下罗列分别在不一样状况下,该如何调整.

4.1 调整GPU数量

若是咱们机器只有一块GPU, 那咱们经过修改e2e_mask_rcnn_R-50-FPN_1x.yaml, 能够把GPU数量进行调整.

NUM_GPUS: 1

4.2 调整迭代次数

在一开始训练时, 咱们不建议进行不少次的迭代. 咱们尽可能使用短一些的时间, 检验整个训练的配置是否合理. 咱们能够经过修改e2e_mask_rcnn_R-50-FPN_1x.yaml来减小迭代次数.

MAX_ITER: 10000

 在缺省设置中, 该参数被设为90000次. 改成10000次后, 在P100 GPU的环境下, 能够1个小时左右完成整个训练.

4.3 调整Learning Rate

当咱们使用本身的数据来进行训练时, 它的数据量和数据分布都和COCO数据集有着极大的差距. 因此, 若是保留缺省learning rate的值(0.02), 很容易出现NaN的问题(俗称跑飞了), 而致使训练终止. 因此咱们须要经过修改e2e_mask_rcnn_R-50-FPN_1x.yaml来把learning rate的初始值减小.

BASE_LR: 0.002

5. 检查训练后获得的检验结果

由于咱们在训练中指定了validation的数据, 在训练结束时, detectron会自动对咱们放在validation目录下的图片进行测试。并把测试结果放在文件mytrain_output/test/my_validation/generalized_rcnn/detections.pkl 中。

运行以下命令就能够生成可视化的检测结果:

python tools/visualize_results.py     --dataset my_validation     --detections mytrain_output/test/my_validation/generalized_rcnn/detections.pkl     --output-dir mytrain_output/

生成的结果缺省是pdf文件,以下图

6. 用训练好的模型测试本身新的图片

完成了上面的步骤, 基本上就完成了整个训练过程。下面就是要测试本身的图片了。假设咱们的测试图片都存放在mytest目录下:

python tools/infer_simple.py --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml --output-dir /tmp/detectron-visualizations --image-ext jpg --wts  mytrain_output/train/my_train\:my_validation/generalized_rcnn/model_final.pkl --output-dir mytest_output/ mytest

测试生成的图片存放在 mytest_output 目录下

相关文章
相关标签/搜索