目录:
本示例将以目标检测模型PP-YOLOE为例,介绍如何使用PaddleDetection中Inference部署模型进行自动压缩。本示例使用的自动压缩策略为量化蒸馏。
模型 | Base mAP | 离线量化mAP | ACT量化mAP | TRT-FP32 | TRT-FP16 | TRT-INT8 | 配置文件 | 量化模型 |
---|---|---|---|---|---|---|---|---|
PP-YOLOE-l | 50.9 | - | 50.6 | 11.2ms | 7.7ms | 6.7ms | config | Model |
PP-YOLOE-s | 43.1 | 41.2 | 42.6 | 6.51ms | 2.77ms | 2.12ms | config | Model |
- mAP的指标均在COCO val2017数据集中评测得到,IoU=0.5:0.95。
- PP-YOLOE-l模型在Tesla V100的GPU环境下测试,并且开启TensorRT,batch_size=1,包含NMS,测试脚本是benchmark demo。
- PP-YOLOE-s模型在Tesla T4,TensorRT 8.4.1,CUDA 11.2,batch_size=1,不包含NMS,测试脚本是cpp_infer_ppyoloe。
- PaddlePaddle >= 2.3 (可从Paddle官网下载安装)
- PaddleSlim >= 2.3
- PaddleDet >= 2.4
- opencv-python
安装paddlepaddle:
# CPU
pip install paddlepaddle==2.3.2
# GPU 以Ubuntu、CUDA 11.2为例
python -m pip install paddlepaddle-gpu==2.3.2.post112 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
安装paddleslim:
pip install paddleslim
安装paddledet:
pip install paddledet
注:安装PaddleDet的目的是为了直接使用PaddleDetection中的Dataloader组件。
本案例默认以COCO数据进行自动压缩实验,如果自定义COCO数据,或者其他格式数据,请参考PaddleDetection数据准备文档 来准备数据。
如果数据集为非COCO格式数据,请修改configs中reader配置文件中的Dataset字段。
以PP-YOLOE模型为例,如果已经准备好数据集,请直接修改[./configs/yolo_reader.yml]中EvalDataset
的dataset_dir
字段为自己数据集路径即可。
预测模型的格式为:model.pdmodel
和 model.pdiparams
两个,带pdmodel
的是模型文件,带pdiparams
后缀的是权重文件。
注:其他像__model__
和__params__
分别对应model.pdmodel
和 model.pdiparams
文件。
根据PaddleDetection文档 导出Inference模型,具体可参考下方PP-YOLOE模型的导出示例:
- 下载代码
git clone https://github.com/PaddlePaddle/PaddleDetection.git
- 导出预测模型
PPYOLOE-l模型,包含NMS:如快速体验,可直接下载PP-YOLOE-l导出模型
python tools/export_model.py \
-c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml \
-o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams \
trt=True \
PPYOLOE-s模型,不包含NMS:如快速体验,可直接下载PP-YOLOE-s导出模型
python tools/export_model.py \
-c configs/ppyoloe/ppyoloe_crn_s_300e_coco.yml \
-o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_s_300e_coco.pdparams \
trt=True exclude_post_process=True \
蒸馏量化自动压缩示例通过run.py脚本启动,会使用接口paddleslim.auto_compression.AutoCompression
对模型进行自动压缩。配置config文件中模型路径、蒸馏、量化、和训练等部分的参数,配置完成后便可对模型进行量化和蒸馏。具体运行命令为:
- 单卡训练:
export CUDA_VISIBLE_DEVICES=0
python run.py --config_path=./configs/ppyoloe_l_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/ppyoloe_l_qat_dis.yaml --save_dir='./output/'
使用eval.py脚本得到模型的mAP:
export CUDA_VISIBLE_DEVICES=0
python eval.py --config_path=./configs/ppyoloe_l_qat_dis.yaml
注意:
- 要测试的模型路径可以在配置文件中
model_dir
字段下进行修改。
-
如果模型包含NMS,可以参考PaddleDetection部署教程,GPU上量化模型开启TensorRT并设置trt_int8模式进行部署。
-
模型为PPYOLOE,同时不包含NMS,使用以下预测demo进行部署:
- Paddle-TensorRT C++部署
进入cpp_infer文件夹内,请按照C++ TensorRT Benchmark测试教程进行准备环境及编译,然后开始测试:
# 编译 bash complie.sh # 执行 ./build/trt_run --model_file ppyoloe_s_quant/model.pdmodel --params_file ppyoloe_s_quant/model.pdiparams --run_mode=trt_int8
- Paddle-TensorRT Python部署:
首先安装带有TensorRT的Paddle安装包。然后使用paddle_trt_infer.py进行部署:
python paddle_trt_infer.py --model_path=output --image_file=images/000000570688.jpg --benchmark=True --run_mode=trt_int8
- 如果想对模型进行离线量化,可进入Detection模型离线量化示例中进行实验。