当前位置: 首页 > 编程日记 > 正文

TensorFlow Lite:TensorFlow在移动设备与嵌入式设备上的轻量级跨平台解决方案 | Google 开发者大会 2018...

Google 开发者大会 (Google Developer Days,简称 GDD) 是展示 Google 最新开发者产品和平台的全球盛会,旨在帮助你快速开发优质应用,发展和留住活跃用户群,充分利用各种工具获得更多收益。2018 Google 开发者大会于 9 月 20 日和 21 日于上海举办。?Google 开发者大会 2018 掘金专题

2018 年 9 月 21 日 ,凌钰城(Google Brain 软件工程师)带来一场《TensorFlow Lite:TensorFlow在移动设备与嵌入式设备上的轻量级跨平台解决方案》的演讲,本文将对演讲做一个回顾。

在终端 / 设备上运行机器学习日益重要

今天,机器学习的发展日新月异,机器学习不仅部署在服务器端,运行在个人电脑上,也存在于我们生活中许许多多的小设备上,比如移动设备和智能手机。智能手机上的OK Google可以通过语音设定一个闹钟,这是一个关键字检测和语音识别的机器学习综合应用。再比如Google的照片app,可以通过机器学习来制作背景虚化、人像清晰的照片,这些在移动设备、智能手机上的机器学习应用很有用、很有趣。

在移动设备上实现机器学习,可以有两种实现方法。一种是在设备上收集数据,传递给云端,服务器执行机器学习任务,最后把结果回传给设备。另一种方法是在终端设备上运行所有功能,包含机器学习模型。

在终端上运行机器学习有许多优点:

  • 没有网络延迟
  • 无需连接网络
  • 数据留在终端
    • 无需花费带宽去上传数据
    • 某些情况下比较省电
  • 可直接存取终端上的传感器

但是,在终端上运行应用也相当困难,主要存在以下几点限制:

  1. 移动终端上有更小的内存
  2. 对省电有要求
  3. 更弱的计算能力

对机器学习来说更是困难,我们为服务器开发的机器学习模型通常比较大,需要较大的内存,模型复杂,需要更多的耗电量和计算能力。

什么是TensorFlow Lite

TensorFlow Lite是TensorFlow在移动设备上运行机器学习的跨平台解决方案,具有低延迟、运行时库 (runtime library) 极小等特性,此外还有一系列的工具去转换、调试和优化模型。

采用TensorFlow Lite开发的应用优点之一是反应速度非常快,比如开发照片处理app,不需要将照片传输到云端,可以直接在终端上处理。优点之二是可以离线使用,这在网络条件比较差的地区尤为重要。

Tensorflow Lite具有高度可移植性,已经在如下平台成功移植:

  • Android、iOS
  • Raspberry PI、及其它Linux SoCs
  • 微处理器(包括没有操作系统,没有POSIX环境的系统)
  • 也能在PC、Mac运行,调试方便
使用TensorFlow Lite的流程

TensorFlow Lite的优化

相较于TensorFlow,TensorFlow Lite进行了如下优化:

  • 压缩模型:缩小模型体积
  • 量化 (Quantization):TensorFlow模型中包含大量的矩阵,矩阵数值通常采用32bit的float数据类型,量化就是将这些32bit的浮点数采用8bit的byte表示。
  • CPU ops融合:比如特别为ARM Neon指令集优化
  • 优化的SIMD运算核心

此外TensorFlow Lite还紧密整合硬件加速器,支持如下几类硬件加速器:

  • GPUs
  • Edge-TPUs
  • NNAPI支持的硬件加速器

对GPUs的支持状况:

  • Android上:基于OpenGL的GPU加速
  • 预定2018年第四季度发布binary
  • 可加速MobileNet以及其它图像模型

关于Google打造的Edge TPUs:

TensorFlow Lite可以通过参数决定runtime library大小。基本的interpreter 80K,所有内建Ops kernel 750KB,相当小。考虑到不同模型可能用到不同的ops,还可以继续优化,比如可以只注册你需要的Ops,这样其余的Ops就不会编译到runtime library中,体积还可以进一步缩减。

开发者的反馈

TensorFlow Lite得到了众多开发者的使用,得到了很多正面的反馈:

  • 跨平台部署
  • 更快的推断 (inference) 速度
  • 更小的runtime library
  • 硬件加速

也收集到了一些改进意见:

  • TensorFlow Lite更易于使用
  • 增加支持的Ops数量
  • 增强模型优化工具
  • 更多的文档、范例源码...

后面会进一步说明TensorFlow Lite团队对这些问题的改进。

谁使用了TensorFlow Lite

以及...

如何使用TensorFlow Lite

TensorFlow Lite非常易于上手,建议采用如下步骤:

