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

复现后发现模型大小并没有减小 #14

Open chenxiansen-coder opened 4 years ago

chenxiansen-coder commented 4 years ago

大佬你好,按照你的readme,跑代码的时候,我跑了8bit量化,二值量化,发现训练时保存的模型并没有减小,这是什么原因呢

666DZY666 commented 4 years ago

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

Greyman-Seu commented 4 years ago

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

我是可以理解成量化操作最后数值是量化后的数值,但是保存方式是浮点型。现在torch官方支持qint8类型,三值、二值是不是难以工程部署使用。

tengshaofeng commented 3 years ago

@Greyman-Seu, @666DZY666 , 并没有看到WbWtAb/bn_merge/bn_merge.py呀 大神我刚试了bn_folding.py, 但是model.pth和quan_model_para.pth都是2.4M,还是没有减小

Icey-Liu commented 3 years ago

@666DZY666 大佬你好,bnfuse的pth读取后内部仍是浮点型,没有变成整数,请问是需要不同的操作吗

dan123yi commented 2 years ago

请问问怎么让这个·pth文件变小呢

YangNuoCheng commented 2 years ago

如果要实现变成整数的weight和bias,是否可以按照量化公式,用pth中的scale,zero_point来得到量化中间值呢?

dan123yi commented 2 years ago

按道理可以的,但是这样做了然后保存的模型文件再导入,会不会影响精度呢?

---原始邮件--- 发件人: @.> 发送时间: 2021年12月17日(周五) 下午4:24 收件人: @.>; 抄送: @.**@.>; 主题: Re: [666DZY666/micronet] 复现后发现模型大小并没有减小 (#14)

如果要实现变成整数的weight和bias,是否可以按照量化公式,用pth中的scale,zero_point来得到量化中间值呢?

— Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android. You are receiving this because you commented.Message ID: @.***>

rourou8023 commented 2 years ago

@666DZY666 @tengshaofeng @Greyman-Seu @Icey-Liu @YangNuoCheng 麻烦问下,怎么将通过二值权重和特征方式训练的模型保存为二值的模型呢?现在保存的还是浮点型的,模型的大小未发生变化, 参照bn_fuse.py中的处理,处理之后保存的模型依然是浮点型的; 用的网络是nin.py的结构,麻烦问下要怎么转换为二值的呢?