pytorch模型定点化记录

定点化的意义

深度学习模型往端侧迁移时通常受限于芯片的计算能力,PC端训练的模型是浮点型,而芯片端是整型计算,此时就需要做模型定点化

定点化流程

第一步:模型转ONNX
第二步:ONNX打包量化
第三步:PC和芯片端对齐

具体如下:

1. 模型转ONNX

通常芯片厂商会有对应的文档指引,主要关注:支持的最大flops,支持的算子,layer类型,量化的API。

1.1 支持的最大flops

根据芯片所支持的flops选择合适的移动端模型,如Mobilenet,shuffleNetv2等。flops即加乘运算数

1.2 支持的算子

选择了合适的模型后,通常有些芯片不支持模型的一些操作,如transpose,此时就需要手动实现这些算子

1.3 layer 类型

NDK文档中会有所支持的层类型,如果选择的模型中有不支持的层,可以选择做一些替换,如pooling可以用1x1卷积,不同的relu类型

1.4 量化API

做完了1,2,3的准备工作后,通常我们需要把模型转onnx,再通过onnx进行模型打包量化,不同框架转onnx可以查阅对应的官网代码

2. ONNX打包量化

2.1 onnx打包

转完onnx后通常芯片厂商为了减小计算量会进行模型的打包,模型打包主要是进行层合并,如果有不支持的层类型,在执行这一步操作的时候也会有对应的报错提示。

2.2 量化

模型打包完之后接下来就是量化,量化的目的是通过统计训练数据分布找到模型参数的小数位,模型在芯片端计算时,是整型和假除小数位模拟进行浮点运算。量化时需要构造一个数据生成器,数据即训练模型的训练样本。除了统计数据进行量化的方式外,通常也会有定点量化训练的方法,这样得到的量化模型精度更高。

3.对齐

模型打包量化完之后,需要将板子和PC端进行对齐,即同样的输入数据,PC和板子对齐输出,以保证我们打包量化的模型是没问题的。如果这一步没问题,后续我们就可以把重心放在PC端优化模型上,每次优化后再走一遍流程打包量化即可

其他

在模型往端侧迁移的时候,为了保证速度,通常也可以通过查表的方式将一些算子优化运算,牺牲空间换取时间

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值