Skip to content

Latest commit

 

History

History
56 lines (51 loc) · 2.98 KB

quantization.md

File metadata and controls

56 lines (51 loc) · 2.98 KB

模型量化

一、量化的作用

量化将网络中主要算子(Convolution,Pooling,Binary等)由原先的浮点计算转成低精度的Int8计算,减少模型大小并提升性能。
PS:
1、关于KL量化方法,可以参考:http://on-demand.gputechconf.com/gtc/2017/presentation/s7310-8-bit-inference-with-tensorrt.pdf

二、编译

1. 编译脚本

cd <path_to_tnn>/platforms/linux/
./build_quanttool.sh -c

2. 编译输出

量化模型命令:<path_to_tnn>/platforms/linux/build/quantization_cmd

三、量化工具的使用

1. 命令

./quantization_cmd [-h] [-p] [-m] [-i] [-b] [-w] [-n] [-s] [-c] <param>

2. 参数说明

命令参数 是否必须 带参数 参数说明
-h, --help 输出命令提示。
-p, --proto 指定tnnproto模型描述文件。
-m, --model 指定tnnmodel模型参数文件。
-i, --input_path 指定量化输入文件夹路径。目前支持格式为:
• 文本文件(文件后缀为.txt)
• 常用图片格式文件(文件后缀为 .jpg .jpeg .png .bmp)
会将此目录下面的所有文件作为输入。
-b, --blob_method 指定feature map的量化方法:
• 0 Min-Max方法(默认)
• 2 KL方法
-w, --weight_method 指定weights的量化方法:
• 0 Min-Max方法(默认)
• 1 ADMM方法
-n, --bias 预处理,仅对输入为图片时起作用。对输入数据各通道进行bias操作,参数格式为:0.0,0.0,0.0
-s, --scale 预处理,仅对输入为图片时起作用。对输入数据各通道进行scale操作,参数格式为:1.0,1.0,1.0
-c, --merge_channel 在量化feature map的时候是否对所有通道一起计算,否则是各通道单独计算。

3. 量化输入

3.1 输入数据的选取

输入数据需要包括典型的输入,否则影响输出结果的精度,图片数量在20~50左右。

3.2 输入预处理

对图片的输入数据进行预处理,主要通过bias和scale参数进行。公式为:
input_pre = (input - bias) * scale

4. 命令输出

在执行命令的当前目录下会生成两个文件:

  • model_quantized.tnnproto -- 量化后的模型描述文件;
  • model_quantized.tnnmodel -- 量化后的模型参数文件;

5. 注意事项

(1)-n和-s参数仅对输入为图片的时候有作用;
(2)输入为图片时,内部会转为RGB格式进行处理;
(3)输入为txt时,输入数据存储方式是NCHW,且为float类型。存储格式为,一行存储一个数据,总共N*C*H*W行。例如,

0.01
1.1
0.1
255.0
...