0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TensorFlow Lite是TensorFlow针对移动和嵌入式设备的轻量级解决方案

Tensorflowers 来源:未知 作者:李倩 2018-07-31 15:37 次阅读

TensorFlow Lite 是 TensorFlow 针对移动和嵌入式设备的轻量级解决方案。它允许您在低延迟的移动设备上运行机器学习模型,因此您可以利用它进行分类,回归或获取你想要的任何东西,而无需与服务器交互。

注:TensorFlow Lite 链接

https://www.tensorflow.org/mobile/tflite/

目前,TensorFlow Lite 为 AndroidiOS 设备提供了 C ++ API,并且为 Android 开发人员提供了 Java Wrapper。此外,在 Android 设备上,解释器还可以使用 Android 经网络 API 进行硬件加速,否则它将默认为 CPU 执行。在本文中,我将重点介绍如何在 Android 应用中使用它。

TensorFlow Lite 包含一个运行时环境,我们可以在其上运行预先存在的模型,并且它还提供了一套工具,可以为移动和嵌入式设备准备模型。

TensorFlow Lite 目前尚未支持训练模型。我们可以在高性能的机器上训练模型,然后将该模型转换为 TFLITE 格式,最终将其加载到解释器中。

TensorFlow Lite 目前处于开发人员预览阶段,因此可能不支持 TensorFlow 模型中的所有操作。但是它支持常见的图像分类模型,包括 Inception 和 MobileNets。在本文中,您将了解如何在 Android 上运行 MobileNet 模型。该应用程序将查看相机信息并使用经过训练的 MobileNet 对图像进行分类。

将 TensorFlow Lite 与 MobileNets 配合使用

例如,在这张图片中,我将相机对准了我最喜欢的咖啡杯,应用程序将它归类为 “杯子”。有趣的是,它有一个宽大的手柄,你可以看到它非常像一个茶壶!

这是如何做到的?它使用 MobileNet 模型,该模型针对移动设备上的多种图像场景进行设计和优化,包括对象检测,分类,面部属性检测和地标识别。

MobileNet 有许多变种,在此站点托管了 TensorFlow Lite 的训练模型。你会注意到每个文件都是一个包含两个文件的 zip 包:一个 labels.txt 文件,其中包含与模型相关的标签;一个 tflite 文件,其中包含可以与 TensorFlow Lite 一起使用的模型版本。如果你想要构建一个使用 MobileNets 的 Android 应用程序,则需要从此站点下载模型。你马上就会看到。

使用 TensorFlow Lite 构建 Android 应用程序

要构建使用 TensorFlow Lite 的 Android 应用程序,首先需要将 tensorflow-lite 库添加到您的应用程序中。这可以通过将以下行添加到 build.gradle 文件的依赖项部分来完成:

compile ‘org.tensorflow:tensorflow-lite:+’

完成此操作后,你可以导入 TensorFlow Lite 解释器。解释器通过为其提供一组输入来加载模型并允许你运行它。然后 TensorFlow Lite 将执行模型并输出结果,这真的很简单。

import org.tensorflow.lite.Interpreter;

要使用它,你需要创建一个 Interpreter 实例,然后使用 MappedByteBuffer 加载它。

protected Interpreter tflite;tflite = new Interpreter(loadModelFile(activity));

在 GitHub 上的 TensorFlow Lite 示例中有一个辅助函数。只需确保函数 getModelPath() 返回一个指向特定模型的路径,并且加载该模型。

注:TensorFlow Lite 示例链接

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/java/demo/app/src/main/java/com/example/android/tflitecamerademo/ImageClassifier.java

/** Memory-map the model file in Assets. */privateMappedByteBuffer loadModelFile(Activity activity)throwsIOException {AssetFileDescriptor fileDescriptor = activity.getAssets().openFd(getModelPath());FileInputStream inputStream =newFileInputStream(fileDescriptor.getFileDescriptor());FileChannel fileChannel = inputStream.getChannel();longstartOffset = fileDescriptor.getStartOffset();longdeclaredLength = fileDescriptor.getDeclaredLength();returnfileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);}

然后,要对图像进行分类,我们只需要在 Interpeter 上调用 run 方法,并将图像数据和标签数组传递给它,它将完成剩下的工作:

tflite.run(imgData, labelProbArray);

详细介绍如何从相机中获取图像,并为 tflite 做准备超出了本文的范围,但是在 tensorflow github 中有一个完整示例详细阐明了这一切。通过单步执行此示例,你可以了解到如何从相机中获取图像,如何利用数据进行分类,以及如何采用将加权输出优先级列表从模型映射到标签数组的方式来处理输出。

要运行该示例,请确保拥有完整的 TensorFlow 源代码。你可以通过以下方式获取源代码:

> git clone https://www.github.com/tensorflow/tensorflow

完成后,你可以利用 Android Studio 打开 TensorFlow 示例项目(示例代码路径为:

/tensorflow/contrib/lite/java/demo):

演示文件不包含任何模型,但我们需要使用 mobilenet_quant_v1_224.tflite 文件,我们可以通过这个网站下载该模型。最后解压缩并将其放在 assets 文件夹中。

注:这个网站链接

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/models.md

现在应该能够运行该应用程序了。

请注意,该应用程序同时支持 Inception 和 Quantized MobileNet。它默认支持后者,因此您需要确保模型存在,否则应用程序将运行失败。可以在 ImageClassifier.java 文件中找到用于从相机捕获数据并将其转换为字节缓冲区以便加载到模型中的代码。

核心功能可以在 Camera2BasicFragment.java 文件的 classifyFrame() 方法中找到:

/** Classifies a frame from the preview stream. */

