mask rcnn训练自己数据集整理出经验

参考了

官方版Mask-Rcnn(Detectron-caffe2)训练自己的数据集

https://blog.csdn.net/u014525760/article/details/79931485

 

首先要解决的是要爬很多图片,我有两个python脚本可以分别从百度和淘宝上爬某一类图片。要的私信或邮箱。

第二,一定要用labelme这个标注工具,因为他转化成coco数据集可以被detectron使用,网上的label2coco.py能用,但是需要稍微修改代码。

第三,标注图片时一定要用父_子类_num.jpg。建议只要一种类型图片,不如jpg,否则你生成json文件时候命名会重复,很烦的。搞死了。

第四,假设以上全部走通了。

你需要在home目录下建立一个文件夹,把图片和标注json文件分别放进去。图片分俩文件夹,train,val,标注annotations里面也是两个json文件,分别是你两个图片目录的标注文件。这里面是完全一一对应的,不能有错。

第四,你需要根据不同的训练图片的种类调整config,这个东西有点烦,还需要悉心研究。

以configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml 网络训练示例:

1、修改 ‘/lib/datasets/dataset_catalog.py’文件连接到自己的数据集;

2、修改‘configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml’文件,
a、在‘MODEL:’处‘NUM_CLASSES:’ 处为类别数+1 ,这里因为只有4类,所以数字为5,记住这里的算法,就是你有几类,在这里的数字就是几类+1,千万别搞错。
 b、NUM_GPUS: 1  只有一个GPU。这个常规。

3、主要修改以上部分 注意“DATASETS:”部分 ,‘labelme_train’和 ‘labelme_val’是和‘/lib/datasets/dataset_catalog.py’文件中添加部分的 labelme_train’和 ‘labelme_val’对应的这样才能保证链接训练我们的数据集。这个里面请注意,好像一定要有个逗号,

为了避免出错,我把我修改过的贴上来。

-----------------------------------------------------------------------------------

    'labelme_train': {
        _IM_DIR:
            '/home/victor/Datasets/train',
        _ANN_FN:
            '/home/victor/Datasets/annotations/train.json',
    },
    'labelme_val': {
        _IM_DIR:
            '/home/victor/Datasets/val',
        _ANN_FN:
            '/home/victor/Datasets/annotations/val.json',
    },

 

 

---------------------------------------------------------------------

看见了吗?一定要带逗号,而且不能有错。这个地方也很严谨。
‘WEIGHTS:’部分是一个预训练模型,可以根据工程说明下载,在该处连接到下载到的预训练模型。

python2 tools/train_net.py --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml OUTPUT_DIR out_dir
如果以上你都搞定了,请用上面这行代码,记住,如果你一切顺利的话,会生成模型在out_dir这个文件夹里面。

但是,我更改的时候,我想想哈,我改了哪些地方的config文件。

  NUM_CLASSES: 81
改成
  NUM_CLASSES: 5

  BASE_LR: 0.02
改成
  BASE_LR: 0.002

  STEPS: [0, 60000, 80000]
改成
  STEPS: [0, 6000, 8000]

  WEIGHTS: https://s3-us-west-2.amazonaws.com/detectron/ImageNetPretrained/MSRA/R-50.pkl
改成
  WEIGHTS: /home/victor/facebook/detectron-download-cache/ImageNetPretrained/MSRA/R-50.pkl

  DATASETS: ('coco_2014_train', 'coco_2014_valminusminival')
  SCALES: (800,)
  MAX_SIZE: 1333
  BATCH_SIZE_PER_IM: 512
改成
  DATASETS: ('labelme_train',)
  SCALES: (500,)
  MAX_SIZE: 833
  BATCH_SIZE_PER_IM: 64

  DATASETS: ('coco_2014_minival',)
  SCALE: 800
  MAX_SIZE: 1333
改成
  FORCE_JSON_DATASET_EVAL: True
  DATASETS: ('labelme_val',)
  SCALE: 500
  MAX_SIZE: 833
