使用 QuantizationFreezePass 量化模型报错
Created by: suishicity
我按照 PaddleDetection 中 slim\quantization\freeze.py
量化训练好的 MobileNetV1_SSD 模型,在使用 QuantizationFreezePass 时报错,主要代码如下
use_gpu = cfg.model.use_gpu
place = fluid.CUDAPlace(0) if use_gpu else fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())
test_prog, feed_var_names, fetch_vars = fluid.io.load_inference_model(model_path, exe)
test_graph = IrGraph(fluid.core.Graph(test_prog.desc), for_test=True)
# ret = eval_run(cfg, exe, test_prog, feed_var_names, fetch_vars)
freeze_pass = QuantizationFreezePass(fluid.global_scope(), place)
freeze_pass.apply(test_graph)
float_prog = test_graph.to_program()
basename = os.path.basename(model_path)
tmp_path = os.path.join(output_path, basename+'_float')
checkpoint.save_inference_model(tmp_path, exe, float_prog, feed_var_names, fetch_vars)
错误信息如下
Traceback (most recent call last):
File ".\freeze_model.py", line 91, in quantize
freeze_pass.apply(test_graph)
File "C:\Users\morgan\Miniconda3\lib\site-packages\paddle\fluid\contrib\slim\quantization\quantization_pass.py", line 683, in apply
self._insert_post_dequant_op(graph, op_node)
File "C:\Users\morgan\Miniconda3\lib\site-packages\paddle\fluid\contrib\slim\quantization\quantization_pass.py", line 789, in _insert_post_dequant_op
scale_v = self._var_scale_map[original_var_name]
KeyError: 'conv7_1_sep_weights'
使用环境为:win10, Python 3.6.8, paddle 1.6.2. 加载的模型能够正确预测,QuantizationFreezePass 每次报错 KeyError 都不一样,我是新手,请问训练后量化怎么做才是正确的呢?