Google 开发者大会 (Google Developer Days,简称 GDD) 是展现 Google 最新开发者产品和平台的全球盛会,旨在帮助你快速开发优质应用,发展和留住活跃用户群,充分利用各类工具得到更多收益。2018 Google 开发者大会于 9 月 20 日和 21 日于上海举办。👉Google 开发者大会 2018 掘金专题java
2018 年 9 月 21 日 ,凌钰城(Google Brain 软件工程师)带来一场《TensorFlow Lite:TensorFlow在移动设备与嵌入式设备上的轻量级跨平台解决方案》的演讲,本文将对演讲作一个回顾。python
今天,机器学习的发展突飞猛进,机器学习不只部署在服务器端,运行在我的电脑上,也存在于咱们生活中许许多多的小设备上,好比移动设备和智能手机。智能手机上的OK Google能够经过语音设定一个闹钟,这是一个关键字检测和语音识别的机器学习综合应用。再好比Google的照片app,能够经过机器学习来制做背景虚化、人像清晰的照片,这些在移动设备、智能手机上的机器学习应用颇有用、颇有趣。git
在移动设备上实现机器学习,能够有两种实现方法。一种是在设备上收集数据,传递给云端,服务器执行机器学习任务,最后把结果回传给设备。另外一种方法是在终端设备上运行全部功能,包含机器学习模型。github
在终端上运行机器学习有许多优势:服务器
可是,在终端上运行应用也至关困难,主要存在如下几点限制:网络
对机器学习来讲更是困难,咱们为服务器开发的机器学习模型一般比较大,须要较大的内存,模型复杂,须要更多的耗电量和计算能力。app
TensorFlow Lite是TensorFlow在移动设备上运行机器学习的跨平台解决方案,具备低延迟、运行时库 (runtime library) 极小等特性,此外还有一系列的工具去转换、调试和优化模型。机器学习
采用TensorFlow Lite开发的应用优势之一是反应速度很是快,好比开发照片处理app,不须要将照片传输到云端,能够直接在终端上处理。优势之二是能够离线使用,这在网络条件比较差的地区尤其重要。工具
Tensorflow Lite具备高度可移植性,已经在以下平台成功移植:post
相较于TensorFlow,TensorFlow Lite进行了以下优化:
此外TensorFlow Lite还紧密整合硬件加速器,支持以下几类硬件加速器:
对GPUs的支持情况:
关于Google打造的Edge TPUs:
TensorFlow Lite能够经过参数决定runtime library大小。基本的interpreter 80K,全部内建Ops kernel 750KB,至关小。考虑到不一样模型可能用到不一样的ops,还能够继续优化,好比能够只注册你须要的Ops,这样其他的Ops就不会编译到runtime library中,体积还能够进一步缩减。
TensorFlow Lite获得了众多开发者的使用,获得了不少正面的反馈:
也收集到了一些改进意见:
后面会进一步说明TensorFlow Lite团队对这些问题的改进。
以及...
TensorFlow Lite很是易于上手,建议采用以下步骤:
预训练模型:Tensorflow网站上提供了各类不一样预训练的机器学习模型,好比图像分类、物体检测、图像分割、文字预测、等等。
再训练模型:请尝试迁移学习Colab教程 - Tensorflow for Poets。顾名思义,这个教程设计初衷是尽可能简单,让没有技术背景的人也能运行。所谓迁移学习,是从新训练已经存在模型的一小部分,应用到一个新的问题上。
构建 & 训练模型
使用TensorFlow(Estimator或Keras),构建模型,训练,取得Saved Model。
转换格式
使用TensorFlow Lite转换器转换为TensorFlow Lite可用的模型,模型转换代码以下:
import tensorflow.contrib.lite as lite
graph_def_file = "/path/to/Downloads/mobilenet_v1_1.0_224/frozen_graph.pb"
input_arrays = ["input"]
output_arrays = ["MobilenetV1/Predictions/Softmax"]
converter = lite.TocoConverter.from_frozen_graph(
graph_def_file, input_arrays, output_arrays)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
复制代码
借助模型可视化工具:
因为TensorFlow Lite支持的Ops有限,可能存在模型转换后,某些Ops不支持,针对这一问题,TensorFlow Lite团队计划支持更多的Ops
验证模型、分析性能:
更多详细资料,请参考:www.tensorflow.org/mobile/tfli…
python API示例:
interpreter = tf.contrib.lite.Interpreter(
"/tmp/awesome_model.tflite")
input = interpreter.get_input_details()[0]["index"]
interpreter.set_tensor(input, np.array([1, 2, 3]))
interpreter.invoke()
prediction = interpreter.get_tensor(output)
复制代码
Java API示例:
import org.tensorflow.lite.Interpreter;
try {
Interpreter tflite = new Interpreter(
"/tmp/awesome_model.tflite");
// Fill the inputs and output buffers
// ...
// Invoke the interpreter
tflite.run(inputs, outputs);
}
复制代码
在实际项目中,一般还会进行模型优化,这样在前面的流程中加入模型优化,演变为以下流程:
TensorFlow Lite提供一系列的工具帮助开发者优化模型:
最新发布,其优势是使用简单,只需在前面的converter代码加入一行:
converter.post_training_quantization = True
复制代码
量化会形成模型精确度的损失,但据观察,对图像、音频模型预测精确度影响很小。通过量化,CNN模型可增长10~50%的性能提高,RNN能够增长到3倍性能提高。
一年前发布的工具,理论上能够比训练后Quantization更好的精确度,但使用上比较复杂,只在CNN模型中比较有效果,对于RNN模型,效果有限。
团队同时在研究二者,但愿二者都有所提高。
一个Raspberry PI实现的物件检测模型,能够进行目标检测,转动摄影机始终跟随目标
一个采用Google Edge TPU的系统,展示TensorFlow Lite的实时处理能力
采用ARM微处理的装置,展示TensorFlow Lite在极低硬件配置上的表现
展示TensorFlow Lite的实时视频处理能力
Compat是Compatibility (兼容) 的简写,所谓兼容模式,就是TensorFlow Lite在遇到不支持的Ops时,会提示是否启用Compat模式,这样支持的Ops (600+) 更多,但也意味着runtime library会增长,开发者须要在功能和体积之间作权衡。
另外,TensorFlow Lite搬家了,从原来的tensorflow/contrib/lite/...提高到tensorflow/lite/...,这意味着TensorFlow Lite开始做为一个正式的project,获得官方支持。
代码:github.com/tensorflow/tensorflow
文档:tensorflow.org/mobile/tflite/
讨论:tflite@tensorflow.org
复制代码
以上就是本次演讲的所有内容,但愿对你们有所帮助。 阅读更多 Google 开发者大会 2018 技术干货