当前位置: 首页>>技术教程>>正文


TensorFlow Lite 简介

TensorFlow Lite是TensorFlow针对移动和嵌入式设备的轻量级解决方案。它使设备上的机器学习预测具有低延迟和小的二进制大小。 TensorFlow Lite还支持硬件加速Android神经​​网络API

TensorFlow Lite使用许多技术来实现低延迟,如优化移动应用程序的内核,pre-fused激活以及允许更小和更快的(fixed-point数学)模型的量化内核。

目前,我们的TensorFlow Lite文档大部分在Github上

TensorFlow Lite包含什么?

TensorFlow Lite支持一系列数量化和浮点的核心运算符,这些核心运算符已针对移动平台进行了优化。它们结合pre-fused激活和偏差来进一步提高性能和量化精度。此外,TensorFlow Lite还支持在模型中使用自定义操作。

TensorFlow Lite定义了一个新的模型文件格式,基于FlatBuffers。 FlatBuffers是一个开源的高效的跨平台序列化库。它与协议缓冲区类似,但主要区别在于,FlatBuffers在访问数据之前不需要解析/解包步骤到二级表示,通常与per-object内存分配结合使用。此外,FlatBuffers的代码尺寸比协议缓冲区小一个数量级。

TensorFlow Lite有一个新的基于移动设备优化的解释器,其主要目标是保持应用程序的精简和快速。解释器使用静态图形排序和自定义(less-dynamic)内存分配器来确保最小的负载,初始化和执行延迟。

TensorFlow Lite提供了一个接口来利用硬件加速(如果在设备上可用)。它是通过Android神经​​网络库,作为Android O-MR1的一部分发布的。

为什么我们需要一个新的移动专用(mobile-specific)库?

机器学习正在改变计算模式,我们看到了移动和嵌入式设备上新用例的新趋势。消费者的期望也趋向于与他们的设备自然而友好地互动,由相机和语音交互模式驱动。

有几个因素促成了这个领域的兴趣:

  • 硅层的创新为硬件加速带来了新的可能性,像Android Neural Networks API这样的框架可以很容易地利用这些特性。

  • 实时计算机视觉和口头语言理解的最新进展:一些mobile-optimized评测模型已开放源代码(例如MobileNets,SqueezeNet)。

  • 广泛使用的智能设备为on-device智能创造了新的可能性。

  • 对用户数据不需要离开移动设备的更强大的用户数据隐私范例感兴趣。

  • 能够在设备不需要连接到网络的情况下提供“离线”用例。

我们相信下一波机器学习应用将在移动和嵌入式设备上进行重要的处理。

TensorFlow Lite开发人员预览亮点

TensorFlow Lite可作为开发人员预览的点,包括以下内容:

  • 一组核心操作符,既有数量化也有浮点值,其中很多已经针对移动平台进行了调优。这些可以用来创建和运行自定义模型。开发人员也可以编写自己的自定义操作符并在模型中使用它们。

  • 一个新的FlatBuffers基于模型的文件格式。

  • On-device解释器,内核经过优化,可在移动设备上更快执行。

  • TensorFlow转换器将TensorFlow-trained模型转换为TensorFlow Lite格式。

  • 规模较小:当所有支持的操作符链接时,TensorFlow Lite小于300KB,而仅使用支持InceptionV3和Mobilenet所需的操作符时,TensorFlow Lite小于200KB。

  • 预训练好的模型:

    以下所有型号均可保证开箱即用:

    • Inception V3是一种流行的模型,用于检测图像中存在的主要对象。

    • MobileNetsmobile-first系列计算机视觉模型,旨在有效提高准确性,同时注意on-device或嵌入式应用程序的受限资源。它们很小,低延迟,低功耗,模型参数化,以满足各种用例的资源约束。它们可以建立在分类,检测,嵌入和分割之上。 MobileNet模型比较小,但是比Inception V3准确度较低

    • 在设备智能回复上,提供one-touch的on-device模型,能通过建议上下文相关的消息来回复传入的文本消息。该模型专为内存受限的设备而建立,例如手表&手机,它已被成功使得Android Wear上的智能回复应用于所有first-party和third-party应用程序。

  • MobileNet模型的量化版本,其运行速度比CPU上的non-quantized(浮点)版本快。

  • 新的Android演示应用程序来说明使用TensorFlow Lite与量化的MobileNet模型进行对象分类。

  • Java和C++ API支持

入门

建议使用上述的pre-tested模型试用TensorFlow Lite。如果有一个现有的模型,则需要测试模型是否兼容转换器和支持的操作集。要测试你的模型,请看GitHub上的文档

为自定义数据集重新设置Inception-V3或MobileNet

上面提到的pre-trained模型已经在ImageNet数据集上进行了训练,该数据集由1000个预定义的类组成。如果这些类不适合您的用例,那么您需要重新训练这些模型。这种技术被称为转移学习(transfer learning),它从一个已经被训练过的问题的模型开始,然后在类似的问题上进行再训练。从头开始深入学习可能需要几天,但转移学习可以很快完成。为了做到这一点,您需要生成标有相关类的自定义数据集。

TensorFlow for Poets codelab 一步一步走读了这个过程。再训练代码支持浮点和量化推理的再训练。

TensorFlow Lite架构

下图显示了TensorFlow Lite的架构设计:

从训练有素的TensorFlow模型开始,您将把模型转换为TensorFlow Lite文件格式(.tflite),这需要使用TensorFlow Lite转换器。然后,您可以在移动应用程序中使用该转换后的文件。

部署TensorFlow Lite模型文件使用:

  • Java API:围绕Android上C++ API的便捷包装。

  • C++ API:加载TensorFlow Lite模型文件并调用解释器。 Android和iOS都提供相同的库。

  • 解释器:使用一组内核来执行模型。解释器支持选择性内核加载;没有内核,只有100KB,加载了所有内核的300KB。这比TensorFlow Mobile要求的1.5M的显著减少。

  • 在选定的Android设备上,解释器将使用Android神经​​网络API进行硬件加速,如果没有可用的,则默认为CPU执行。

您也可以使用解释器可以使用的C++ API来实现定制的内核。

未来的工作

在未来的版本中,TensorFlow Lite将支持更多的模型和内置运算符,包含定点和浮点模型的性能改进,改进工具以简化开发人员工作流程以及支持其他更小的设备等等。随着我们的不断发展,我们希望TensorFlow Lite能够大大简化针对小型设备定位模型的开发者体验。

未来的计划包括使用专门的机器学习硬件,以获得特定设备上特定型号的最佳性能。

下一步

对于开发人员的预览,我们的大部分文档都在GitHub上。请看看TensorFlow Lite库在GitHub上获取更多信息和代码示例,演示应用程序等等。

参考资料

本文由《纯净天空》出品。文章地址: https://vimsky.com/article/3710.html,未经允许,请勿转载。