加粗部分因为训练完成后这个地方老报错,google之后加上去的。

我还是把我修改后的贴上来,看看

 

MODEL:
  TYPE: generalized_rcnn
  CONV_BODY: FPN.add_fpn_ResNet50_conv5_body
  NUM_CLASSES: 5
  FASTER_RCNN: True
  MASK_ON: True
NUM_GPUS: 1
SOLVER:
  WEIGHT_DECAY: 0.0001
  LR_POLICY: steps_with_decay
  BASE_LR: 0.002
  GAMMA: 0.1
  MAX_ITER: 9000
  STEPS: [0, 6000, 8000]
FPN:
  FPN_ON: True
  MULTILEVEL_ROIS: True
  MULTILEVEL_RPN: True
FAST_RCNN:
  ROI_BOX_HEAD: fast_rcnn_heads.add_roi_2mlp_head
  ROI_XFORM_METHOD: RoIAlign
  ROI_XFORM_RESOLUTION: 7
  ROI_XFORM_SAMPLING_RATIO: 2
MRCNN:
  ROI_MASK_HEAD: mask_rcnn_heads.mask_rcnn_fcn_head_v1up4convs
  RESOLUTION: 28  # (output mask resolution) default 14
  ROI_XFORM_METHOD: RoIAlign
  ROI_XFORM_RESOLUTION: 14  # default 7
  ROI_XFORM_SAMPLING_RATIO: 2  # default 0
  DILATION: 1  # default 2
  CONV_INIT: MSRAFill  # default GaussianFill
TRAIN:
  WEIGHTS: /home/victor/facebook/detectron-download-cache/ImageNetPretrained/MSRA/R-50.pkl
  DATASETS: ('labelme_train',)
  SCALES: (500,)
  MAX_SIZE: 833
  BATCH_SIZE_PER_IM: 64
  RPN_PRE_NMS_TOP_N: 2000  # Per FPN level
TEST:
  FORCE_JSON_DATASET_EVAL: True
  DATASETS: ('labelme_val',)
  SCALE: 500
  MAX_SIZE: 833
  NMS: 0.5
  RPN_PRE_NMS_TOP_N: 1000  # Per FPN level
  RPN_POST_NMS_TOP_N: 1000
OUTPUT_DIR: .

 

假如你以上全部跑通了,也训练和val成功了。

接下来还要改一个文件。

修改文件‘/lib/datasets/dummy_datasets.py’将classes 安装生成的train.json 中categories分类顺序改为自己的类别。

把这个厘米i安的class改成你annotations里面的几个类。

 

接下来就是测试你训练的模型到底行不行了。

你的模型一般在detectron下面的out_dir/train/这个文件夹里面,找到路径然后敲以下命令:

python2 tools/infer_simple.py     --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml     --output-dir /home/victor/woca     --image-ext jpg     --wts /home/victor/software/Detectron/out_dir190107/train/labelme_train/generalized_rcnn/model_final.pkl     demo

python2 tools/infer_simple.py    \ --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml    \ --output-dir /home/victor/woca     --image-ext jpg     --wts /home/victor/software/Detectron/out_dir190107/train/labelme_train/generalized_rcnn/model_final.pkl     \ demo

 

完成后它会把结果放在woca这个文件夹里面。然后你要想得到的是jpg文件,自己改下vis和infer_simple文件。另外,如果识别没有box我的代码里是不生成文件的。

基本所有问题理清楚了。

接下来,如果你还要再添加训练的类,就只要修改几个文件就行了。

第一个就是你要找图片,然后标注,生成新的标注json文件。

第二个,你要把config文件num改下。最后要修改class的类。

第三个,一定要修改文件‘/lib/datasets/dummy_datasets.py’将classes 安装生成的train.json 中categories分类顺序改为自己的类别。

如果一切都正常的话就没问题。肯定根据训练的图片和任务不一样,要改一些参数的。具体遇到问题,还需要google。

bless。

你可能感兴趣的:(mask rcnn训练自己数据集整理出经验)