目录:
本示例以PicoDet为例,介绍从模型训练、模型全量化,到NPU硬件上部署的全流程。
Benchmark表格中已经提供了基于COCO数据预训练模型全量化的模型。
已经验证的NPU硬件:
瑞芯微-开发板:Rockchip RV1109、Rockchip RV1126、Rockchip RK1808
晶晨-开发板:Amlogic A311D、Amlogic S905D3、Amlogic C308X
恩智浦-开发板:NXP i.MX 8M Plus
未验证硬件部署思路:
未验证,表示该硬件暂不支持Paddle Lite推理部署,可以选择Paddle2ONNX导出,使用硬件的推理引擎完成部署,前提该硬件支持ONNX的全量化模型。
模型 | 策略 | mAP | FP32 | INT8 | 配置文件 | 模型 |
---|---|---|---|---|---|---|
PicoDet-S-NPU | Baseline | 30.1 | - | - | config | Model |
PicoDet-S-NPU | 量化训练 | 29.7 | - | - | config | Model |
基于自己数据训练的模型,可以参考如下流程。
安装paddlepaddle:
# CPU
pip install paddlepaddle
# GPU
pip install paddlepaddle-gpu
安装paddleslim:
pip install paddleslim
安装paddledet:
pip install paddledet
本案例默认以COCO数据进行全量化实验,如果自定义数据,可将数据按照COCO数据的标准准备;其他自定义数据,可以参考PaddleDetection数据准备文档 来准备。
以PicoDet-S-NPU模型为例,如果已经准备好数据集,请直接修改picodet_reader.yml中EvalDataset
的dataset_dir
字段为自己数据集路径即可。
如需模型全量化,需要准备一个训好的全精度模型,如果已训好模型可跳过该步骤。
# training on single-GPU
export CUDA_VISIBLE_DEVICES=0
python tools/train.py -c configs/picodet/picodet_s_416_coco_npu.yml --eval
注意:如果训练时显存out memory,将TrainReader中batch_size调小,同时LearningRate中base_lr等比例减小。同时我们发布的config均由4卡训练得到,如果改变GPU卡数为1,那么base_lr需要减小4倍。
# training on multi-GPU
export CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/picodet/picodet_s_416_coco_npu.yml --eval
注意:PicoDet所有模型均由4卡GPU训练得到,如果改变训练GPU卡数,需要按线性比例缩放学习率base_lr。
python tools/eval.py -c configs/picodet/picodet_s_416_coco_npu.yml \
-o weights=https://paddledet.bj.bcebos.com/models/picodet_s_416_coco_npu.pdparams
使用如下命令,导出Inference模型,用于全量化训练。导出模型默认存放在output_inference
文件夹,包括.pdmodel和.pdiparams文件,用于全量化。
python tools/export_model.py \
-c configs/picodet/picodet_s_416_coco_npu.yml \
-o weights=https://paddledet.bj.bcebos.com/models/picodet_s_416_coco_npu.pdparams \
cd deploy/auto_compression/
全量化示例通过run.py脚本启动,会使用接口paddleslim.auto_compression.AutoCompression
对模型进行全量化。配置config文件中模型路径、蒸馏、量化、和训练等部分的参数,配置完成后便可对模型进行量化和蒸馏。具体运行命令为:
export CUDA_VISIBLE_DEVICES=0
python run.py --config_path=./configs/picodet_s_qat_dis.yaml --save_dir='./output/'
CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch --log_dir=log --gpus 0,1,2,3 run.py \
--config_path=./configs/picodet_s_qat_dis.yaml --save_dir='./output/'
output
文件夹下,训练完成后,测试全量化模型精度将config要测试的模型路径可以在配置文件中model_dir
字段下进行修改。使用eval.py脚本得到模型的mAP:
export CUDA_VISIBLE_DEVICES=0
python eval.py --config_path=./configs/picodet_s_qat_dis.yaml
请直接使用PicoDet的Paddle Lite全量化Demo进行落地部署。