热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

移动端目标识别(1)——使用TensorFlowLite将tensorflow模型部署到移动端(ssd)之TensorFlowLite简介

     平时工作就是做深度学习,但是深度学习没有落地就是比较虚,目前在移动端或嵌入式端应用的比较实际,也了解到目前主要有caffe2,腾讯ncnn,tensorflow,因为工作

 

     平时工作就是做深度学习,但是深度学习没有落地就是比较虚,目前在移动端或嵌入式端应用的比较实际,也了解到目前主要有

caffe2,腾讯ncnn,tensorflow,因为工作用tensorflow比较多,所以也就从tensorflow上下手了。

下面内容主要参考&翻译:

  https://www.tensorflow.org/mobile/?hl=zh-cn

  https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_on_mobile_tensorflowlite.md

       ....等等,目前自己也是刚开始学移动端和嵌入式端部署,虽然这项技术感觉已经有点old了。

单独阅读英文文档没有翻译理解的透彻,如果有表述不对或者误人子弟的地方,还请拍砖,让我改正。

 

 

TensorFlow Lite和TensorFlow Mobile简介:

     tensorflow旨在成为深度学习在移动端平台部署的良好解决方案。google公司目前主要有两套在移动端和嵌入式端部署解决方案,

分别是:TensorFlow for Mobile 和 TensorFlow Lite.我们这次主要学习tensorflow lite,然后再看tensorflow Mobile。

    他们两个的主要不同点:

    TensorFlow Lite是TensorFlow Mobile的演变,在大多数情况下,使用TensorFlow Lite开发的应用程序将具有更小的二进制

大小,更少的依赖性和更好的性能。TensorFlow Lite仅支持一组有限的运算符,因此默认情况下并非所有模型都可以使用它。 TensorFlow for Mobile具有更全面的支持功能

    TensorFlow Lite在移动平台上提供更好的性能和更小的二进制文件存储大小,并且可以利用硬件进行加速(如果该平台支持)。此外,

它具有更少的依赖,因此可以在更简单,更受约束的设备方案上构建(build/编译)和托管。TensorFlow Lite还支持 Neural Networks API 的定位加速器。

   TensorFlow Lite目前包含了一组有限的操作集合(operators set)。虽然TensorFlow for Mobile默认情况下仅支持一组约束操作,

但原则上:可以对其进行自定义以编译该内核,使得在TensorFlow中使用任意运算符。因此,TensorFlow Lite当前不支持的用例应继续使用TensorFlow for Mobile。

随着TensorFlow Lite的发展,它所支持的操作集合将不断增加,使得在移动端的部署更加地容易。

 

TensorFlow Lite简介:

    TensorFlow Lite是TensorFlow针对移动和嵌入式设备的轻量级解决方案。它支持设备端机器学习推理,并具有的低延迟和较小的二进制文件尺寸。

TensorFlow Lite还支持Android Neural Networks API的硬件加速。TensorFlow Lite使用许多技术来实现低延迟,例如优化移动应用程序的内核,

预融合激活层,以及允许量化内核(更小和更快(定点数学/定点数计算)模型,浮点转整型)。

大多数TensorFlow Lite文档暂时都在GitHub上(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite)。

 

TensorFlow Lite包含什么?

    TensorFlow Lite支持一组核心运算符,包括量化和浮点运算,它们已针对移动平台进行了调整。它们结合了预融合激活和偏置,

以进一步提高性能和量化精度。此外,TensorFlow Lite还支持在模型中使用自定义操作。TensorFlow Lite基于FlatBuffers定义了一种新的模型文件格式。

FlatBuffers是一个开源,高效的跨平台序列化库。它类似于 protocol buffers(协议缓冲区),但主要区别在于FlatBuffers在访问数据之前通常与每个对象的内存分配相结合,

不需要对辅助表示(a secondary representation)进行解析/解包步骤。此外,FlatBuffers的代码占用空间比protocol buffers(协议缓冲区)小一个数量级。

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

    TensorFlow Lite提供了一个利用硬件加速的接口(如果在设备支持)。它通过Android Neural Networks API, 实现,可在Android 8.1(API级别27)及更高版本上使用。

 

