2,850
社区成员




我看到snpe-2.13的官方实例里使用了setCpuFixedPointMode这个接口,注释上描述如图所示。我疑惑的是,模型量化之后已经变成int8的了,如果这个接口设置成false的话,是如何以float的形式执行的呢,把整数当成浮点执行吗,会不会有错误?
您好,您可能对snpe量化的过程有一定的误解。量化之后的结果不能当作int8去理解,而是8位/16位定点数(fixed-point),这些定点数用zero point+scale可以还原回浮点的形式(参考https://blog.csdn.net/qq_42585108/article/details/121329524 ),也就是量化/反量化。snpe-dlc-quantize对量化的描述是Generate 8 or 16 bit TensorFlow style fixed point weight and activations encodings for a floating point SNPE model,这里的floating point SNPE model指的是浮点模型,也就是量化前的模型。通过snpe-dlc-info查看一个量化后的模型,如下图所示,可以看到,这一个layer的(是一个conv2d)的weight的类型是uFxp_8(8位长的unsigned fixed-point,8位无符号定点数),而所谓的fixed point weight and activations encodings指的就是bitwidth 8, min -9.781250000000, max 0.000000000000, scale 0.038357842714, offset -255.000000000000这些信息。其中offset就是所谓的zp,也就是说,虽然参数以8位定点数存放,但是可以通过这些信息还原回浮点数,只会有误差,不会有错误的。