detectron训练模型

概论

前提:Linux系统下安装好了detectron,安装步骤可参考detectron安装。

数据集:可用的数据集有几种,其中一种最简单的方式如下图,本质上来说,是coco_train2014文件夹里面放着若干训练集的JPG图片,annotations文件夹里面放着一个json文件,是那些图片的标注信息。这里只说明训练集,测试及测试集先不弄。

detectron训练模型_第1张图片

训练文件******/detectron/tools/train_net.py这个文件就是用来训练的。这个是最终终端训练用的。

数据配置文件*****/detectron/detectron/datasets/dataset_catalog.py。这个是使得每个数据集指向相应的路径。

训练配置文件******/detectron/configs/getting_started/retinanet_R-50-FPN_1x.yaml。这个文件用来制定一些训练的参数、预训练模型、数据集等等。

预训练模型:pkl文件,网上下载的这里

操作

数据集:要不下载数据集,要不自己做数据集,关键是有JPG和json,我是用voc数据集转成我要的数据集,参考xml2json,其中运行上面的py文件的时候做以下的修改,即可生成一个json文件,voc的图片文件夹直接用就行了:

if __name__ == '__main__':
    xml_path = 'xml文件夹路径'
    json_file = 'json文件的名字'
    parseXmlFiles(xml_path)
    json.dump(coco, open(json_file, 'w'))

数据配置文件:这里的目的是指向训练数据集,以coco_2014_train为例,这里detectron本身的没有这个数据集的数据的,我们可以把自己做好的JPG文件夹放到_IM_DIR下面,把json文件放到_ANN_FN下面,以供后续使用。

detectron训练模型_第2张图片 dataset_catalog.py

 

训练配置文件:可以在detectron下面新建一个文件夹experiments,用来存放这个yaml配置文件。和存放预训练模型pkl文件,方便管理,如下图,每个yaml会对应一个pkl文件,自己想训练哪个模型,就去/detectron/configs路径找相应的yaml文件和去下载相应的pkl文件。yaml文件的修改如下面代码及其注释所示。

detectron训练模型_第3张图片

MODEL:
  TYPE: retinanet
  CONV_BODY: FPN.add_fpn_ResNet50_conv5_body
  NUM_CLASSES: 21 #自己训练类别+1
NUM_GPUS: 1 #只有一个gpu就写1
SOLVER:
  WEIGHT_DECAY: 0.0001
  LR_POLICY: steps_with_decay
  BASE_LR: 0.01
  GAMMA: 0.1
  MAX_ITER: 90000 #总的训练步数
  STEPS: [0, 60000, 80000]
FPN:
  FPN_ON: True
  MULTILEVEL_RPN: True
  RPN_MAX_LEVEL: 7
  RPN_MIN_LEVEL: 3
  COARSEST_STRIDE: 128
  EXTRA_CONV_LEVELS: True
RETINANET:
  RETINANET_ON: True
  NUM_CONVS: 4
  ASPECT_RATIOS: (1.0, 2.0, 0.5)
  SCALES_PER_OCTAVE: 3
  ANCHOR_SCALE: 4
  LOSS_GAMMA: 2.0
  LOSS_ALPHA: 0.25
TRAIN:
  WEIGHTS: /home/zhangfangjian/detectron/experiments/R-50.pkl #预训练模型 
  DATASETS: ('coco_2014_train',) #用到的训练数据集
  SCALES: (800,)
  MAX_SIZE: 1333
  RPN_STRADDLE_THRESH: -1  # default 0
TEST:
  DATASETS: ('coco_2014_train',)  #用到的测试数据集,这里先不做测试的说明,但原理是一样的
  SCALE: 800
  MAX_SIZE: 1333
  NMS: 0.5
  RPN_PRE_NMS_TOP_N: 10000  # Per FPN level
  RPN_POST_NMS_TOP_N: 2000
OUTPUT_DIR: /home/zhangfangjian/detectron/experiments/result #训练结果存放位置

开始训练:这里是用train_net.py文件进行训练的,我采用的是终端调用来训练,而且这个train_net.py是不用修改什么的。那就会有一个问题,怎么把上面的指向路径传给训练本身。答案也很简单,终端的调用代码就有指向了:

python tools/train_net.py     --cfg experiments/retinanet_R-50-FPN_1x.yaml     OUTPUT_DIR experiments/result

 调用train_net.py的同时,会指向yaml训练配置文件,同时yaml内部指定了要用的数据集,则detectron会找到dataset_catalog.py,从而知道训练集是放在哪里。至此,就detectron可以顺利跑了起来了。以下是部分训练过程截图:

detectron训练模型_第4张图片 1
2

 

你可能感兴趣的:(detectron训练模型)