定点化的意义
深度学习模型往端侧迁移时通常受限于芯片的计算能力,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 量化
模型打包完之后接下来就是

本文介绍了深度学习模型在端侧迁移的定点化过程,包括模型转ONNX、ONNX量化及PC与芯片端对齐。首先,选择适合芯片计算能力的模型并检查支持的算子和层类型。接着,利用量化API进行模型打包和量化,通过数据生成器确保精度。最后,进行模型输出对齐以验证正确性,为优化和部署做好准备。
最低0.47元/天 解锁文章
1153

被折叠的 条评论
为什么被折叠?



