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

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

1. 环境准备

1.1 安装Detectron

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

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

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

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

    '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"

执行命令:

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的窗口。

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

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

LabelMe产生的Json文件需要进行转换,才能被Detectron所训练。该链接的python文件可以完成转换:https://github.com/lindylin1817/labelme2coco

在./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 目录下

转载于:https://my.oschina.net/u/1431433/blog/2877070

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值