深度学习 一条命令训练自己的模型

基于Detectron

支持

  • Mask R-CNN -- Marr Prize at ICCV 2017
  • RetinaNet -- Best Student Paper Award at ICCV 2017
  • Faster R-CNN
  • RPN
  • Fast R-CNN
  • R-FCN

使用以下骨干网络结构:

  • ResNeXt{50,101,152}
  • ResNet{50,101,152}
  • Feature Pyramid Networks (with ResNet/ResNeXt)
  • VGG16

更多详细信息,请参阅下面的 References

准备数据集

demo默认使用powerAi(未发布)导出的数据集格式
使用其他的coco数据集,需要运行docker时重新映射start_run.sh文件到/Detectron目录

#!/bin/bash
# writen by  start_run.sh 内容
nohup visdom &
train -c /Detectron/detectron/datasets/data/tutorial_faster_rcnn_R-50-FPN.yaml > /Detectron/detectron/datasets/data/result.log

训练

  • 需要安装 nvidia-docker(GPU只支持linux ,其他系统可以拉取镜像registry.cn-hangzhou.aliyuncs.com/baymin/wfylozj:deeplearning-auto-v1.8,在docker下使用cpu训练)
    提供linux下shell执行脚本

执行./run.sh 数据集路径 如果标签数变更修改下面的NUM_CLASSES=标签数+1

#!/bin/bash
# writen by 
#AI Power软件导出的文件需要处理
#mkdir -p train/coco/annotations train/coco/coco_train2014 train/coco/coco_val2014
#mv *.png train/coco/coco_train2014
#cp train/coco/coco_train2014/*.png train/coco/coco_val2014
#mv *.pjson train/coco/coco_train2014
#end
path=$1
port=8097
while :
do
        if netstat -tlpn | grep $port
        then
                echo "端口占用"
                port=`expr $port + 1`
        else
                echo "$port端口可用"
                break
        fi
done
#默认单张gup训练,如需更改其他配置或者网络替换下面的tutorial_faster_rcnn_R-50-FPN.yaml内容
tee train/tutorial_faster_rcnn_R-50-FPN.yaml <<-'EOF'
MODEL:
  TYPE: generalized_rcnn
  CONV_BODY: FPN.add_fpn_ResNet50_conv5_body
  NUM_CLASSES: 5 # label num +1
  FASTER_RCNN: True
NUM_GPUS: 1
SOLVER:
  WEIGHT_DECAY: 0.0001
  LR_POLICY: steps_with_decay
  GAMMA: 0.1
  BASE_LR: 0.0025
  MAX_ITER: 60000
  STEPS: [0, 30000, 40000]
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
TRAIN:
  WEIGHTS: /Detectron/models/R-50.pkl #https://dl.fbaipublicfiles.com/detectron/ImageNetPretrained/MSRA/R-50.pkl
  DATASETS: ('coco_2014_train',)
  SCALES: (500,)
  MAX_SIZE: 833
  BATCH_SIZE_PER_IM: 256
  RPN_PRE_NMS_TOP_N: 2000  # Per FPN level
TEST:
  DATASETS: ('coco_2014_minival',)
  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: .
EOF
sudo nvidia-docker run -d -p $port:8097 -v $path:/Detectron/detectron/datasets/data --name training-$port registry.cn-hangzhou.aliyuncs.com/baymin/wfylozj:deeplearning-auto-v1.8
sleep 2
x-www-browser http://localhost:$port

查看训练情况

训练结果会保存在上面训练输入的数据集路径下的result目录

深度学习 一条命令训练自己的模型_第1张图片
image.png

验证

sudo nvidia-docker exec -it training-8097 /bin/bash
#python tools/infer_simple_test.py --cfg 配置文件 --output-dir 结果路径 --wts 模型文件(result下) 需要验证的文件夹路径
python tools/infer_simple_test.py --cfg detectron/datasets/data/tutorial_faster_rcnn_R-50-FPN.yaml --output-dir detectron/datasets/data/test --wts detectron/datasets/data/result/train/coco_2014_train/generalized_rcnn/model_iter59999.pkl detectron/datasets/data/coco/coco_val2014/

更多内容

可以进入容器查看

root@a19ad8ff7aa8:/Detectron# cat FirstREADME.txt
0.需要更改镜像初始化运行可以重新映射start_run.sh到/Detectron

1.powerAI软件的数据集转coco数据集使用
usage:  transform       -d  需要转换的文件夹目录,powerai导出的数据,可以保护多个pjson文件,但是所有文件必须是在同级目录
                        -o  转换后输出的文件路径 比如训练文件 /Detectron/detectron/datasets/data/coco/annotations/instances_train2014.json
                        -t  需要转换的文件类型 "pjson"
                        -n  是否后台运行
                        -h  帮助

2.开始训练
usage:  train   -c  训练的cfg文件路径
                -d  训练结果保存路径 default:"detectron/datasets/data/result"
                -n  是否后台运行
                -h  帮助

3.验证数据
python tools/infer_simple_test.py --cfg detectron/datasets/data/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml --output-dir detectron/datasets/data/test --wts detectron/datasets/data/result/train/coco_2014_train/generalized_rcnn/model_iter59999.pkl detectron/datasets/data/coco/coco_val2014/

demo下载提取码: 6us5

你可能感兴趣的:(深度学习 一条命令训练自己的模型)