Git Product home page Git Product logo

666dzy666 / micronet Goto Github PK

View Code? Open in Web Editor NEW
2.2K 40.0 477.0 7.01 MB

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

License: MIT License

Python 100.00%
quantization pruning dorefa twn bnn xnor-net pytorch model-compression group-convolution network-slimming

micronet's People

Contributors

666dzy666 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

micronet's Issues

显存不够

CUDA out of memory. 我将batch size 从原来50调到5 , nvidia-smi显示显存远未用完,但是第一个epoch快完时报这个错(6G显存),batch size无论调为多少都有错

缩放操作的位置

你好,在二值量化时我遇到一个问题:STE算法流程结束再调用权重量化器保存权重时,由于alpha缩放位于量化器的forward()中,导致保存下来的权重可行域并非{-1,1}而是{-alpha,alpha}(浮点数)。根据相关论文,是不是应该在量化卷积(Conv2d_Q)forward()时再计算alpha并让它和W*input的结果相乘作为卷积的输出?

向大佬请教量化模型保存的问题

想问一下大佬,就是模型压缩数据对比那张表中的Size(MB)是怎么出来的,得到的模型pth文件大小确实不变,我看您之前的回复说可以通过脚本提取量化模型参数以txt文件形式保存吗?但是那个模型Size是怎么衡量的呢,谢谢!

关于量化后权值的精度

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

关于量化后模型的问题

1.我的模型在量化后,权重文件会多出来一些key值,head4.0.q_conv.weight_quantizer.range_tracker.first_w,这些在加载时会报错,这些值有什么影响吗?
2.量化后的模型可以转换为onnx吗?

稀疏训练(对BN层γ进行约束)的程式碼看不懂

def updateBN():
    for m in model.modules():
        if isinstance(m, nn.BatchNorm2d):
            if hasattr(m.weight, 'data'):
                m.weight.grad.data.add_(args.s*torch.sign(m.weight.data))

想問為什麼 這段是出自那兩篇paper哪一段
目前看L1正則都是取絕對值 而不是直接加梯度

关于注释和论文

您好, 非常感谢您的分享。不过比较遗憾的是你的代码中注释很少,也没有相关的论文。能否把代码相关的论文附上, 以便大家学习。谢谢

二值量化中心化并截断部分发现一处不知是bug还是我没有理解

你好,
image
quantization/WbWtAb/models/util_wt_bab.py这个文件中的meancenter_clampConvParams(w)函数貌似并没有对输入w进行修改就直接返回w了,不知道是不是bug。
另外,你这里中心化和截断操作都用.data截断梯度流是为何呢,我有点不能理解,是为了反向传播时这部分不进行求导吗?

关于WbWtAb中二值化实现的问题

很棒的代码!
有几个关于二值化实现的问题想请教:
1.根据paper,STE是用在weight的BP上,为什么WbWtAb的实现中STE是在Binary_a而不是Binary_w上?
2.二值化deterministic方法直接使用torch.sign(),0依然是0,是否成为了三值化?
3.util_wt_bab.py中activation_bin的forward函数,A!=2时,为何要加relu函数?
4.根据其他issue,readme 中二/三值化后model size和压缩率是手动计算的。那bit量化后的结果也是计算的吗?
感谢!

GFLOPs如何计算

您好,我刚接触模型压缩。请问在README.md的模型压缩数据对比表格中有个参数GFLOPs,这个GFLOPs是如何计算得到的?

大佬可以多在知乎上发表模型压缩优化的文章

我是做嵌入式端模型部署的工作,对模型压缩比较感兴趣。像了解在模型压缩过程中一些需要注意的事项,比如混合通道、组卷积。为什么训练组卷积的weight_decay设置0?还有models/util_w_t_b_conv.py中实现了哪些算法?还有util_w_t_gap.py这个代码是做什么的?

入门小白求问XNORnet

