依据这个连接步骤进行安装: https://github.com/facebookresearch/Detectron/blob/master/INSTALL.mdpython
下载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
网上有许多LabelMe的安装方法, 这里就再也不重复。在win7下面完成安装,在cmd窗口输入测试
labelme
就能够进入LableMe的窗口。spa
标注后,每张图片会生成一个json文件。code
LabelMe产生的Json文件须要进行转换,才能被Detectron所训练。该连接的python文件能够完成转换:https://github.com/lindylin1817/labelme2cocoblog
在./mydata目录下存放全部LabelMe产生的标注.json文件,运行以下命令完成转换。图片
python labelme2coco.py
转换后的文件为new.json。该数据集可用为训练数据,所以把new.json重命名为train.json
重复上面的步骤,把训练数据集中的一部分图片标注,做为验证数据集。经过labelme2coco.py,生成validate.json
在./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, 等
为了能得到合理的训练结果, 咱们须要对训练中出现的不一样问题进行解决. 解决的重要方法就是调整训练参数. 如下罗列分别在不一样状况下,该如何调整.
若是咱们机器只有一块GPU, 那咱们经过修改e2e_mask_rcnn_R-50-FPN_1x.yaml, 能够把GPU数量进行调整.
NUM_GPUS: 1
在一开始训练时, 咱们不建议进行不少次的迭代. 咱们尽可能使用短一些的时间, 检验整个训练的配置是否合理. 咱们能够经过修改e2e_mask_rcnn_R-50-FPN_1x.yaml来减小迭代次数.
MAX_ITER: 10000
在缺省设置中, 该参数被设为90000次. 改成10000次后, 在P100 GPU的环境下, 能够1个小时左右完成整个训练.
当咱们使用本身的数据来进行训练时, 它的数据量和数据分布都和COCO数据集有着极大的差距. 因此, 若是保留缺省learning rate的值(0.02), 很容易出现NaN的问题(俗称跑飞了), 而致使训练终止. 因此咱们须要经过修改e2e_mask_rcnn_R-50-FPN_1x.yaml来把learning rate的初始值减小.
BASE_LR: 0.002
由于咱们在训练中指定了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文件,以下图
完成了上面的步骤, 基本上就完成了整个训练过程。下面就是要测试本身的图片了。假设咱们的测试图片都存放在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 目录下