使用Demo App
  • 下载:从https://www.tensorflow.org/mobile/tflite下载一个demo app(iOS/Android)
  • 编译:在您的机器上简单的编译demo apps
  • 运行:运行demo app,并试着修改看看
预训练 (Pretrained) & 再训练 (Retrained) 模型

预训练模型:Tensorflow网站上提供了各种不同预训练的机器学习模型,比如图像分类、物体检测、图像分割、文字预测、等等。

再训练模型:请尝试迁移学习Colab教程 - Tensorflow for Poets。顾名思义,这个教程设计初衷是尽量简单,让没有技术背景的人也能运行。所谓迁移学习,是重新训练已经存在模型的一小部分,应用到一个新的问题上。

开发自己的模型

  1. 构建 & 训练模型

    使用TensorFlow(Estimator或Keras),构建模型,训练,取得Saved Model。

  2. 转换格式

    使用TensorFlow Lite转换器转换为TensorFlow Lite可用的模型,模型转换代码如下:

import tensorflow.contrib.lite as litegraph_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

  • 目前已经有75个内建Ops
  • Coming soon: Tensorflow Lite Compat模式
  • 计划第四季度发布
  • 增加数百个支持的Ops

验证模型、分析性能:

  • 转换后的模型是否正确
  • 模型的推断速度多快
  • Runtime library多大

更多详细资料,请参考: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 interpretertflite.run(inputs, outputs);
}
复制代码
补充:模型优化

在实际项目中,通常还会进行模型优化,这样在前面的流程中加入模型优化,演变为如下流程:

TensorFlow Lite提供一系列的工具帮助开发者优化模型:

  • 训练后Quantization

最新发布,其优点是使用简单,只需在前面的converter代码加入一行:

converter.post_training_quantization = True
复制代码

量化会造成模型精确度的损失,但据观察,对图像、音频模型预测精确度影响很小。经过量化,CNN模型可增加10~50%的性能提升,RNN可以增加到3倍性能提升。

  • 训练时Quantization

一年前发布的工具,理论上可以比训练后Quantization更好的精确度,但使用上比较复杂,只在CNN模型中比较有效果,对于RNN模型,效果有限。

团队同时在研究两者,希望两者都有所提升。

Demo

一个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 技术干货

相关文章:

热烈庆祝“mysql 集群数据库架构成功”

坚持了两周,终于在linux下把mysql集群数据库给架起来了!下面简单说明下集群数据库原理 第一:集群数据库分MGM,NDBD,SQL 其中MGM是相当于“中央政府”,维持NDBD,SQL等服务器的之间的关系的 NDBD是数据存储的分布化&…

352万帧标注图片,1400个视频,亮风台推最大单目标跟踪数据集

CVPR 2019期间,专注于AR技术,整合软硬件的人工智能公司亮风台公开大规模单目标跟踪高质量数据集LaSOT,包含超过352万帧手工标注的图片和1400个视频,这也是目前为止最大的拥有密集标注的单目标跟踪数据集。论文《LaSOT: A High-qua…

centos7中nfs文件系统的使用

需求:file01:1.1.1.1(内网ip 172.20.103.212),file02:2.2.2.2(内网ip 172.20.103.211) 这两台机器的 /dev/mapper/myvg-mylv /data 这个盘都挂载到 video01 47.254.78.171, video02 47.254.83.81 这两台机器上即将file01和file02的/data目录都挂载到vid…

在图像变换中用最小二乘法求解仿射变换参数

设原图像为f(x,y),畸变后的图像为F(X,Y),要将F(X,Y)恢复为f(x,y),就是要找到(X,Y)坐标与(x,y)坐标的转换关系,这个转换关系称为坐标变换,表示为(x,y)T(X,Y)。 景物在成像过程中产生的扭曲,会使图像的比例失…

showModalDialog关闭子窗口,并刷新父窗口

一、用法&#xff1a;window.showModalDialog(url,args,dialogWidth650px;scrollno;dialogHeight250px;statusno; ); 二、关闭子窗口&#xff0c;并刷新父窗口 想在showModalDialog打开的窗口中提交表单且不打开新窗口 只需在打开的页面的<head>中加入<base target&qu…

cvDrawContours:在图像上绘制外部和内部轮廓

转自&#xff1a;http://www.aiseminar.cn/html/18/t-618.html?action-uchimage 函数cvDrawContours用于在图像上绘制外部和内部轮廓。当thickness > 0 时&#xff0c;绘制轮廓线&#xff1b;否则填充由轮廓包围的部分。 void cvDrawContours( CvArr *img, CvSeq* contour,…

Python最抢手、Go最有前途,7000位程序员揭秘2019软件开发现状

