Toybrick

rknn混合量化问题

zhang123

新手上路

积分
25
发表于 2021-9-27 15:46:52    查看: 1085|回复: 4 | [复制链接]    打印 | 显示全部楼层
为什么混合量化时,将所有层的量化类型设为float32得到的rknn模型大小还是原模型的一半
用dynamic_fixed_point-i16和float32设置的层得到的rknn模型大小一样,如下图
原模型weight格式是34.8MB

所有层float32和dynamic_fixed_point-i16得到的大小一样都是17.4MB,这点搞不懂
# add layer name and corresponding quantized_dtype to customized_quantize_layers, e.g conv2_3: float32
customized_quantize_layers: {
    convolution_1:  dynamic_fixed_point-i16,
    leakyrelu_3:  dynamic_fixed_point-i16,
    pooling_4:  dynamic_fixed_point-i16,
    convolution_5:  dynamic_fixed_point-i16,
    leakyrelu_7:  dynamic_fixed_point-i16,
    pooling_8:  dynamic_fixed_point-i16,
    convolution_9:  dynamic_fixed_point-i16,
    leakyrelu_11:  dynamic_fixed_point-i16,
    pooling_12:  dynamic_fixed_point-i16,
    convolution_13:  dynamic_fixed_point-i16,
    leakyrelu_15:  dynamic_fixed_point-i16,
    pooling_16:  dynamic_fixed_point-i16,
    convolution_17:  dynamic_fixed_point-i16,
    leakyrelu_19:  dynamic_fixed_point-i16,
    pooling_20:  dynamic_fixed_point-i16,
    convolution_21:  dynamic_fixed_point-i16,
    leakyrelu_23:  dynamic_fixed_point-i16,
    pooling_24:  dynamic_fixed_point-i16,
    convolution_25:  dynamic_fixed_point-i16,
    leakyrelu_27:  dynamic_fixed_point-i16,
    convolution_28:  dynamic_fixed_point-i16,
    leakyrelu_30:  dynamic_fixed_point-i16,
    convolution_37:  dynamic_fixed_point-i16,
    convolution_31:  dynamic_fixed_point-i16,
    leakyrelu_39:  dynamic_fixed_point-i16,
    upsampling_40:  dynamic_fixed_point-i16,
    leakyrelu_33:  dynamic_fixed_point-i16,
    concat_41:  dynamic_fixed_point-i16,
    convolution_34:  dynamic_fixed_point-i16,
    convolution_42:  dynamic_fixed_point-i16,
    leakyrelu_44:  dynamic_fixed_point-i16,
    convolution_45:  dynamic_fixed_point-i16
    }

# add layer name and corresponding quantized_dtype to customized_quantize_layers, e.g conv2_3: float32
customized_quantize_layers: {
    convolution_1:  float32,
    leakyrelu_3:  float32,
    pooling_4:  float32,
    convolution_5:  float32,
    leakyrelu_7:  float32,
    pooling_8:  float32,
    convolution_9:  float32,
    leakyrelu_11:  float32,
    pooling_12:  float32,
    convolution_13:  float32,
    leakyrelu_15:  float32,
    pooling_16:  float32,
    convolution_17:  float32,
    leakyrelu_19:  float32,
    pooling_20:  float32,
    convolution_21:  float32,
    leakyrelu_23:  float32,
    pooling_24:  float32,
    convolution_25:  float32,
    leakyrelu_27:  float32,
    convolution_28:  float32,
    leakyrelu_30:  float32,
    convolution_37:  float32,
    convolution_31:  float32,
    leakyrelu_39:  float32,
    upsampling_40:  float32,
    leakyrelu_33:  float32,
    concat_41:  float32,
    convolution_34:  float32,
    convolution_42:  float32,
    leakyrelu_44:  float32,
    convolution_45:  float32
    }



回复

使用道具 举报

zhang123

新手上路

积分
25
 楼主| 发表于 2021-9-27 15:49:28 | 显示全部楼层
为什么设置float32没有效果呢?
回复

使用道具 举报

brunolin

高级会员

积分
516
发表于 2021-9-30 09:16:43 | 显示全部楼层
請參考Rockchip_Trouble_Shooting_RKNN_Toolkit_V1.6.1_CN.pdf
1.4.2  转换模型时如果 do_quantization 为 False,是否也会进行量化,量化精度是什么?(因为转换后模型体积小了接近一半)
分两种情况,当导入的模型是量化的模型时,do_quantization=False 会使用该模型里面
的量化参数,具体请参考 1.4.1 的回答。当导入的模型是非量化模型时,do_quantization=False
不会做量化的操作,但是会把权重从 float32 转成 float16,这块不会有精度损失。
回复

使用道具 举报

zhang123

新手上路

积分
25
 楼主| 发表于 2021-10-8 09:55:59 | 显示全部楼层
brunolin 发表于 2021-9-30 09:16
請參考Rockchip_Trouble_Shooting_RKNN_Toolkit_V1.6.1_CN.pdf
1.4.2  转换模型时如果 do_quantization 为  ...

收到,谢谢
回复

使用道具 举报

kaaier

新手上路

积分
14
发表于 2022-5-6 22:38:08 | 显示全部楼层
brunolin 发表于 2021-9-30 09:16
請參考Rockchip_Trouble_Shooting_RKNN_Toolkit_V1.6.1_CN.pdf
1.4.2  转换模型时如果 do_quantization 为  ...

您好,请问FP32转为FP16为何不会有精度损失!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表