paddledetection使用solov2进行实例分割操作记录

paddledetection使用solov2进行实例分割操作记录

一、配置paddledetection环境

这一部分参考官方配置文档:https://github.com/PaddlePaddle/PaddleDetection
paddledetection使用solov2进行实例分割操作记录_第1张图片
主要参考安装说明这一节,安装成功后,上图的"30分钟上手PaddleDetection"中有介绍使用yolov3的教程,本次操作将参考其进行操作。

二、使用coco数据集进行solov2训练

1.下载coco数据集
在PaddleDetection/dataset/coco/文件夹下,有个download_coco.py脚本,运行后将会自动下载coco数据集,但是coco数据集较大,下载时慎重考虑!下载后将会在coco文件夹下出现coco数据集的相关数据。
paddledetection使用solov2进行实例分割操作记录_第2张图片

2.solov2配置文件
PaddleDetection/configs/solov2
在该文件夹下,会有几个配置文件,根据自己的设备情况进行选择。本次实验选择solov2_r50_fpn_3x_coco.yml.

_BASE_: [
  '../datasets/coco_instance.yml',
  '../runtime.yml',
  '_base_/solov2_r50_fpn.yml',
  '_base_/optimizer_1x.yml',
  '_base_/solov2_reader.yml',
]
weights: output/solov2_r50_fpn_3x_coco/model_final
epoch: 36

LearningRate:
  base_lr: 0.01
  schedulers:
  - !PiecewiseDecay
    gamma: 0.1
    milestones: [24, 33]
  - !LinearWarmup
    start_factor: 0.
    steps: 1000

TrainReader:
  sample_transforms:
  - Decode: {}
  - Poly2Mask: {}
  - RandomResize: {interp: 1,
                     target_size: [[640, 1333], [672, 1333], [704, 1333], [736, 1333], [768, 1333], [800, 1333]],
                     keep_ratio: True}
  - RandomFlip: {}
  - NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
  - Permute: {}
  batch_transforms:
  - PadBatch: {pad_to_stride: 32}
  - Gt2Solov2Target: {num_grids: [40, 36, 24, 16, 12],
                        scale_ranges: [[1, 96], [48, 192], [96, 384], [192, 768], [384, 2048]],
                        coord_sigma: 0.2}
  batch_size: 1
  shuffle: true
  drop_last: true

其中该配置文件还需要链接以下配置文件

_BASE_: [
  '../datasets/coco_instance.yml',
  '../runtime.yml',
  '_base_/solov2_r50_fpn.yml',
  '_base_/optimizer_1x.yml',
  '_base_/solov2_reader.yml',
]

…/datasets/coco_instance.yml:表示训练数据和验证数据的路径
…/runtime.yml: 表示公共的运行参数,比如说是否使用GPU、每多少个epoch存储checkpoint等
base/solov2_r50_fpn.yml: 表示模型、和主干网络的情况
base/optimizer_1x.yml: 表示学习率和优化器的配置
base/solov2_reader.yml: 数据读取器配置,如batch size,并发加载子进程数等,同时包含读取后预处理操作,如resize、数据增强等等。
3.训练train指令
在PaddleDetection目录下,终端输入:

export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/train.py -c configs/solov2/solov2_r50_fpn_3x_coco.yml

paddledetection使用solov2进行实例分割操作记录_第3张图片

三、评估

在PaddleDetection目录下,终端输入:

export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/eval.py -c configs/solov2/solov2_r50_fpn_3x_coco.yml -o weights=/home/cj/chaintwork/paddledetection/PaddleDetection/output/solov2_r50_fpn_3x_coco.pdparams

将后面的模型文件替换成自己训练好的模型,这里因为我的电脑训练时间太久,选择使用官方的模型进行评估。
模型下载路径:

https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/configs/solov2/README.md

paddledetection使用solov2进行实例分割操作记录_第4张图片

四、预测

输入指令

python tools/infer.py -c configs/solov2/solov2_r50_fpn_3x_coco.yml --infer_img=demo/hrnet_demo.jpg -o weights=/home/cj/chaintwork/paddledetection/PaddleDetection/output/solov2_r50_fpn_3x_coco.pdparams

在output中输出结果
paddledetection使用solov2进行实例分割操作记录_第5张图片

五、模型导出

终端输入

python tools/export_model.py -c configs/solov2/solov2_r50_fpn_3x_coco.yml --output_dir=./inference_model -o weights=/home/cj/chaintwork/paddledetection/PaddleDetection/output/solov2_r50_fpn_3x_coco.pdparams

在PaddleDetection/inference_model/solov2_r50_fpn_3x_coco/下会出现如下文件
paddledetection使用solov2进行实例分割操作记录_第6张图片

六、模型预测部署python

预测图像指令

python deploy/python/infer.py --model_dir=./inference_model/solov2_r50_fpn_3x_coco --image_file=demo/000000014439.jpg --device=GPU

预测文件夹指令

python deploy/python/infer.py --model_dir=./inference_model/solov2_r50_fpn_3x_coco --image_dir=demo --device=GPU

摄像头检测

python deploy/python/infer.py --model_dir=./inference_model/solov2_r50_fpn_3x_coco --device=GPU --camera_id=0

速度还是不错的。
参数含义如下:
paddledetection使用solov2进行实例分割操作记录_第7张图片

七、C++部署

1.切换gcc版本
先进入PaddlePaddle C++ 预测库
根据自身情况进行选择。我是cuda11.2+gcc8.2。
1)查看目前gcc版本

gcc -v

paddledetection使用solov2进行实例分割操作记录_第8张图片
2)如果版本不对
参考:ubuntu 下gcc版本查看及切换
未完待续!

你可能感兴趣的:(work,python,深度学习,人工智能)