作者 | 屠敏 整理报告来源 | JetBrains转载自 CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;互联网的下半场&#xff0c;科技公司为面对更加严峻的竞争环境&#xff0c;越来越重视开源节流。而对于身处其中且撑起 IT 半边天的技术人&#xff0c;如今如何了&#xff1f;从…

main函数参数

参考&#xff1a;Where Does GCC Look to Find its Header Files? 命令行参数 VS 程序参数 ./a.out 1 2 3 4 5 6 1 2 3 4 5 6是程序参数&#xff0c;是传给a.out这个程序处理的&#xff0c;main里面的argv来接收 ./a.out 1 2 3 4 5 6完整的这一串才是命令行参数 代码演示 如下…

转载 load-on-startup的用法

转载于:http://www.ituring.com.cn/article/50477 Web.xml中的Servlet中的配置&#xff1a; <servlet><servlet-name>createBlog</servlet-name><servlet-class>com.cnblogs.CreateBlog</servlet-class><load-on-startup>0</load-on-s…

商汤62篇论文入选CVPR 2019,一览五大方向最新研究进展

&#xff08;图源自视觉中国&#xff09;作为与ICCV、ECCV并称为计算机视觉领域三大国际会议之一&#xff0c;本届CVPR大会共收到5265篇有效投稿&#xff0c;接收论文1300篇&#xff0c;接收率为25.2%。商汤科技CVPR 2019录取论文在多个领域实现突破作为国内CV领域的明星公司&a…

cvSaveImage保存图像

转自&#xff1a;http://blog.csdn.net/luhuillll/archive/2009/10/28/4739471.aspx opencv保存图象直接使用cvSaveImage,这个函数.但是windows位图的图象格式是RGBt格式,而opencv的图象存储格式是BGR. 这样导致保存的图象失真.在windows下查看图象好象变绿色了.所以在保存图象…

软工实践原型设计——PaperRepositories

软工实践原型设计——PaperRepositories 写在前面 本次作业链接队友&#xff08;031602237吴杰婷&#xff09;博客链接pdf文件地址原型设计地址(加载有点慢...)结对成员:031602237吴杰婷 & 031602636许舒玲原型设计工具:Axure RP 8PSP表格 PSP3.1Personal Software Process…

nagios+sendmail配置

以下为自己安装测试过的&#xff0c;如果有问题&#xff0c;大家一起讨论 系统环境&#xff1a;centos6.2 64位 最小化安装 一 安装nagios 见附件&#xff1a;nagios官方文档&#xff08;nagios_nrpe20120929_web.pdf&#xff09; 二 安装配置sendmail 我用hotmail邮箱接收nagi…

真正的博士是如何参加AAAI, ICML, ICLR等AI顶会的?

&#xff08;图源自视觉中国&#xff09;整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;源于对学术的热爱&#xff0c;让很多人走上了博士这条求索之路&#xff0c;而热爱会让他们勤奋付出&#xff0c;勤奋让他们成为佼佼者。在刚刚过去的 ICML 大会上&a…

matlab图像滤波

转自&#xff1a;http://hi.baidu.com/wang%5Fpw/blog/item/36354a637ac87b48eaf8f879.html clc; clear all; Iimread(eight.tif); % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %用中值滤波&#xff0c;多维滤波&#xff0c;使用中心为-4,-8的拉普 % %拉…

​2018你不得不看的国内CRM软件排行榜

2018你不得不看的国内CRM软件排行榜短短几年时间&#xff0c;CRM在中国的发展就已经非常迅猛&#xff0c;现在已经成为了管理软件增长最快的产业。在我们总结的CRM软件排行榜中&#xff0c;腾讯企点的CRM软件赫然摆在前列。而CRM在中国中小企业已经突破千万家&#xff0c;占全国…

二维物体形状识别方法比较

二维物体形状识别方法比较 摘 要 针对模式识别中二维物体的形状识别问题&#xff0c;以二值图像中的物体形状为主要研究对象&#xff0c;依次从特征提取、分类器设计两个主要层面对形状识别方法进行了全面综述&#xff0c;并分析了国内外研究现状&#xff0c;特别是近年来所取…

个人知识管理的10个误区

100个人&#xff0c;有100个对个人知识管理的理解。 当我们热烈的讨论“个人知识管理”的时候&#xff0c;也许我们讨论的根本不是一个东西&#xff1a;你理解的个人知识管理和他理解的个人知识管理根本不同。 拙作《你的知识需要管理》试图去建立一个个人知识管理内容的框架&a…

关于比特币现金升级问题讨论不断升温

过去几周&#xff0c;比特币现金的支持者一直在讨论定于今年11月15日推出的硬叉。大多数人都明白&#xff0c;目前有两个阵营有着完全不同的愿景。看来双方在短期内不会达成妥协。最近&#xff0c;随着时间的推移&#xff0c;双方都在测试某些特性&#xff0c;并发表了关于特定…

