我正在做一些辅助项目,涉及到将ML模型部署到边缘。其中一个是照片编辑应用程序,其中包括用于面部识别、物体检测、分类和风格转移的CNN应用程序。另一个是NLP应用程序,通过建议单词和句子补全来帮助写作过程。
一旦我有了一个准确的训练有素的模型,它在我正在测试的一个或多个移动设备(通常是低端的Android)上会变得非常慢。我读到有一些优化可以提高模型的速度,但我不知道怎么做。有没有一个标准的工具来优化移动/边缘的模型?
发布于 2019-05-18 00:23:39
我将特别讨论Android精简版,它是一个在TensorFlow和iOS上运行TensorFlow操作的平台。在他们的website上提到了几种优化技术,但我将讨论对我来说重要的那些。
为平台构建相关模型:
模型优化的第一步是从头开始构建,这意味着TensorFlow。我们需要创建一个可以导出到内存受限设备的模型。
我们肯定需要为不同的机器训练不同的模型。为在高端TPU上工作而构建的模型永远不会在移动处理器上高效运行。
模型量化:
我们将高精度的浮点数或小数转换为低精度的浮点数。它对模型的性能影响很小,但会大大减小模型的大小,从而占用更少的内存。
训练后量化是一种通用技术,可以减少模型大小,同时提供高达3倍的延迟,同时几乎不会降低模型精度。训练后量化将权重从浮点量化到8位精度-来自TF docs。
您可以查看TensorFlow精简版TFLiteConverter
示例:
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
tflite_quant_model = converter.convert()
此外,您应该尝试使用post_training_quantize=
标志,它可以显著减小模型大小。
希望能有所帮助。
https://stackoverflow.com/questions/56188517
复制相似问题