mask_benchmark训练自己的数据集
maskrcnn-benchmark的使用
项目地址和安装步骤
项目地址:
facebook官方推出的mask rcnn的pytorch实现。与其他版本相比,有更快训练速度和更高的识别速度,支持多GPU训练,且完全基于pytorch实现。
按照给出的安装步骤即可使用。
数据集
只在coco数据集下成功测试。VOC数据集在下载之后,用于训练时老是提示缺少相关文件,好像缺的文件在某宝上可以买到,没有尝试可不可用。 coco数据集下载连接
下载时可以使用wget -c http://… 的格式,支持断点续传
使用数据集时的一些问题
- 该项目是通过指定configs文件中的yaml文件来指定神经网络结构和预训练权重,在使用时发现很多yaml文件中的权重会提示下载失败。测试之后发现我只成功下载了e2e_mask_rcnn_R_50FPN_1X.yaml文件。
- 项目中提供了demo/Mask_R-CNN_demo.ipynb用于测试,使用时需要将ipynb文件中制定的yaml文件更改为之前测试能成功下载预训练权重的yaml文件。运行之后发现只是预训练的权重不能出现demo中的效果,在按照操作步骤用COCO数据集训练出权重之后,指定使用训练出的权重可以达到demo中的效果(看issue中有人直接跑demo也可以出现准确识别的效果,可能是我自己操作的问题)。
训练
单GPU
直接使用默认配置
python /path_to_maskrcnn_benchmark/tools/train_net.py --config-file "/path/to/config/file.yaml"
更改训练时的参数
python tools/train_net.py --config-file "configs/e2e_mask_rcnn_R_50_FPN_1x.yaml" SOLVER.IMS_PER_BATCH 2 SOLVER.BASE_LR 0.0025 SOLVER.MAX_ITER 720000 SOLVER.STEPS "(480000, 640000)" TEST.IMS_PER_BATCH 1
一般自己训练时需要更改的参数:
- SOLVER.IMS_PER_BATCH: 每一个batch的照片数
- SOLVER.MAX_ITER:最大迭代次数
多GPU训练
export NGPUS=8 python -m torch.distributed.launch --nproc_per_node=$NGPUS /path_to_maskrcnn_benchmark/tools/train_net.py --config-file "path/to/config/file.yaml"
在多GPU训练时一样可以通过单GPU的方法更改训练参数
训练结果
训练结束之后,会在项目文件夹中生成pth文件作为训练权重。如果想更改存储路径,在maskrcnn_benchmark/config/defaults.py文件中更改 _C.OUTPUT_DIR参数。训练结束会生成的last_checkpoint文件,在下次训练时,算法会优先使用该文件下(输出路径下)指定的权重。
训练自己的coco-format数据集
coco格式数据集的制作
(坑好深。。。) 首先需要理解coco数据集的格式 参考资料:
标注工具:我选择labelme作为标注工具
我的系统是Ubuntu系统,安装起来还是很方便的。
由于任务需求我需要mask rcnn的instance segmentation功能,所以下边的分析都是针对该任务 参照 labelme/examples/instance_segmentation中的命令来进行标注,但是直接使用labelme2coco.py生成的数据集不能直接使用
将该代码复制到labelme/examples/instance_segmentation/labelme2coco.py文件中。 执行
./labelme2coco.py data_annotated data_dataset_coco --labels labels.txt
data_annotated 是标记文件, data_dataset_coco 是生成文件名, labels.txt* 是所有类别的名称
在生成数据集时需要注意数据集名字中需要带有coco,如“coco_test”。
在maskrcnn-benchmark文件夹中maskrcnn_benchmark/config/paths_catalog.py文件中的DATASETS中添加数据集的相关信息。比如生成的数据集为“coco_test",那么在DATASETS中添加
"coco_test":{"data_dir":"coco_test","ann_file":"cocotest_test/annotations"},
然后将生成的数据集(coco_test)放到maskrcnn-benchmark文件夹中的datasets文件夹下(datasets文件夹是在创建coco数据集中创建的,如果不需要用coco数据集训练,那么在下载好项目后直接在项目中创建datasets文件夹即可)。
验证结果
可以使用demo/predictor.py文件来验证自己的训练结果
将该代码放到maskrcnn-benchmark文件夹下,即可对权重进行验证