README.md 5.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
# 目标检测模型全量化示例

目录:
- [1.简介](#1简介)
- [2.Benchmark](#2Benchmark)
- [3.开始全量化](#全量化流程)
  - [3.1 环境准备](#31-准备环境)
  - [3.2 准备数据集](#32-准备数据集)
  - [3.3 准备预测模型](#33-准备预测模型)
  - [3.4 测试模型精度](#34-测试模型精度)
  - [3.5 全量化并产出模型](#35-全量化并产出模型)
- [4.预测部署](#4预测部署)
- [5.FAQ](5FAQ)

## 1. 简介
本示例将以目标检测模型PicoDet为例,介绍如何使用PaddleDetection中Inference部署模型进行全量化。本示例使用的全量化策略为全量化加蒸馏。


## 2.Benchmark

### PicoDet-S-NPU

C
Chang Xu 已提交
23 24
| 模型  | 策略 | mAP | TRT-FP32 | TRT-FP16 | TRT-INT8 |  配置文件 | 模型  |
| :-------- |:-------- |:--------: | :----------------: | :----------------: | :---------------: | :----------------------: | :---------------------: |
G
Guanghua Yu 已提交
25
| PicoDet-S-NPU | Baseline | 30.1   |   -   |  -  |  -  | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_416_coco_npu.yml) | [带后处理](https://bj.bcebos.com/v1/paddle-slim-models/act/picodet_s_416_coco_npu.tar) | [不带后处理](https://bj.bcebos.com/v1/paddle-slim-models/act/picodet_s_416_coco_npu_no_postprocess.tar) |
G
Guanghua Yu 已提交
26
| PicoDet-S-NPU |  量化训练 | 29.7  |   -  |   -   |  -  |  [config](https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/full_quantization/picodet/configs/picodet_npu_with_postprocess.yaml) | [Model](https://bj.bcebos.com/v1/paddle-slim-models/act/picodet_s_npu_quant.tar) |
27 28 29 30 31 32 33

- mAP的指标均在COCO val2017数据集中评测得到,IoU=0.5:0.95。

## 3. 全量化流程

#### 3.1 准备环境
- PaddlePaddle >= 2.3 (可从[Paddle官网](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html)下载安装)
34
- PaddleSlim >= 2.3.4
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
- PaddleDet >= 2.4
- opencv-python

安装paddlepaddle:
```shell
# CPU
pip install paddlepaddle
# GPU
pip install paddlepaddle-gpu
```

安装paddleslim:
```shell
pip install paddleslim
```

安装paddledet:
```shell
pip install paddledet
```
注:安装PaddleDet的目的是为了直接使用PaddleDetection中的Dataloader组件。


#### 3.2 准备数据集

本案例默认以COCO数据进行全量化实验,如果自定义COCO数据,或者其他格式数据,请参考[PaddleDetection数据准备文档](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/docs/tutorials/PrepareDataSet.md) 来准备数据。

如果数据集为非COCO格式数据,请修改[configs](./configs)中reader配置文件中的Dataset字段。

以PicoDet-S-NPU模型为例,如果已经准备好数据集,请直接修改[./configs/picodet_reader.yml]中`EvalDataset``dataset_dir`字段为自己数据集路径即可。

#### 3.3 准备预测模型

预测模型的格式为:`model.pdmodel``model.pdiparams`两个,带`pdmodel`的是模型文件,带`pdiparams`后缀的是权重文件。

根据[PaddleDetection文档](https://github.com/PaddlePaddle/PaddleDetection/blob/develop/docs/tutorials/GETTING_STARTED_cn.md#8-%E6%A8%A1%E5%9E%8B%E5%AF%BC%E5%87%BA) 导出Inference模型,具体可参考下方PicoDet-S-NPU模型的导出示例:
- 下载代码
```
git clone https://github.com/PaddlePaddle/PaddleDetection.git
```
- 导出预测模型

G
Guanghua Yu 已提交
77
PicoDet-S-NPU模型,包含后处理:如快速体验,可直接下载[PicoDet-S-NPU带后处理导出模型](https://bj.bcebos.com/v1/paddle-slim-models/act/picodet_s_416_coco_npu.tar)
78 79 80 81 82 83
```shell
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 \
```

G
Guanghua Yu 已提交
84
导出PicoDet-S-NPU不带后处理模型:(也可直接下载[PicoDet-S-NPU不带后处理导出模型](https://bj.bcebos.com/v1/paddle-slim-models/act/picodet_s_416_coco_npu_no_postprocess.tar)
85 86 87 88 89 90
```shell
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 \
        export.benchmark=True
```
91 92 93 94 95 96 97 98

#### 3.4 全量化并产出模型

全量化示例通过run.py脚本启动,会使用接口```paddleslim.auto_compression.AutoCompression```对模型进行全量化。配置config文件中模型路径、蒸馏、量化、和训练等部分的参数,配置完成后便可对模型进行量化和蒸馏。具体运行命令为:

- 单卡训练:
```
export CUDA_VISIBLE_DEVICES=0
99
python run.py --config_path=./configs/picodet_npu_with_postprocess.yaml --save_dir='./output/'
100 101 102 103 104 105
```

- 多卡训练:
```
CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch --log_dir=log --gpus 0,1,2,3 run.py \
106 107 108 109 110 111 112
          --config_path=./configs/picodet_npu_with_postprocess.yaml --save_dir='./output/'
```

- 不带后处理PicoDet模型训练:
```
export CUDA_VISIBLE_DEVICES=0
python run.py --config_path=./configs/picodet_npu.yaml --save_dir='./output/'
113 114 115 116
```

#### 3.5 测试模型精度

G
Guanghua Yu 已提交
117
- 使用eval.py脚本得到模型的mAP:
118 119
```
export CUDA_VISIBLE_DEVICES=0
120
python eval.py --config_path=./configs/picodet_npu_with_postprocess.yaml
121 122
```

G
Guanghua Yu 已提交
123 124 125 126 127 128 129
- 使用ONNXRuntime测试模型mAP:
```
python onnxruntime_eval.py \
        --reader_config=configs/picodet_reader.yml \
        --model_path=picodet_s_416_coco_npu.onnx
```

130 131 132 133 134 135 136
**注意**
- 要测试的模型路径可以在配置文件中`model_dir`字段下进行修改。

## 4.预测部署


## 5.FAQ