666DZY666 / micronet

micronet, a model compression and deploy lib. compression: 1、quantization: quantization-aware-training(QAT), High-Bit(>2b)(DoReFa/Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference)、Low-Bit(≤2b)/Ternary and Binary(TWN/BNN/XNOR-Net); post-training-quantization(PTQ), 8-bit(tensorrt); 2、 pruning: normal、regular and group convolutional channel pruning; 3、 group convolution structure; 4、batch-normalization fuse for quantization. deploy: tensorrt, fp32/fp16/int8(ptq-calibration)、op-adapt(upsample)、dynamic_shape
MIT License
2.2k stars 478 forks source link

关于量化后权值的精度 #12

Open jingdonglin opened 4 years ago

jingdonglin commented 4 years ago

大佬你好,请问8bit量化后的网络卷积层权值为什么不是整数呢?大佬的定点化是8位小数的定点化么。如果按大佬的教程量化部分跑一遍,8bit量化后网络的权值应该长啥样吖 刚入门量化,恳请大佬教小白做人,感激不尽

666DZY666 commented 4 years ago

这个训练量化程序保存的模型参数形式是正常的浮点,但在训练过程中模拟了量化过程,即保存的这个参数其实已经是量化了的。可以再用个脚本提取参数(运行训练量化程序中的量化部分)来变成量化形式,8bits变为[0, 255]的整数,三值/二值变为+-1、0,可用于终端部署。WbWtAb-bn_merge-bn_merge.py中就做了这个参数提取,可以参考

jingdonglin commented 4 years ago

大佬你好,最近趁着假期在学习大佬的代码收获颇丰,已向周围小伙伴推荐了大佬的代码。但是关于量化过程中我有一点想不明白,训练得到quant_model后(也就是大佬的模型)。 :1、我在模型部署阶段,是需要把里面的卷积权值小数乘以255变成整数吗?如果是的话,卷积后的特征图也也是整数,但时当特征图经过BN层时,BN层的值全是浮点小数怎么和特征图进行定点运算呢?即前向推断过程中,即Conv->BN->激活函数,这一样过程,数据是咋流动的呢? 2、BN层融合这儿,量化训练后,如果把卷积层和BN层融合,变为新的卷积层后,那么这个卷积层的参数便不再是定点小数了,乘以尺度因子后,它也变不回int型的数吖,所以在前向推断中无法进行int定点化运算呢?

666DZY666 commented 4 years ago

1、采用量化/反量化这个方式在之前范围实现离散化(量化)。量化-反量化-卷积 和 量化-卷积-反量化的结果是一样的。这里的量化训练采用前者是为了方便写代码,模拟量化的过程,验证量化精度;量化部署采用后者,量化卷积实现加速; 2、BN是融合到卷积参数中了,且是先融合再量化,可参照项目进展3.1/3.4的描述及提交。(这是个好问题)

ghost commented 4 years ago

大佬你好,请问8bit量化后的网络卷积层权值为什么不是整数呢?大佬的定点化是8位小数的定点化么。如果按大佬的教程量化部分跑一遍,8bit量化后网络的权值应该长啥样吖 刚入门量化,恳请大佬教小白做人,感激不尽

嗨,我想问一下你的8bits量化最后做了参数提取吗?可否分享一下,18729264891@163.com 感激不尽

chenxyyy commented 3 years ago

可以建个群讨论一下量化方面的技术呀 @jingdonglin @NickMyName

ghost commented 3 years ago

可以啊,QQ:1013283125,一起加个QQ解决一下各自的困惑吧

在 2020-12-16 11:04:48,"chenxyy" notifications@github.com 写道:

可以建个群讨论一下量化方面的技术呀 @jingdonglin@NickMyName

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

YangNuoCheng commented 2 years ago

大佬你好,最近趁着假期在学习大佬的代码收获颇丰,已向周围小伙伴推荐了大佬的代码。但是关于量化过程中我有一点想不明白,训练得到quant_model后(也就是大佬的模型)。 :1、我在模型部署阶段,是需要把里面的卷积权值小数乘以255变成整数吗?如果是的话,卷积后的特征图也也是整数,但时当特征图经过BN层时,BN层的值全是浮点小数怎么和特征图进行定点运算呢?即前向推断过程中,即Conv->BN->激活函数,这一样过程,数据是咋流动的呢? 2、BN层融合这儿,量化训练后,如果把卷积层和BN层融合,变为新的卷积层后,那么这个卷积层的参数便不再是定点小数了,乘以尺度因子后,它也变不回int型的数吖,所以在前向推断中无法进行int定点化运算呢?

我也有相同的疑问,我们需要将保存的模型量化成int型才能真正的减少模型大小,加速模型运算的过程吧。但我看到很多库都是模拟量化过程,我个人觉得还需要按照量化公式使用scale等才能实现整数量化。