阿里AI摘图像识别竞赛WebVision桂冠,万物识别准确率创世界纪录

近日&#xff0c;第三届图像识别竞赛WebVision中&#xff0c;阿里AI击败了全世界150多支参赛队伍&#xff0c;获得冠军。 WebVision由谷歌、美国卡耐基梅隆大学、苏黎世联邦理工大学等机构联合全球视觉技术领域顶级学术会议CVPR发起&#xff0c;是目前图像识别领域最权威的竞赛…

做人工智能必看的45篇论文 | 附下载地址

而AI领域的发展会是IT中最快的。我们所看到的那些黑客技&#xff0c;其后面无不堆积了大量的论文。而且都是最新、最前沿的论文。从某种调度来讲&#xff0c;他们所用的技术跟书籍里的内容确实不是一个时代。要想与时俱进&#xff0c;就必须改变思路——从论文入手。今天给大家…

C# Socket编程(5)使用TCP Socket

TCP 协议(Transmission Control Protocol,传输控制协议)是TCP/IP体系中面向连接(connection oriented)的传输层(transport layer)&#xff0c;TCP协议能够检测和恢复IP层提供的主机到主机的信道中可能发生的报文丢失、重复以及其他错误。由于TCP协议是一种面向连接协议:在使用它…

opencv 检测直线、线段、圆、矩形

转自&#xff1a;http://blog.csdn.net/byxdaz/archive/2009/12/01/4912136.aspx 检测直线&#xff1a;cvHoughLines&#xff0c;cvHoughLines2 检测圆&#xff1a;cvHoughCircles 检测矩形&#xff1a;opencv中没有对应的函数&#xff0c;下面有段代码可以检测矩形&#xff…

kaldi 源码分析(十) - gmm-init-mono.c分析

一直没有搞明白 hmm-gmm 之间是通过什么联系起来的&#xff0c;花了些时间查代码&#xff0c;看到最直观联系的就是 gmm-init-mono 工具。 gmm-init-mono 基础类通过上述看到&#xff0c;主要的配置都是 在 topo 文件中, 这里需要将一些常见的名称理解下来&#xff0c;这里直接…

你最需要了解的H3C交换机端口安全模式

以下内容摘自正在全国热销的《Cisco/H3C交换机高级配置与管理技术手册》一书&#xff08;畅销经典——《Cisco/H3C交换机配置与管理完全手册》&#xff08;第二版&#xff09;的配套姊妹篇&#xff09;。目前京东网和卓越网上都有“满150元减50元&#xff0c;满300元减100元”的…

TCL发布7项AI合作项目,聘任蒋涛为技术顾问

作者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2019 年 6 月 14 日&#xff0c;TCL 举办了以“技术无疆界&#xff0c;合作赢未来”为主题的技术合作开放大会。会上&#xff0c;TCL 面向全球发布了 13 项技术合作项目&#xff0c;其中包括 7 项人工智能技…

Microsoft Platform SDK Febrary 2003更新vc6的SDK网址

Microsoft Platform SDK Febrary 2003更新vc6的SDK网址&#xff0c;目前找到3处&#xff0c;分别为&#xff1a; 1、http://www.x86pro.com/plus/view.php?aid100 2、http://blog.csdn.net/Mobidogs/archive/2007/02/22/1512620.aspx 3、http://blog.chinaunix.net/u1/34831…

11岁姑娘挑战8分钟编程小程序!蚂蚁金服董事长井贤栋:欢迎加入

小蚂蚁说&#xff1a; 9月19日&#xff0c;在阿里巴巴云栖大会现场&#xff0c;一位年仅11岁的小学生万海妍报名参加了支付宝8分钟小程序挑战赛&#xff0c;成为现场最年轻选手。据悉&#xff0c;蚂蚁金服董事长兼CEO井贤栋在会后对万海妍十分赞赏&#xff0c;向她发出邀请&…

MST配置详解

一、 组网需求1. 网络中所有设备都属于同一个MST域。SW1和SW2为汇聚层设备&#xff0c;SW3和SW4为接入层设备。 2. 通过配置MSTP&#xff0c;使不同VLAN的报文按照不同的MSTI转发&#xff1a; VLAN10的报文沿MSTI1转发&#xff0c;VLAN30沿MSTI3转发&#…

CImg库的一个简单例子

转自&#xff1a;http://www.cppprog.com/2009/0424/106.html CImg是一个跨平台的C的图像处理库&#xff0c;提供了加载、处理、显示、保存等一系列功能&#xff0c;其中的图像处理功能尤其强大。 首先&#xff0c;建议先到这里欣赏一下使用CImg代码做的Demo&#xff0c;就是它…