TensorFlowLite是一款TensorFlow用于移动设备和嵌入式设备的轻量级解决方案。
TensorFlow可以在多个平台上运行,从机架式服务器到小型IoT设备。但是随着近年来机器学习模型的广泛使用,出现了在移动和嵌入式设备上部署它们的需求。而TensorFlowLite允许设备端的机器学习模型的低延迟推断。
设计初衷
轻量级:允许小binarysize和快速初始化/启动的设备端机器学习模型进行推断。
跨平台:运行时的设计使其可以在不同的平台上运行,最先允许的平台是安卓和iOS。
快速:专为移动设备进行优化,包括大幅提升模型加载时间,支持硬件加速。
现在,越来越多移动设备内置了专门的自定义硬件以高效处理机器学习工作负载。TensorFlowLite支持安卓神经网络API,以充分利用新的可用加速器。
当加速器硬件不可用时,TensorFlowLite返回至经优化的CPU执行操作,确保模型仍然可在大量设备上快速运行。
架构
下图展示了TensorFlowLite的架构设计:
组件包括
TensorFlow模型(TensorFlowModel):训练后的TensorFlow模型,保存在磁盘中。
TensorFlowLite转换器(TensorFlowLiteConverter):该程序将模型转换成TensorFlowLite文件格式。
TensorFlowLite模型文件(TensorFlowLiteModelFile):该格式基于FlatBuffers,经过优化以适应最大速度和最小规模。
然后将TensorFlowLite模型文件部署到移动App中:
JavaAPI:安卓设备上适用于C++API的便利封装。
C++API:加载TensorFlowLite模型文件,启动编译器。安卓和iOS设备上均有同样的库。
编译器(Interpreter):使用运算符执行模型。解释器支持选择性加载运算符;没有运算符时,编译器只有70KB,加载所有运算符后,编译器为300KB。这比TensorFlowMobile(具备一整套运算符)的1.5M要小得多。
在选择的安卓设备上,编译器将使用安卓神经网络API进行硬件加速,或者在无可用API的情况下默认执行CPU。
开发者还使用C++API实现自定义kernel,它可被解释器使用。
模型
TensorFlowLite已经支持多个面向移动端训练和优化的模型:
MobileNet:一种能够识别超过1000种不同物体的视觉模型,专为移动端和嵌入式设备设计;
InceptionV3:一种图像识别模型,功能上类似于MobileNet,但能提供更高的准确率(当然模型也更大);
SmartReply:一种设备端对话模型,能对接收到的会话聊天信息提供触发性应答。第一方和第三方通信App可在AndroidWear上使用该特性。
Inceptionv3和MobileNet都在ImageNet数据集上训练过,你可以通过迁移学习轻松地在自己的图像数据集上重新训练这些模型。
评论