private voidclassifyFrame() { if(classifier==null|| getActivity() ==null||cameraDevice== null) { showToast(“Uninitialized Classifier or invalid context.”) return;}Bitmap bitmap =textureView.getBitmap( classifier.getImageSizeX(),classifier.getImageSizeY());String textToShow =classifier.classifyFrame(bitmap);bitmap.recycle();showToast(textToShow);}

在这里,您可以看到位图加载并调整为适合分类器的大小。然后 classifyFrame() 方法将返回包含与图像匹配的前 3 个类的列表及其权重的文本。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    66

    文章

    8420

    浏览量

    132685
  • tensorflow
    +关注

    关注

    13

    文章

    329

    浏览量

    60537
  • TensorFlow Lite
    +关注

    关注

    0

    文章

    26

    浏览量

    642

原文标题:在 Android 上使用 TensorFlow Lite

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一个面向嵌入式系统的轻量级框架

    mr-library 是一个面向嵌入式系统的轻量级框架,提供统一的底层驱动设备模型以及基础服务功能,具有模块化设计、可配置性和扩展性的特点, 可帮助开发者快速构建嵌入式应用程序。
    发表于 09-01 12:22 582次阅读

    如何使用i.MX RT1060跨接MCU通过TensorFlow Lite实施数字识别

    获得了Google的出色在线文档,学习资源,指南和示例。为了使受计算限制的机器(例如移动设备嵌入式解决方案)能够运行TensorFlow
    发表于 09-29 09:40

    【飞凌嵌入式OKMX8MP-C 开发板试用体验】tensorflow-lite-2.6编译&运行label_image例程

    本帖最后由 donatello1996 于 2022-4-18 23:35 编辑 【飞凌嵌入式OKMX8MP-C 开发板试用体验】tensorflow-lite-2.6编译&运行
    发表于 02-21 00:26

    如何将TensorFlow Lite应用程序移植到Arm Cortex-M55系统上

    ARM Cortex-M55处理器是第一个采用ARMv8.1-M架构的处理器,该架构包括ARM Helium技术(也称为M-profile矢量扩展(MVE))的实现。Helium技术可在下一代嵌入式
    发表于 03-31 10:40

    tensorflow lite上的未定义引用是怎么回事?

    我在 LPC55S69 上构建了一个 cifar-10 tensorflow lite 项目,在那里我得到了很多与 TensorFlow lite 相关的未定义引用。在附件里(请用no
    发表于 04-04 08:09

    是什么导致TensorFlow Lite的NNAPI Delegate被弃用?

    在i.MX Machine Learning User\'s Guide LF5.15.5-1.0.0中,我发现了如下release note语句:TensorFlow Lite 的 NNAPI
    发表于 04-07 10:25

    tensorflow-lite可以通过NPU加速运行吗?

    你能帮我确定构建/安装所需的最小包,以便 tensorflow-lite 可以通过 NPU 加速运行吗?我知道 NPX 将它捆绑为 packagegroup-imx-ml - 但它包含的内容远远
    发表于 04-14 08:17

    如何使用meta-imx层中提供的tensorflow-lite编译图像?

    我们正在尝试使用 meta-imx 层中提供的 tensorflow-lite 编译图像。我们没有任何 自定义更改/bbappends (Highlight to read)sources
    发表于 05-29 06:55

    如何使用TensorFlow将神经网络模型部署到移动嵌入式设备

    有很多方法可以将经过训练的神经网络模型部署到移动嵌入式设备上。不同的框架在各种平台上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如And
    发表于 08-02 06:43

    基于Linux的轻量级嵌入式GUI系统及实现

    本文介绍了嵌入式图形用户界面(GUI)的特点、发展概况以及嵌入式图形用户界的实现方法。针对开发自主、轻型、占用资源少可配置的GUI系统,提出了轻量级GUI系统的设计实现
    发表于 08-31 11:52 23次下载

    用于移动设备的框架TensorFlow Lite发布重大更新

    在Pixel 3的人像模式(Portrait mode)中,与使用CPU相比,使用GPU的Tensorflow Lite,用于抠图/背景虚化的前景-背景分隔模型加速了4倍以上。新深度估计(depth estimation)模型加速了10倍以上。
    的头像 发表于 01-21 13:45 3682次阅读

    TensorFlow Lite 微控制器

    TensorFlow Lite for Microcontrollers 是 TensorFlow Lite 的一个实验性移植版本,它适用于微控制器和其他一些仅有数千字节内存的
    的头像 发表于 08-05 10:11 5w次阅读
    <b class='flag-5'>TensorFlow</b> <b class='flag-5'>Lite</b> 微控制器

    基于TensorFlow Lite的几项技术更新

    TensorFlow Lite 版本现已在 TensorFlow Hub 上推出。我们对该版本进行了一些可提升准确率的更新,并使其与硬件加速器兼容,其中包括 GPU 和获得 Android NN API 支持的其他
    的头像 发表于 09-23 15:38 2197次阅读

    Tensorflow Lite 使用与优化

    Tensorflow Lite 的基本框架如上。数据存储的结构是Flatbuffer。执行上次结构支持Keras 和Estimator和Legacy等等。而下层支持NN API、GP...
    发表于 01-25 17:48 2次下载
    <b class='flag-5'>Tensorflow</b> <b class='flag-5'>Lite</b> 使用与优化

    深度详解嵌入式系统专用轻量级框架设计

    MR 框架是专为嵌入式系统设计的轻量级框架。充分考虑了嵌入式系统在资源和性能方面的需求。通过提供标准化的设备管理接口,极大简化了嵌入式应用开
    发表于 04-27 02:32 999次阅读
    深度详解<b class='flag-5'>嵌入式</b>系统专用<b class='flag-5'>轻量级</b>框架设计