当网络模型全部int8量化或者uint8量化时效果不好时,可以使用rknn-toolkit2对模型进行混合量化,但是官方给的文档写的太模糊了,所以这里补充一些tip
1.在python step1.py
后会生成几个文件,其中一个为xxx.cfg,主要用来修改混合精度的,以rk3588为例(rk3588支持float16 ,rk356x支持float32),custom_quantize_layers
就是修改混合精度的地方,比如要改这3层为混合量化,修改的结果见图2
rknn1 混合量化
%YAML 1.2
---
# add layer name and corresponding quantized_dtype to customized_quantize_layers, e.g conv2_3: float32
customized_quantize_layers:
attach_Conv_Conv_266/out0_0: dynamic_fixed_point-i16
attach_Sigmoid_Sigmoid_294/out0_1: dynamic_fixed_point-i16
Conv_Conv_279_14: dynamic_fixed_point-i16
quantize_parameters:
'@attach_Conv_Conv_266/out0_0:out0':
dtype: asymmetric_affine
method: layer
max_value:
- 3.7605557441711426
min_value:
- -0.7775306701660156
zero_point:
- 44
scale:
- 0.017796417698264122
qtype: u8
'@attach_Sigmoid_Sigmoid_294/out0_1:out0':
dtype: asymmetric_affine
method: layer
max_value:
- 0.27661600708961487
min_value:
- 0.0
zero_point:
- 0
scale:
- 0.0010847686789929867
qtype: u8
'@attach_Sigmoid_Sigmoid_295/out0_2:out0':
dtype: asymmetric_affine
method: layer
max_value:
- 0.5018787384033203
min_value:
- 0.0
zero_point:
- 0
scale:
- 0.0019681518897414207
qtype: u8
更多内容请关注公众号,了解嵌入式ai前沿资讯!