4040## 3. 离线量化流程
4141
4242#### 3.1 准备环境
43- - PaddlePaddle >= 2.3 (可从[ Paddle官网] ( https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html ) 下载安装)
44- - PaddleSlim > 2.3版本
43+ - PaddlePaddle ==2.5 (可从[ Paddle官网] ( https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html ) 下载安装)
44+ - PaddleSlim == 2.5
4545- X2Paddle >= 1.3.9
4646- opencv-python
4747
4848
4949(1)安装paddlepaddle:
5050``` shell
5151# CPU
52- pip install paddlepaddle
52+ python -m pip install paddlepaddle==2.5.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
5353# GPU
54- pip install paddlepaddle-gpu
54+ python -m pip install paddlepaddle-gpu==2.5.0.post116 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
5555```
5656
5757(2)安装paddleslim:
58+ 注意,PaddleSlim这里setup.py需要更改 slim_version='2.5'
5859``` shell
59- pip install paddleslim
60+ git clone -b release/2.5 https://github.com/PaddlePaddle/PaddleSlim.git & cd PaddleSlim
61+ python setup.py install
6062```
6163
6264#### 3.2 准备数据集
@@ -122,7 +124,7 @@ python eval.py --config_path=./configs/yolov5s_ptq.yaml
122124#### 3.6 提高离线量化精度
123125
124126###### 3.6.1 量化分析工具
125- 本节介绍如何使用量化分析工具提升离线量化精度。离线量化功能仅需使用少量数据,且使用简单、能快速得到量化模型,但往往会造成较大的精度损失。PaddleSlim提供量化分析工具,会使用接口``` paddleslim.quant.AnalysisPTQ ``` ,可视化展示出不适合量化的层,通过跳过这些层,提高离线量化模型精度。``` paddleslim.quant.AnalysisPTQ ``` 详解见[ AnalysisPTQ.md ] ( https://github.com/PaddlePaddle/PaddleSlim/blob/develop/docs/zh_cn/tutorials/quant/post_training_quantization.md ) 。
127+ 本节介绍如何使用量化分析工具提升离线量化精度。离线量化功能仅需使用少量数据,且使用简单、能快速得到量化模型,但往往会造成较大的精度损失。PaddleSlim提供量化分析工具,会使用接口``` paddleslim.quant.AnalysisPTQ ``` ,可视化展示出不适合量化的层,通过跳过这些层,提高离线量化模型精度。``` paddleslim.quant.AnalysisPTQ ``` 详解见[ 离线量化 ] ( https://github.com/PaddlePaddle/PaddleSlim/blob/develop/docs/zh_cn/tutorials/quant/post_training_quantization.md ) 。
126128
127129
128130由于YOLOv6离线量化效果较差,以YOLOv6为例,量化分析工具具体使用方法如下:
@@ -208,23 +210,24 @@ python fine_tune.py --config_path=./configs/yolov6s_fine_tune.yaml --simulate_ac
208210## 4.预测部署
209211预测部署可参考[ YOLO系列模型自动压缩示例] ( https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/auto_compression/pytorch_yolo_series )
210212量化模型在GPU上可以使用TensorRT进行加速,在CPU上可以使用MKLDNN进行加速。
211- | 参数名 | 含义 |
212- | model_path | inference模型文件所在路径,该目录下需要有文件model.pdmodel和params.pdiparams两个文件 |
213+ | 参数名 | 含义 |
214+ | :------:| :------:|
215+ | model_path | inference 模型文件所在目录,该目录下需要有文件 model.pdmodel 和 model.pdiparams 两个文件 |
213216| dataset_dir | 指定COCO数据集的目录,这是存储数据集的根目录 |
214217| image_file | 如果只测试单张图片效果,直接根据image_file指定图片路径 |
215218| val_image_dir | COCO数据集中验证图像的目录名,默认为val2017 |
216219| val_anno_path | 指定COCO数据集的注释(annotation)文件路径,这是包含验证集标注信息的JSON文件,默认为annotations/instances_val2017.json |
217220| benchmark | 指定是否运行性能基准测试。如果设置为True,程序将会进行性能测试 |
218- | device | 使用GPU或者CPU预测,可选CPU/GPU/XPU,默认设置为GPU |
219- | use_trt | 是否使用TensorRT进行预测 |
220- | use_mkldnn | 是否使用MKL-DNN加速库,注意use_mkldnn与use_gpu同时为True时,将忽略enable_mkldnn,而使用GPU预测 |
221- | use_dynamic_shape | 是否使用动态形状(dynamic_shape)功能 |
222- | precision | fp32/fp16/int8|
221+ | device | 使用GPU或者CPU预测,可选CPU/GPU/XPU,默认设置为GPU |
222+ | use_trt | 是否使用 TesorRT 预测引擎 |
223+ | use_mkldnn | 是否启用 ``` MKL-DNN ``` 加速库,注意 ``` use_mkldnn ``` 与 ``` use_gpu ``` 同时为 ``` True ``` 时,将忽略 ``` enable_mkldnn ``` ,而使用 ``` GPU ``` 预测 |
224+ | cpu_threads | CPU预测时,使用CPU线程数量,默认10 |
225+ | precision | 预测精度,包括 ` fp32/fp16/int8 ` |
223226| arch | 指定所使用的模型架构的名称,例如YOLOv5 |
224227| img_shape | 指定模型输入的图像尺寸 |
228+ | use_dynamic_shape | 是否使用动态shape,如果使用动态shape,则设置为True,否则设置为False |
225229| batch_size | 指定模型输入的批处理大小 |
226- | use_mkldnn | 指定是否使用MKLDNN加速(主要针对CPU)|
227- | cpu_threads | 指定在CPU上使用的线程数 |
230+
228231
229232首先,我们拥有的yolov6.onnx,我们需要把ONNX模型转成paddle模型,具体参考使用[ X2Paddle迁移推理模型] ( https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/model_convert/convert_with_x2paddle_cn.html#x2paddle )
230233- 安装X2Paddle
@@ -242,7 +245,7 @@ python setup.py install
242245``` shell
243246x2paddle --framework=onnx --model=yolov6s.onnx --save_dir=yolov6_model
244247```
245- - TensorRT Python部署
248+ #### 4.1 TensorRT Python部署
246249使用[ paddle_inference_eval.py] ( https://github.com/PaddlePaddle/PaddleSlim/blob/develop/example/auto_compression/pytorch_yolo_series/paddle_inference_eval.py ) 部署
247250``` shell
248251python paddle_inference_eval.py --model_path=yolov6_model/inference_model --dataset_dir=datasets/coco --use_trt=True --precision=fp32 --arch=YOLOv6
@@ -251,7 +254,11 @@ python paddle_inference_eval.py --model_path=yolov6_model/inference_model --data
251254``` shell
252255python paddle_inference_eval.py --model_path=yolov6s_ptq_out --dataset_dir==datasets/coco --use_trt=True --precision=int8 --arch=YOLOv6
253256```
254- - C++部署
257+ #### 4.2 MKLDNN Python部署
258+ ``` shell
259+ python paddle_inference_eval.py --model_path=yolov6_model/inference_model --dataset_dir=/work/GETR-Lite-paddle-new/inference/datasets/coco --device=CPU --use_mkldnn=True --precision=fp32 --arch=YOLOv6
260+ ```
261+ #### 4.3 C++部署
255262具体可参考[ 运行PP-YOLOE-l目标检测模型样例] ( https://github.com/PaddlePaddle/Paddle-Inference-Demo/tree/master/c%2B%2B/gpu/ppyoloe_crn_l )
256263将compile.sh中DEMO_NAME修改为yolov6_test,并且将ppyoloe_crn_l.cc修改为yolov6_test.cc,根据环境修改相关配置库
257264运行bash compile.sh编译样例。
@@ -272,5 +279,6 @@ python paddle_inference_eval.py --model_path=yolov6s_ptq_out --dataset_dir==data
272279``` shell
273280./build/yolov6_test --model_file yolov6s_infer/model.pdmodel --params_file yolov6s_infer/model.pdiparams --run_mode=trt_int8
274281```
282+
275283## 5.FAQ
276284- 如果想对模型进行自动压缩,可进入[ YOLO系列模型自动压缩示例] ( https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/auto_compression/pytorch_yolo_series ) 中进行实验。
0 commit comments