参考了
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。