你好,请问下大大,关于代码,我在代码结构中看到quantization,WbWtAb下看到有bnn与xnornet分类,但由于刚入门,分不太清楚,哪个是bnn代码哪个是xnor代码,xnort论文提及是引入特征因子a进行二值量化,而代码中的A特征值是否就是尼?如果是,,我可否取消A的二值,先只做W的二值呢,因为我试过只输入--w 2,--A还是自动为2了

量化流程细节的疑问?

Hi,
感谢自己的分享。在代码中有一处疑问向你请假一下,
image
对权重和输入执行量化后进行卷积操作,但在代码对权重进行量化时,为什么还进行了反量化的操作,数据也是如此,且这反量化都在卷积之前,有点疑惑?

二,有考虑过量化后部署的问题吗?目前似乎三方工具都不直接支持。

关于BN_fold的问题

在使用IAO中的BN_fold进行BN层模拟训练量化后,使用bn_folding.py和bn_folding_test.py中的代码完成后,发现网络会自动把所有的样本判别为一类,不能得到和模拟训练量化同样的结果。请问这一块您是怎么做的呢?

想请教一下剪枝方面的问题

你好,看到你的readme介绍,你实现了规整剪枝、正常剪枝和分组卷积结构剪枝,我理解规整和正常剪枝是实现了slimming论文里的剪枝方法是吗,那分组卷积剪枝具体实现的是Rethinking the Value of Network Pruning论文里提到的哪个方法呢?

ModuleNotFoundError: No module named 'util_wt_bab'

你好!首先感谢分享,但在二值量化模型的使用中,出现找不到util_wt_bab的情况,这好像并不是第三方包,文件结构里也没有找到该文件,请问应该如何解决呢?谢谢!

特征值量化的一点疑问

class activation_quantize_fn(nn.Module):
def init(self, a_bit):
super(activation_quantize_fn, self).init()
assert a_bit <= 8 or a_bit == 32
self.a_bit = a_bit
self.uniform_q = uniform_quantize(k=a_bit)

def forward(self, x):
if self.a_bit == 32:
activation_q = x
else:
activation_q = self.uniform_q(torch.clamp(x, 0, 1))
# print(np.unique(activation_q.detach().numpy()))
return activation_q

特征值量化前强行归一到(0,1),这一点不是很理解,有些特征值是比较大

pruning方案存在问题

1.prunin文件下的main函数超参数输入如下
Options: Namespace(cpu=False, data='../data', epochs=300, eval_batch_size=256, evaluate=False, gpu_id='', lr=0.01, num_workers=2, refine='', resume='', s=0.001, sr=True, train_batch_size=512, wd=1e-07)
稀疏训练后,模型准确率为89.21%
2.根据该稀疏模型,做正常剪枝/规整剪枝,超参数如下
Namespace(cpu=False, data='../data', layers=9, model='models_save/nin_preprune.pth', normal_regular=1, percent=0.5, save='models_save/nin_prune.pth')
问题:
!please turn down the prune_ratio!

layer_index: 3 total_channel: 192 remaining_channel: 1 pruned_ratio: 0.994792

!please turn down the prune_ratio!

layer_index: 6 total_channel: 160 remaining_channel: 1 pruned_ratio: 0.993750

!please turn down the prune_ratio!

layer_index: 10 total_channel: 96 remaining_channel: 1 pruned_ratio: 0.989583

!please turn down the prune_ratio!

layer_index: 15 total_channel: 192 remaining_channel: 1 pruned_ratio: 0.994792

!please turn down the prune_ratio!

layer_index: 19 total_channel: 192 remaining_channel: 1 pruned_ratio: 0.994792

!please turn down the prune_ratio!

layer_index: 23 total_channel: 192 remaining_channel: 1 pruned_ratio: 0.994792

!please turn down the prune_ratio!

layer_index: 28 total_channel: 192 remaining_channel: 1 pruned_ratio: 0.994792

