未验证 提交 bf7efc03 编写于 作者: C Chang Xu 提交者: GitHub

[Cherry-Pick] Update Analysis (#1481)

上级 18d3524a
......@@ -130,7 +130,7 @@ python eval.py --config_path=./configs/ppyoloe_s_ptq.yaml
- 要测试的模型路径可以在配置文件中`model_dir`字段下进行修改。
#### 3.6 提高离线量化精度
本节介绍如何使用量化分析工具提升离线量化精度。离线量化功能仅需使用少量数据,且使用简单、能快速得到量化模型,但往往会造成较大的精度损失。PaddleSlim提供量化分析工具,会使用接口```paddleslim.quant.AnalysisQuant```,可视化展示出不适合量化的层,通过跳过这些层,提高离线量化模型精度。```paddleslim.quant.AnalysisQuant```详解见[AnalysisQuant.md](../../../../docs/zh_cn/tutorials/quant/AnalysisQuant.md)
本节介绍如何使用量化分析工具提升离线量化精度。离线量化功能仅需使用少量数据,且使用简单、能快速得到量化模型,但往往会造成较大的精度损失。PaddleSlim提供量化分析工具,会使用接口```paddleslim.quant.AnalysisQuant```,可视化展示出不适合量化的层,通过跳过这些层,提高离线量化模型精度。```paddleslim.quant.AnalysisQuant```详解见[AnalysisQuant.md](../../../docs/zh_cn/tutorials/quant/AnalysisQuant.md)
经过多个实验,包括尝试多种激活算法(avg,KL等)、weight的量化方式(abs_max,channel_wise_abs_max),对PicoDet-s进行离线量化后精度均为0,以PicoDet-s为例,量化分析工具具体使用方法如下:
......@@ -162,11 +162,11 @@ python post_quant.py --config_path=./configs/picodet_s_analyzed_ptq.yaml --save_
**加速分析过程**
使用量化分析工具时,因需要逐层量化模型并进行验证,因此过程可能较慢,若想加速分析过程,可以在配置文件中设置 `FastEvalDataset` ,输入一个图片数量较少的annotation文件路径。注意,用少量数据验证的模型精度不一定等于全量数据验证的模型精度,若只需分析时获得不同层量化效果的相对排序,可以使用少量数据集;若要求准确精度,请使用全量验证数据集。如需要全量验证数据,将 `FastEvalDataset` 字段删掉即可。
若需要少量验证数据集来快速验证,可下载:[单张COCO验证数据集](https://bj.bcebos.com/v1/paddle-slim-models/data/small_instances_val2017.json)
注:分析之后若需要直接产出符合目标精度的量化模型,demo代码不会使用少量数据集验证,会自动使用全量验证数据。
量化分析工具详细介绍见[量化分析工具介绍](../analysis.md)
## 4.预测部署
预测部署可参考[Detection模型自动压缩示例](https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/auto_compression/detection)
......
......@@ -116,7 +116,7 @@ python eval.py --config_path=./configs/yolov5s_ptq.yaml
#### 3.6 提高离线量化精度
本节介绍如何使用量化分析工具提升离线量化精度。离线量化功能仅需使用少量数据,且使用简单、能快速得到量化模型,但往往会造成较大的精度损失。PaddleSlim提供量化分析工具,会使用接口```paddleslim.quant.AnalysisQuant```,可视化展示出不适合量化的层,通过跳过这些层,提高离线量化模型精度。```paddleslim.quant.AnalysisQuant```详解见[AnalysisQuant.md](../../../../docs/zh_cn/tutorials/quant/AnalysisQuant.md)
本节介绍如何使用量化分析工具提升离线量化精度。离线量化功能仅需使用少量数据,且使用简单、能快速得到量化模型,但往往会造成较大的精度损失。PaddleSlim提供量化分析工具,会使用接口```paddleslim.quant.AnalysisQuant```,可视化展示出不适合量化的层,通过跳过这些层,提高离线量化模型精度。```paddleslim.quant.AnalysisQuant```详解见[AnalysisQuant.md](../../../docs/zh_cn/tutorials/quant/AnalysisQuant.md)
由于YOLOv6离线量化效果较差,以YOLOv6为例,量化分析工具具体使用方法如下:
......@@ -153,10 +153,10 @@ python post_quant.py --config_path=./configs/yolov6s_analyzed_ptq.yaml --save_di
**加速分析过程**
使用量化分析工具时,因需要逐层量化模型并进行验证,因此过程可能较慢,若想加速分析过程,可以在配置文件中设置 `fast_val_anno_path` ,输入一个图片数量较少的annotation文件路径。注意,用少量数据验证的模型精度不一定等于全量数据验证的模型精度,若只需分析时获得不同层量化效果的相对排序,可以使用少量数据集;若要求准确精度,请使用全量验证数据集。如需要全量验证数据,将 `fast_val_anno_path` 设置为None即可。
若需要少量验证数据集来快速验证,可下载:[单张COCO验证数据集](https://bj.bcebos.com/v1/paddle-slim-models/data/small_instances_val2017.json)
注:分析之后若需要直接产出符合目标精度的量化模型,demo代码不会使用少量数据集验证,会自动使用全量验证数据。
量化分析工具详细介绍见[量化分析工具介绍](../analysis.md)
## 4.预测部署
预测部署可参考[YOLO系列模型自动压缩示例](https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/auto_compression/pytorch_yolo_series)
......
......@@ -86,8 +86,6 @@ class AnalysisQuant(object):
'is_full_quantize'] if 'is_full_quantize' in ptq_config else False
self.onnx_format = ptq_config[
'onnx_format'] if 'onnx_format' in ptq_config else False
if 'algo' not in ptq_config:
ptq_config['algo'] = 'avg'
if not os.path.exists(self.save_dir):
os.mkdir(self.save_dir)
......@@ -112,7 +110,7 @@ class AnalysisQuant(object):
self.data_loader = wrap_dataloader(data_loader, self.feed_list)
# quant model to get quantizable ops
post_training_quantization = self.create_ptq(executor, None, 'avg')
post_training_quantization = self.create_ptq(executor, None)
_logger.info('Run PTQ before analysis.')
program = post_training_quantization.quantize()
......@@ -170,7 +168,7 @@ class AnalysisQuant(object):
writer.writerow(d)
_logger.info('Activation Statistic is saved in {}'.format(save_path))
def create_ptq(self, executor, skip_tensor_list, algo):
def create_ptq(self, executor, skip_tensor_list):
return PostTrainingQuantization(
executor=executor,
data_loader=self.data_loader,
......@@ -178,7 +176,6 @@ class AnalysisQuant(object):
model_filename=self.model_filename,
params_filename=self.params_filename,
skip_tensor_list=skip_tensor_list,
algo=algo, # avg fastest
onnx_format=self.onnx_format,
**self.ptq_config)
......@@ -196,8 +193,7 @@ class AnalysisQuant(object):
def eval_quant_model(self, skip_list):
executor = paddle.static.Executor(self.places)
post_training_quantization = self.create_ptq(
executor, skip_list, algo='avg')
post_training_quantization = self.create_ptq(executor, skip_list)
program = post_training_quantization.quantize()
_logger.info('Evaluating...')
if self.onnx_format:
......@@ -313,7 +309,7 @@ class AnalysisQuant(object):
_logger.info('Collecting Statistic After PTQ...')
executor = paddle.static.Executor(self.places)
scope = global_scope()
post_training_quantization = self.create_ptq(executor, None, algo='avg')
post_training_quantization = self.create_ptq(executor, None)
program = post_training_quantization.quantize()
persistable_var_names = []
......@@ -538,11 +534,7 @@ class AnalysisQuant(object):
skip_list.append(rank_list.pop(0))
_logger.info('Skip Ops: {}'.format(skip_list))
executor = paddle.static.Executor(self.places)
post_training_quantization = self.create_ptq(
executor,
skip_list,
algo=self.ptq_config['algo']
if 'algo' in self.ptq_config else 'KL')
post_training_quantization = self.create_ptq(executor, skip_list)
program = post_training_quantization.quantize()
_logger.info('Evaluating...')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册