PicoDet 训练自己的数据集(COCO)

PP-PicoDet算法源码:GitHub源码地址

1. 环境配置

1.1 conda 安装 paddlepaddle

conda create -n paddle python=3.8  # 创建python环境
conda activate paddle  # 进入环境

飞桨官网选择合适的安装版本安装

PicoDet 训练自己的数据集(COCO)_第1张图片

python -m pip install paddlepaddle-gpu==2.3.2.post116 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

安装环境验证
使用python进入python解释器,输入

import paddle.fluid
paddle.fluid.install_check.run_check()

如果出现“Your Paddle Fluid is installed succesfully!”,说明您已成功安装。
PicoDet 训练自己的数据集(COCO)_第2张图片
如果希望在多卡环境下使用PaddleDetection,请首先安装NCCL 2。NCCL是Nvidia Collective multi-GPU Communication Library的简称,它是一个实现多GPU的collective communication通信(all-gather, reduce, broadcast)库,Nvidia做了很多优化。
conda 安装 nccl :

conda install -c conda-forge nccl

或者

conda install -c conda-forge/label/cf202003 nccl

1.2 安装 PaddleDetection

PaddleDetection是百度基于paddlepaddle开发的目标检测开发套件,提供了从数据准备、模型训练、模型评估、模型导出到模型部署的全流程。

git clone https://github.com/PaddlePaddle/PaddleDetection.git
cd PaddleDetection
pip install -r requirements.txt
python setup.py install

检查是否安装成功:

python ppdet/modeling/tests/test_architectures.py

在这里插入图片描述
目标检测测试

# 在GPU上预测一张图片
export CUDA_VISIBLE_DEVICES=0
python tools/infer.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml -o use_gpu=true weights=https://paddledet.bj.bcebos.com/models/ppyolo_r50vd_dcn_1x_coco.pdparams --infer_img=demo/000000014439.jpg

在这里插入图片描述
PicoDet 训练自己的数据集(COCO)_第3张图片

2. PicoDet 训练自己的数据集(COCO)

2.1 数据集格式

如何自定义数据集

2.2 修改配置文件

参考:30分钟快速上手PaddleDetection

主配置文件,如

PaddleDetection/configs/picodet/picodet_l_320_coco_lcnet.yml

主配置文件需要依赖以下文件:

  '../datasets/coco_detection.yml', #主要说明了训练数据和验证数据的路径
  '../runtime.yml', #主要说明了公共的运行参数,比如说是否使用GPU、每多少个epoch存储checkpoint等
  '_base_/picodet_v2.yml', #主要说明模型、和主干网络的情况
  '_base_/optimizer_300e.yml', #主要说明了学习率和优化器的配置
  '_base_/picodet_320_reader.yml',#主要说明数据读取器配置,如batch size,并发加载子进程数等,同时包含读取后预处理操作,如resize、数据增强等等

注意 :
各模块配置文件的配置参数可以直接copy到主配置文件中进行修改。在主配置文件中重写的配置参数会覆盖掉加载的配置参数。

建议使用在主配置文件重写的方式,如重置 coco_detection.yml 中的项目类别和数据路径, 在主配置文件中增加以下设置:

num_classes: 3

TrainDataset:
  !COCODataSet
    image_dir: JPEGImages
    anno_path: train.json
    dataset_dir: dataset/coco
    data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']

EvalDataset:
  !COCODataSet
    image_dir: JPEGImages
    anno_path: val.json
    dataset_dir: dataset/coco

TestDataset:
  !ImageFolder
    anno_path: val.json
    dataset_dir: dataset/coco

3. 训练

PaddleDetection提供了单卡/多卡训练模式,满足用户多种训练需求;
GPU单卡训练

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

GPU多卡训练

export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 #windows和Mac下不需要执行该命令
python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 tools/train.py \ 
-c configs/picodet/picodet_s_320_coco_lcnet.yml \
--eval --use_vdl=true\
--vdl_log_dir=vsdl_logs/picodet_s_320_coco_lcnet \
--amp

4. 模型转换

导出模型

python ../PaddleDetection/tools/export_model.py -c ./configs/picodet_s_320_coco_lcnet.yml  -o weights=./output/picodet_s_320_coco_lcnet/best_model.pdparams export.benchmark=True --output_dir=./onnx_out

模型转ONNX

paddle2onnx --model_dir onnx_out/picodet_s_320_coco_lcnet\
	--model_filename model.pdmodel  \
	--params_filename model.pdiparams \
	--opset_version 11 \
	--save_file picodet_s_320_coco_lcnet.onnx

模型转MNN

pip install MNN
python3 -m MNN.tools.mnnconvert -f ONNX --modelFile picodet_s_320_coco_lcnet.onnx --MNNModel picodet_s_320_coco_lcnet.mnn --bizCode MNN

你可能感兴趣的:(深度学习,目标检测,python,深度学习,开发语言)