为什么我们需要一个新的移动专用库?

     机器学习正在改变计算范式,我们看到了移动和嵌入式设备上新用例的新趋势。在相机和语音交互模型的推动下,消费者的期望也趋向于与其设备进行自然的,类人的交互。

     有几个因素引起了这个领域的兴趣:

             × 硅层的创新为硬件加速提供了新的可能性,而Android Neural Networks API 等框架可以轻松利用这些功能。

             ×实时计算机视觉技术和口语理解的最新进展已引导了移动优化的基准模型的开源(例如,MobileNets,SqueezeNet)。

             ×广泛可用的智能应用为设备智能创造了新的可能性。

             ×能够提供“离线”用例,其中设备不需要连接到网络。

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

 

TensorFlow Lite亮点

    TensorFlow Lite提供:

        × 一组核心运算操作(operators),包括量化和浮动,其中许多已经针对移动平台进行了调整。
这些可用于创建和运行自定义模型。开发人员还可以编写自己的自定义运算符并在模型中使用它们。

       × 一种新的基于FlatBuffers的模型文件格式。

       ×  具有基于设备的内核优化解释器,可在移动设备上更快地执行。

       × TensorFlow转换器(TensorFlow converter)将TensorFlow训练的模型转换为TensorFlow Lite格式。

       × 更小的尺寸:当所有支持的操作链接时,TensorFlow Lite小于300KB,当仅使用支持InceptionV3和Mobilenet所需的操作时,小于200KB。

        ×预先测试的模型:

            以下所有模型均可保证“开箱即用/work”:

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

                ×MobileNets一系列移动优先计算机视觉模型,旨在有效地最大限度地提高准确性,同时注意到设备或嵌入式应用程序的受限资源。

它们是小型,低延迟,低功耗模型,参数化以满足各种用例的资源限制。它们可以用于分类,检测,嵌入(特征编码)和分割。

MobileNet模型比Inception V3更小但精度更低(稍低)。

               ×在智能回复上,一种端上模型,通过联系与上下文相关的消息,为新传入的文本消息提供一键式回复。该模型专为内存受限设备(如手表和手机)而构建,

并已成功应用于Smart Replies on Android Wear,在所有第一方和第三方应用。

另请参阅TensorFlow Lite支持的模型的完整列表TensorFlow Lite's supported models(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/models.md),包括型号,性能编号和可下载的模型文件。

      × MobileNet 模型的量化版本,其运行速度比CPU上的非量化(浮点)版本快。

      × 新的Android演示应用程序,用于说明使用TensorFlow Lite和量化的MobileNet模型进行对象分类。

      × Java和C ++ API支持

 

TensorFlow Lite架构:

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

    移动端目标识别(1)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之TensorFlow Lite简介

       从磁盘上经过训练的TensorFlow模型开始,您将使用TensorFlow Lite转换器将该模型转换为TensorFlow Lite文件格式(.tflite)。然后,您可以在移动应用程序中使用该转换后的文件。

 

  部署TensorFlow Lite模型文件使用:

          Java API:围绕Android上的C ++ API的便利包装器。

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

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

         在部分Android设备上,Interpreter将使用Android Neural Networks API进行硬件加速,如果没有,则默认为CPU执行。

       您还可以使用可由Interpreter使用的C ++ API实现自定义内核。

 

未来的工作

    在未来的版本中,TensorFlow Lite将支持更多模型和内置运算符,包括定点和浮点模型的性能改进,工具的改进,以便更轻松地开发工作流程以及支持其他更小的设备等。

在我们继续开发的过程中,我们希望TensorFlow Lite能够大大简化针对小型设备模型的开发人员体验。

 

Next Steps

        TensorFlow Lite GitHub存储库。包含其他文档,代码示例和演示应用程序。  

 


推荐阅读
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • ARM汇编基础基于Keil创建STM32汇编程序的编写
    文章目录一、新建项目(1)工具介绍(2)创建项目:二、配置环境(1)配置芯片&#x ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 使用YUM命令的实用示例与详解
    本文详细介绍了使用YUM命令的实用示例,包括如何自定义YUM仓库、创建和配置自定义的repo文件,以及通过YUM命令安装HTTPD软件包的具体步骤。此外,还提供了相关命令的详细解释和常见问题的解决方案,帮助用户更好地理解和使用YUM工具。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文深入探讨了如何利用Maven高效管理项目中的外部依赖库。通过介绍Maven的官方依赖搜索地址(),详细讲解了依赖库的添加、版本管理和冲突解决等关键操作。此外,还提供了实用的配置示例和最佳实践,帮助开发者优化项目构建流程,提高开发效率。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
author-avatar
乐思GO_361
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有