commit
de5c741a91
|
@ -1,21 +1,148 @@
|
|||
> 运行示例前请先安装1.2.0或更高版本PaddleSlim
|
||||
|
||||
|
||||
# 模型量化压缩教程
|
||||
|
||||
压缩结果:
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>任务</th>
|
||||
<th>模型</th>
|
||||
<th>压缩策略</th>
|
||||
<th>精度(自建中文数据集)</th>
|
||||
<th>耗时(ms)</th>
|
||||
<th>整体耗时(ms)</th>
|
||||
<th>加速比</th>
|
||||
<th>整体模型大小(M)</th>
|
||||
<th>压缩比例</th>
|
||||
<th>下载链接</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td rowspan="2">0</td>
|
||||
<td>检测</td>
|
||||
<td>MobileNetV3_DB</td>
|
||||
<td>无</td>
|
||||
<td>61.7</td>
|
||||
<td>224</td>
|
||||
<td rowspan="2">375</td>
|
||||
<td rowspan="2">-</td>
|
||||
<td rowspan="2">8.6</td>
|
||||
<td rowspan="2">-</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>识别</td>
|
||||
<td>MobileNetV3_CRNN</td>
|
||||
<td>无</td>
|
||||
<td>62.0</td>
|
||||
<td>9.52</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">1</td>
|
||||
<td>检测</td>
|
||||
<td>SlimTextDet</td>
|
||||
<td>PACT量化训练</td>
|
||||
<td>62.1</td>
|
||||
<td>195</td>
|
||||
<td rowspan="2">348</td>
|
||||
<td rowspan="2">8%</td>
|
||||
<td rowspan="2">2.8</td>
|
||||
<td rowspan="2">67.82%</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>识别</td>
|
||||
<td>SlimTextRec</td>
|
||||
<td>PACT量化训练</td>
|
||||
<td>61.48</td>
|
||||
<td>8.6</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">2</td>
|
||||
<td>检测</td>
|
||||
<td>SlimTextDet_quat_pruning</td>
|
||||
<td>剪裁+PACT量化训练</td>
|
||||
<td>60.86</td>
|
||||
<td>142</td>
|
||||
<td rowspan="2">288</td>
|
||||
<td rowspan="2">30%</td>
|
||||
<td rowspan="2">2.8</td>
|
||||
<td rowspan="2">67.82%</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>识别</td>
|
||||
<td>SlimTextRec</td>
|
||||
<td>PACT量化训练</td>
|
||||
<td>61.48</td>
|
||||
<td>8.6</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">3</td>
|
||||
<td>检测</td>
|
||||
<td>SlimTextDet_pruning</td>
|
||||
<td>剪裁</td>
|
||||
<td>61.57</td>
|
||||
<td>138</td>
|
||||
<td rowspan="2">295</td>
|
||||
<td rowspan="2">27%</td>
|
||||
<td rowspan="2">2.9</td>
|
||||
<td rowspan="2">66.28%</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>识别</td>
|
||||
<td>SlimTextRec</td>
|
||||
<td>PACT量化训练</td>
|
||||
<td>61.48</td>
|
||||
<td>8.6</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
## 概述
|
||||
|
||||
复杂的模型有利于提高模型的性能,但也导致模型中存在一定冗余,模型量化将全精度缩减到定点数减少这种冗余,达到减少模型计算复杂度,提高模型推理性能的目的。
|
||||
|
||||
该示例使用PaddleSlim提供的[量化压缩API](https://paddlepaddle.github.io/PaddleSlim/api/quantization_api/)对OCR模型进行压缩。
|
||||
在阅读该示例前,建议您先了解以下内容:
|
||||
|
||||
- [OCR模型的常规训练方法](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/detection.md)
|
||||
- [PaddleSlim使用文档](https://paddlepaddle.github.io/PaddleSlim/)
|
||||
- [PaddleSlim使用文档](https://paddleslim.readthedocs.io/zh_CN/latest/index.html)
|
||||
|
||||
|
||||
|
||||
## 安装PaddleSlim
|
||||
可按照[PaddleSlim使用文档](https://paddlepaddle.github.io/PaddleSlim/)中的步骤安装PaddleSlim。
|
||||
|
||||
```bash
|
||||
git clone https://github.com/PaddlePaddle/PaddleSlim.git
|
||||
|
||||
cd Paddleslim
|
||||
|
||||
python setup.py install
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 获取预训练模型
|
||||
|
||||
[识别预训练模型下载地址]()
|
||||
|
||||
[检测预训练模型下载地址]()
|
||||
|
||||
|
||||
## 量化训练
|
||||
加载预训练模型后,在定义好量化策略后即可对模型进行量化。量化相关功能的使用具体细节见:[模型量化](https://paddleslim.readthedocs.io/zh_CN/latest/api_cn/quantization_api.html)
|
||||
|
||||
进入PaddleOCR根目录,通过以下命令对模型进行量化:
|
||||
|
||||
|
@ -25,10 +152,11 @@ python deploy/slim/quantization/quant.py -c configs/det/det_mv3_db.yml -o Global
|
|||
|
||||
|
||||
|
||||
|
||||
## 导出模型
|
||||
|
||||
在得到量化训练保存的模型后,我们可以将其导出为inference_model,用于预测部署:
|
||||
|
||||
```bash
|
||||
python deploy/slim/quantization/export_model.py -c configs/det/det_mv3_db.yml -o Global.checkpoints=output/quant_model/best_accuracy Global.save_model_dir=./output/quant_model
|
||||
python deploy/slim/quantization/export_model.py -c configs/det/det_mv3_db.yml -o Global.checkpoints=output/quant_model/best_accuracy Global.save_model_dir=./output/quant_inference_model
|
||||
```
|
||||
|
|
|
@ -0,0 +1,167 @@
|
|||
\> PaddleSlim 1.2.0 or higher version should be installed before runing this example.
|
||||
|
||||
|
||||
|
||||
# Model compress tutorial (Quantization)
|
||||
|
||||
Compress results:
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Task</th>
|
||||
<th>Model</th>
|
||||
<th>Compress Strategy</th>
|
||||
<th>Criterion(Chinese dataset)</th>
|
||||
<th>Inference Time(ms)</th>
|
||||
<th>Inference Time(Total model)(ms)</th>
|
||||
<th>Acceleration Ratio</th>
|
||||
<th>Model Size(MB)</th>
|
||||
<th>Commpress Ratio</th>
|
||||
<th>Download Link</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td rowspan="2">0</td>
|
||||
<td>Detection</td>
|
||||
<td>MobileNetV3_DB</td>
|
||||
<td>None</td>
|
||||
<td>61.7</td>
|
||||
<td>224</td>
|
||||
<td rowspan="2">375</td>
|
||||
<td rowspan="2">-</td>
|
||||
<td rowspan="2">8.6</td>
|
||||
<td rowspan="2">-</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Recognition</td>
|
||||
<td>MobileNetV3_CRNN</td>
|
||||
<td>None</td>
|
||||
<td>62.0</td>
|
||||
<td>9.52</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">1</td>
|
||||
<td>Detection</td>
|
||||
<td>SlimTextDet</td>
|
||||
<td>PACT Quant Aware Training</td>
|
||||
<td>62.1</td>
|
||||
<td>195</td>
|
||||
<td rowspan="2">348</td>
|
||||
<td rowspan="2">8%</td>
|
||||
<td rowspan="2">2.8</td>
|
||||
<td rowspan="2">67.82%</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Recognition</td>
|
||||
<td>SlimTextRec</td>
|
||||
<td>PACT Quant Aware Training</td>
|
||||
<td>61.48</td>
|
||||
<td>8.6</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">2</td>
|
||||
<td>Detection</td>
|
||||
<td>SlimTextDet_quat_pruning</td>
|
||||
<td>Pruning+PACT Quant Aware Training</td>
|
||||
<td>60.86</td>
|
||||
<td>142</td>
|
||||
<td rowspan="2">288</td>
|
||||
<td rowspan="2">30%</td>
|
||||
<td rowspan="2">2.8</td>
|
||||
<td rowspan="2">67.82%</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Recognition</td>
|
||||
<td>SlimTextRec</td>
|
||||
<td>PPACT Quant Aware Training</td>
|
||||
<td>61.48</td>
|
||||
<td>8.6</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">3</td>
|
||||
<td>Detection</td>
|
||||
<td>SlimTextDet_pruning</td>
|
||||
<td>Pruning</td>
|
||||
<td>61.57</td>
|
||||
<td>138</td>
|
||||
<td rowspan="2">295</td>
|
||||
<td rowspan="2">27%</td>
|
||||
<td rowspan="2">2.9</td>
|
||||
<td rowspan="2">66.28%</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Recognition</td>
|
||||
<td>SlimTextRec</td>
|
||||
<td>PACT Quant Aware Training</td>
|
||||
<td>61.48</td>
|
||||
<td>8.6</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
## Overview
|
||||
|
||||
Generally, a more complex model would achive better performance in the task, but it also leads to some redundancy in the model. Quantization is a technique that reduces this redundancyby reducing the full precision data to a fixed number, so as to reduce model calculation complexity and improve model inference performance.
|
||||
|
||||
This example uses PaddleSlim provided [APIs of Quantization](https://paddlepaddle.github.io/PaddleSlim/api/quantization_api/) to compress the OCR model.
|
||||
|
||||
It is recommended that you could understand following pages before reading this example,:
|
||||
|
||||
|
||||
|
||||
- [The training strategy of OCR model](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/detection.md)
|
||||
|
||||
- [PaddleSlim Document](https://paddlepaddle.github.io/PaddleSlim/api/quantization_api/)
|
||||
|
||||
|
||||
|
||||
## Install PaddleSlim
|
||||
|
||||
```bash
|
||||
git clone https://github.com/PaddlePaddle/PaddleSlim.git
|
||||
|
||||
cd Paddleslim
|
||||
|
||||
python setup.py install
|
||||
|
||||
```
|
||||
|
||||
|
||||
## Download Pretrain Model
|
||||
|
||||
[Download link of Detection pretrain model]()
|
||||
|
||||
[Download link of recognization pretrain model]()
|
||||
|
||||
|
||||
## Quan-Aware Training
|
||||
|
||||
After loading the pre training model, the model can be quantified after defining the quantization strategy. For specific details of quantization method, see:[Model Quantization](https://paddleslim.readthedocs.io/zh_CN/latest/api_cn/quantization_api.html)
|
||||
|
||||
Enter the PaddleOCR root directory,perform model quantization with the following command:
|
||||
|
||||
```bash
|
||||
python deploy/slim/prune/sensitivity_anal.py -c configs/det/det_mv3_db.yml -o Global.pretrain_weights=./deploy/slim/prune/pretrain_models/det_mv3_db/best_accuracy Global.test_batch_size_per_card=1
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Export inference model
|
||||
|
||||
After getting the model after pruning and finetuning we, can export it as inference_model for predictive deployment:
|
||||
|
||||
```bash
|
||||
python deploy/slim/quantization/export_model.py -c configs/det/det_mv3_db.yml -o Global.checkpoints=output/quant_model/best_accuracy Global.save_model_dir=./output/quant_inference_model
|
||||
```
|
Loading…
Reference in New Issue