FAIR开源目标识别平台Detectron从入门到放弃(二) 使用自己的数据集(voc2007格式)训练Detectron
2018-03-06 16:58
1081 查看
FAIR的detectron平台官方demo是基于MSCOCO数据集训练的,小白从faster rcnn一路走来,用的都是voc2007数据集格式,呕心沥血标注了voc2007格式的自建数据集,不能用了?不可以!我没找到detectron官方给出的voc转coco代码,幸好MCOCO有官方的cocoapi,支持多种数据集转coco格式,伸手党福利。小白关注的是目标识别,按照本文的方法keypoint和segmention都会一并转换成json格式,但是我只测试了目标识别功能。
1. 将voc数据集标签转换为json格式
从github下载cocoapimatlab新建脚本文件,输入以下代码,并将cocoapi下MatlabAPI添加到路径。首先编译下gason解析器,然后调用matlab CocoUtils类中的convertPascalGt function转换VOC数据集标签为coco数据集:mex('CXXFLAGS=\$CXXFLAGS -std=c++11 -Wall','-largeArrayDims',...'private/gasonMex.cpp','../common/gason.cpp',...'-I../common/','-outdir','private');CocoUtils.convertPascalGt( 'D:/datasets', '2007', 'trainval', 'D:/datasets/pascal_trainval2007.json')CocoUtils.convertPascalGt( 'D:/datasets', '2007', 'test', 'D:/datasets/pascal_test2007.json')注意这里是调用函数格式:CocoUtils.convertPascalGt( dataDir, year, split, annFile ),dataDir是voc2007路径,year是voc年份,split写val或train或test,最后输出的json文件路径与文件名.转换过程很快,转换结束后,把生成的json文件标签按照如下的文件夹结构放入到annotations下:
VOC<year> |_ JPEGImages | |_ <im-1-name>.jpg | |_ ... | |_ <im-N-name>.jpg |_ annotations | |_ pascal_trainval<year>.json | |_ ... |_ VOCdevkit<year>VOCdevkit<year>文件夹是voc2007官方数据集解压后文件,需根据自己的数据集目标识别种类修改:1. VOCopts.classes={...2. '你的标签1'3. '你的标签2'4. '你的标签3'5. '你的标签4'};
2. 下载backbone和预训练模型文件:
公司网络不给力,预先下好了resnet50和预训练模型:wget https://s3-us-west-2.amazonaws.com/detectron/ImageNetPretrained/MSRA/R-50.pkl /tmp/detectron/detectron-download-cache/ImageNetPretrained/MSRA/R-50.pkl wget https://s3-us-west-2.amazonaws.com/detectron/36225732/12_2017_baselines/mask_rcnn_R-50-FPN_2x.yaml.08_43_08.gDqBz9zS/output/train/coco_2014_train%3Acoco_2014_valminusminival/generalized_rcnn/model_final.pkl[/code]
3.复制训练配置文件到experiment路径下
在detectron路径下新建experiment,把configs/getting_started/tutoria_1gpu_e2e_faster_rcnn_R-50FPN.yaml复制到experiment下,并重命名为e2e_faster_rcnn_resnet-50-FPN_pascal2007.yaml:cd $DETECTORNmkdir experiments && cd experimentscp ../configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml e2e_faster_rcnn_resnet-50-FPN_pascal2007.yaml打开e2e_faster_rcnn_resnet-50-FPN_pascal2007.yaml,修改第三行 NUM_CLASSES: 后面数字为自建数据集标签种类+1,例如10种标签,那么就写11.同时在40行TRAIN中修改WEIGHTS为预训练 模型路径,指向步骤2中下载的model_final.pkl修改DATASATS为:'voc_2007_train'同时修改TEST中DATASETS为:
'voc_2007_test'
4.修改lib/datasets/dataset_catalog.py中
'voc_2007_train': { IM_DIR: _DATA_DIR + '/VOC2007/JPEGImages', ANN_FN: _DATA_DIR + '/VOC2007/annotations/pascal_trainval2007.json', DEVKIT_DIR: _DATA_DIR + '/VOC2007/VOCdevkit2007' }, 'voc_2007_test': { IM_DIR: _DATA_DIR + '/VOC2007/JPEGImages', ANN_FN: _DATA_DIR + '/VOC2007/annotations/pascal_test2007.json', DEVKIT_DIR: _DATA_DIR + '/VOC2007/VOCdevkit2007' },
5. 修改cls_score and bbox_pred
lib/modeling/fast_rcnn_heads.py, 修改所有的cls_score 为cls_score_voc, 以及bbox_pred 为bbox_pred_voc.注意在训练结束后inferece时,需要将cls_score_voc以及bbox_pred_voc改回。不然会报错6. 开始训练
python2 tools/train_net.py --cfg experiments/e2e_faster_rcnn_resnet-50-FPN_pascal2007.yaml OUTPUT_DIR experiments/output训练速度比py faster rcnn或matlab版的faster rcnn都快
7. 测试训练结果
python2 tools/infer_simple.py --cfg experiments/e2e_faster_rcnn_resnet-50-FPN_pascal2007.yaml \ --output-dir /tmp/detectron-visualizations --wts /训练结果路径/model_final.pkl \ demo2detectron根目录下,新建demo2文件夹,并将测试图像放在demo2中
9. 评估训练结果 test_net.py
python2 tools/test_net.py \ --cfg experiments/e2e_faster_rcnn_resnet-50-FPN_pascal2007.yaml \ TEST.WEIGHTS /训练结果路径/model_final.pkl \ NUM_GPUS 1PS:若对训练结果不满意,可以尝试修改训练配置文件,然后删除output里面内容,再次训练。2-9步骤参考了github开源项目,并修订了其中的 bug
相关文章推荐
- FAIR开源目标识别平台Detectron从入门到放弃(一)
- 使用labelIImg制作自己的数据集(VOC2007格式)用于Faster-RCNN训练
- android利用tesseract-ocr自己训练身份证号码识别库,并使用识别库识别身份证号码
- 深度学习Caffe实战笔记(20)Windows平台 Faster-RCNN 训练自己的数据集
- 机器学习 - 使用 Caffe 训练自己的数据集
- 使用自己训练的KITTI数据集,用Python做detectnet侦测
- 【心得】深度学习入门——训练并测试自己数据集
- 深度学习Caffe平台实例——CIFAR-10数据集在caffe平台上模型训练及实例使用模型进行预测
- 使用训练的mnist识别自己写的数字
- YOLOv2训练自己的数据集(识别海参)
- 用faster-rcnn训练自己的数据集(VOC2007格式,python版)
- TX2实现yolov2(目标检测,计数,训练自己的数据集)
- 实用图像处理入门 - 3 - 训练自己的识别器
- 目标检测(Google object_detection) API 上训练自己的数据集
- 使用yolov2训练自己的数据集
- 开源安全平台Ossim 4.5系统使用入门(高清视频)
- 开源 人脸识别 openface 实用介绍 实例演示 训练自己的模型
- 用faster-rcnn训练自己的数据集(VOC2007格式,python版)
- C++在Tesseract-OCR中使用自己训练的字库进行字体识别
- [人脸识别]使用VGG Face Model微调(Fine tune)自己的数据集