TFLite在移动端部署的总结,绝对干货!

最近在忙语音唤醒的工作,涉及了非常多的深度学习集成到移动端的技术点。

这篇博客主要讲的是通过TensorFlow训练出来的模型如何转为可以在移动设备上进行部署的tflite文件。可能有人会说了这个很简单,通过TensorFlow的相关函数就可以了。。。实际上不是这样的,这其中还牵扯很多需要注意的地方。主要的一方面是移动端设备对性能要求极高,有内存大小的要求。因此我们需要将模型的大小不断压缩达到我们想要的大小。
在参考文献中的第一篇博客给了我很大的启发,同时还有在GitHub上开源的谷歌speech command 以及ARM的ARM-software/ML-KWS-for-MCU都极具参考价值。
在第一篇博客中,详细解释了压缩TensorFlow模型,需要做的工作。简单来说就是分为两个阶段,训练之前和训练之后。

  • 训练之前: 训练之前就是构造模型的阶段,因为将模型压缩本质上来说就两条路一个是精简模型结构,第二就是将浮点型数据映射为整型数据,第二种方法能够将模型的大小压缩为原来的四分之一。因此第二种方法能够极大压缩模型的大小。但是这也会带来一定的问题,因为将训练数据从浮点型转为整型可能会带来模型准确率下降的问题。TensorFlow给出的方案是模拟定点化(其中定点化就是指将数据从浮点型压缩为整型的操作,或者可以称之为量化操作),TensorFlow通过在模型训练中加入Simulated Quantization的机制,以减少模型量化带来的精度影响,相关原理的详细说明在参考文献4中的论文里(具体我也没看)。在实际使用中,Simulated Quantization是在模型训练的计算图上增加FakeQuant相关节点,以实现在前向计算(forward)时模拟参数定点化带来的精度损失。对于fullconnected进行Simulated Quantization的示意图。(其实这些操作,在ARM给的代码中已经给出了相关的实例代码了,这部分代码需要注意的是在TensorFlow2.0中已经去掉了所有和

你可能感兴趣的:(机器学习)