PP-PicoDet算法源码:GitHub源码地址
conda create -n paddle python=3.8 # 创建python环境
conda activate paddle # 进入环境
飞桨官网选择合适的安装版本安装
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!”,说明您已成功安装。
如果希望在多卡环境下使用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
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
如何自定义数据集
参考: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
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
导出模型
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