我正在从事一些涉及将ML模型部署到边缘的项目。其中之一是照片编辑应用程序,其中包括用于面部识别,物体检测,分类和样式转换的CNN。另一个是NLP应用程序,可通过建议单词和句子的完成来辅助写作过程。
一旦我有了一个经过训练的准确模型,它最终会在我正在测试的一个或多个移动设备(通常是低端Android)上变得非常缓慢。我读过,有一些优化可以加快模型的速度,但是我不知道如何做到。是否有用于优化移动/边缘模型的标准的入门工具?
答案 0 :(得分:0)
我将专门讨论TensorFlow Lite,这是一个用于在Android和iOS上运行TensorFlow ops的平台。他们的website上提到了几种优化技术,但我将讨论对我来说很重要的那些技术。
为平台构建相关模型:
模型优化的第一步是从头开始构建,即TensorFlow。我们需要创建一个可用于导出到内存受限设备的模型。
我们绝对需要为不同的机器训练不同的模型。构建用于高端TPU的模型永远无法在移动处理器上高效运行。
创建一个具有最少图层和操作数的模型。
执行此操作不会损害模型的准确性。
为此,您将需要ML方面的专业知识,以及哪些操作最适合预处理数据。
另外,输入数据的额外预处理在很大程度上降低了模型的复杂性。
模型量化:
我们将高精度浮点数或小数转换为低精度浮点数。它会稍微影响模型的性能,但会大大减小模型的大小,然后占用更少的内存。
训练后量化是一种通用的技术,可以减小模型尺寸,同时提供高达3倍的低延迟,而模型精度几乎没有下降。训练后量化将权重从浮点量化到8位精度-从TF docs开始。
您可以看到TensorFlow Lite 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=
标志,这会大大减小模型的大小。
希望有帮助。