40
40
## 3. 离线量化流程
41
41
42
42
#### 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
45
45
- X2Paddle >= 1.3.9
46
46
- opencv-python
47
47
48
48
49
49
(1)安装paddlepaddle:
50
50
``` shell
51
51
# CPU
52
- pip install paddlepaddle
52
+ python -m pip install paddlepaddle==2.5.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
53
53
# 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
55
55
```
56
56
57
57
(2)安装paddleslim:
58
+ 注意,PaddleSlim这里setup.py需要更改 slim_version='2.5'
58
59
``` 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
60
62
```
61
63
62
64
#### 3.2 准备数据集
@@ -122,7 +124,7 @@ python eval.py --config_path=./configs/yolov5s_ptq.yaml
122
124
#### 3.6 提高离线量化精度
123
125
124
126
###### 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 ) 。
126
128
127
129
128
130
由于YOLOv6离线量化效果较差,以YOLOv6为例,量化分析工具具体使用方法如下:
@@ -208,23 +210,24 @@ python fine_tune.py --config_path=./configs/yolov6s_fine_tune.yaml --simulate_ac
208
210
## 4.预测部署
209
211
预测部署可参考[ YOLO系列模型自动压缩示例] ( https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/auto_compression/pytorch_yolo_series )
210
212
量化模型在GPU上可以使用TensorRT进行加速,在CPU上可以使用MKLDNN进行加速。
211
- | 参数名 | 含义 |
212
- | model_path | inference模型文件所在路径,该目录下需要有文件model.pdmodel和params.pdiparams两个文件 |
213
+ | 参数名 | 含义 |
214
+ | :------:| :------:|
215
+ | model_path | inference 模型文件所在目录,该目录下需要有文件 model.pdmodel 和 model.pdiparams 两个文件 |
213
216
| dataset_dir | 指定COCO数据集的目录,这是存储数据集的根目录 |
214
217
| image_file | 如果只测试单张图片效果,直接根据image_file指定图片路径 |
215
218
| val_image_dir | COCO数据集中验证图像的目录名,默认为val2017 |
216
219
| val_anno_path | 指定COCO数据集的注释(annotation)文件路径,这是包含验证集标注信息的JSON文件,默认为annotations/instances_val2017.json |
217
220
| 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 ` |
223
226
| arch | 指定所使用的模型架构的名称,例如YOLOv5 |
224
227
| img_shape | 指定模型输入的图像尺寸 |
228
+ | use_dynamic_shape | 是否使用动态shape,如果使用动态shape,则设置为True,否则设置为False |
225
229
| batch_size | 指定模型输入的批处理大小 |
226
- | use_mkldnn | 指定是否使用MKLDNN加速(主要针对CPU)|
227
- | cpu_threads | 指定在CPU上使用的线程数 |
230
+
228
231
229
232
首先,我们拥有的yolov6.onnx,我们需要把ONNX模型转成paddle模型,具体参考使用[ X2Paddle迁移推理模型] ( https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/model_convert/convert_with_x2paddle_cn.html#x2paddle )
230
233
- 安装X2Paddle
@@ -242,7 +245,7 @@ python setup.py install
242
245
``` shell
243
246
x2paddle --framework=onnx --model=yolov6s.onnx --save_dir=yolov6_model
244
247
```
245
- - TensorRT Python部署
248
+ #### 4.1 TensorRT Python部署
246
249
使用[ paddle_inference_eval.py] ( https://github.com/PaddlePaddle/PaddleSlim/blob/develop/example/auto_compression/pytorch_yolo_series/paddle_inference_eval.py ) 部署
247
250
``` shell
248
251
python 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
251
254
``` shell
252
255
python paddle_inference_eval.py --model_path=yolov6s_ptq_out --dataset_dir==datasets/coco --use_trt=True --precision=int8 --arch=YOLOv6
253
256
```
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++部署
255
262
具体可参考[ 运行PP-YOLOE-l目标检测模型样例] ( https://github.com/PaddlePaddle/Paddle-Inference-Demo/tree/master/c%2B%2B/gpu/ppyoloe_crn_l )
256
263
将compile.sh中DEMO_NAME修改为yolov6_test,并且将ppyoloe_crn_l.cc修改为yolov6_test.cc,根据环境修改相关配置库
257
264
运行bash compile.sh编译样例。
@@ -272,5 +279,6 @@ python paddle_inference_eval.py --model_path=yolov6s_ptq_out --dataset_dir==data
272
279
``` shell
273
280
./build/yolov6_test --model_file yolov6s_infer/model.pdmodel --params_file yolov6s_infer/model.pdiparams --run_mode=trt_int8
274
281
```
282
+
275
283
## 5.FAQ
276
284
- 如果想对模型进行自动压缩,可进入[ YOLO系列模型自动压缩示例] ( https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/auto_compression/pytorch_yolo_series ) 中进行实验。
0 commit comments