!please turn down the prune_ratio!

layer_index: 32 total_channel: 192 remaining_channel: 1 pruned_ratio: 0.994792
剪完后的通道数异常,全部仅为1,调整percent=0.9仍出现相同错误;规整剪枝同样存在以下问题。
是否因为稀疏训练时设置的s只能为0.0001

希望作者的回复

量化部分的两个文件夹的代码,如果用单张显卡,每次在一个epoch之后保存模型,显存会暴涨,导致显存不够(单张12g或者6g都不够用),多张显卡才能正常训练。有办法解决这个问题吗

移植到目标检测模型效果不佳

大佬好,我将dorefanet移植到基于resnet的backbone的检测网络,在voc数据集上测试,原始fp32精度大概在0.80左右,移植后进行量化训练,我量化了整个backbone,但是保留了head与fpn结构的fp卷积,精度大概在0.13左右,不甚理想,请问有什么tricks吗

如何获取压缩后的模型?以及压缩率的计算公式?

请教大佬,请问如何获取压缩后的模型?目前网上能搜到开源的代码只有filter pruning(整个通道的剪枝)如何获取剪枝后的模型,针对weight pruning方式(我理解为是3*3卷积核有很多为0),如何获取压缩后的模型,实在是找不到了。另外压缩率的公式如何计算?实际计算过程,需要考虑BN层的参数吗?因为没办法获取压缩后的模型,只能是计算整个网络有多少为0的卷积核数量除以总的卷积核数量,请问这样可以吗?

BnFoldConv question

你好:
in quantization/WqAq/IAO/models/util_wqaq.py
if self.bias is not None:
bias = reshape_to_bias(self.beta + (self.bias - batch_mean) * (self.gamma / torch.sqrt(batch_var + self.eps)))
else:
bias = reshape_to_bias(self.beta - batch_mean * (self.gamma / torch.sqrt(batch_var + self.eps)))
weight = self.weight * reshape_to_weight(self.gamma / torch.sqrt(self.running_var + self.eps))
为什么torch.sqrt()里面batch_var不使用平方,类似于这种:
bias = reshape_to_bias(self.beta + (self.bias - batch_mean) * (self.gamma / torch.sqrt(batch_varbatch_var + self.eps)))
weight = self.weight * reshape_to_weight(self.gamma / torch.sqrt(self.running_var
self.runing_var + self.eps))
期待您的回复。

单独对bn层进行量化,不进行bn_fold的量化实施方案

大佬,您好,我想请问一下,如果我不对bn层进行和conv层的融合,而只针对bn层做单独的量化,这一块应该如何实施,是对bn层当中的gama参数等效为conv层中的w,并对输入进bn层的特征图进行量化,这样的思路是对的吗?

IAO BN融合量化测试

我在使用 您所说的bn_folding.py中的程序对IAO进行量化融合测试时,出现如下问题:
RuntimeError: Error(s) in loading state_dict for Net:
Unexpected key(s) in state_dict: "conv1.q_conv.weight_quantizer.scale", "conv1.q_conv.weight_quantizer.zero_point", "conv2.q_conv.activation_quantizer.scale", "conv2.q_conv.activation_quantizer.zero_point", "conv2.q_conv.weight_quantizer.scale", "conv2.q_conv.weight_quantizer.zero_point".
这个问题是如何解决呢?
我猜想这个问题的出现是由于IAO和二三值量化的方法不同所造成的。

可以Post-training quantization 训练后量化压缩吗?

您好,我目前所做的项目训练好的.pth格式的目标检测模型有460兆左右,希望对其进行压缩处理。请问对于训练后的模型,如.pth模型文件,可以应用您的方法对其进行压缩吗?
如果是边训练边量化,我能否在一个基于MaskRcnn的而且是斜框检测的目标检测网络中应用您的方法去实现模型的压缩呢?非常希望您能回复我的问题,万分感谢!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.