【机器学习模型部署】在 Android App 使用TensorFlow Lite

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 【机器学习模型部署】在 Android App 使用TensorFlow Lite

大家好

0

上月底我组织了【组队学习】TensorFlow 入门课程(中文),截至目前有300多同学加入。


学习内容是


  • TensorFlow 部署简介
  • TensorFlow Lite简介
  • 在 Android app 使用TensorFlow Lite
  • 在 iOS app 使用TensorFlow Lite
  • 使用TensorFlow Serving 部署


主要就是 TensorFlow LiteTensorFlow.jsTF Serving的实操,其实今年3月份我就接触 TensorFlow.js 了,当时还写了一篇入门教程:TensorFlow.js 用浏览器玩机器学习,9月在谷歌开发者大会上,我还亲身体验了这些黑科技,非常奇妙。


但是作为一个对安卓开发一无所知的人,我也想尝试借助 TensorFlow Lite 在 Android 和 iOS 上部署并使用机器学习模型。Learn by doing是我最推崇的学习方法,所以就跟着课程第二章和第三章code了一下,收获满满,本文即为我做的学习笔记。


TensorFlow Lite 简介


TensorFlow Lite 是一种在设备端运行 TensorFlow 模型的开源深度学习框架。移动开发要求轻量、低延迟、高效、隐私保护、省电,Lite很好满足了以上要求。


640.png


TensorFlow Lite 实现也很简单,最核心的是转化并保存模型、加载TFLite模型并配置张量。


640.png


训练、保存TF模型

这一步再细分为5小步,分别是,获取数据、获取基础模型、构建模型、训练模型、保存模型。


640.png


基础模型可以直接去 TensorFlow Hub 获取


640.png


https://hub.tensorflow.google.cn/


可以在页面左侧选择想要的模型类别、格式、TF版本、是否支持微调等等,也可以直接搜索。


比如图像分类,可以使用mobilenet_v2这个模型,点击下载即可。也可以复制链接,通过hub.KerasLayer方法下载。


640.png


剩下的步骤大家应该很熟悉了,训练好的模型,用tf.saved_model.save方法保存模型即可,推荐SavedModel格式。


加载TFLite模型并配置张量


这一步细分为3小步


640.png

将模型格式转换TFLite格式,转化可以使用TFLiteConverter方法,保存就是普通的文件写入操作,注意格式是.tflite。


640.png


加载TFLite并配置张量也非常简单,使用Interpreter方法就行了。


640.png

正式项目中使用测试集进行测试也是必须的,查看准确率等评价指标是否还在接受范围内。


640.png


TFLite还提供了模型优化方法converter.optimizations,可以使模型更小巧。


640.png


TFLite Model Maker


借助 TensorFlow Lite Model Maker 库,可以简化使用自定义数据集训练 TensorFlow Lite 模型的过程。该库使用迁移学习来减少所需的训练数据量并缩短训练时间。目前支持图像分类、文字分类、音频、BERT问答等任务。使用很简单,先安装


pip install tflite-model-maker


借助 Model Maker,仅仅通过几行代码即可使用自定义数据集训练 TensorFlow Lite 模型。例如,以下就是训练图像分类模型的步骤。


data = ImageClassifierDataLoader.from_folder('flower_photos/')
train_data, test_data = data.split(0.9)
model = image_classifier.create(train_data)
loss, accuracy = model.evaluate(test_data)
model.export(export_dir='/tmp/')


TFLite Model Maker 给了我们更多的模型创建的可选项。


640.png


实践:使用Android Studio 开发一个TFLite模型的微型APP


先安装Android Studio ,它是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。


下载地址:https://developer.android.google.cn/studio


640.png


另外我们还能顺手从0开始接触一下Kotlin,这是谷歌推荐使用的Andriod App开发语言。


640.png

1

先熟悉一下流程,New一个Project,选Empty Activity

640.png


项目配置页只重命名项目名称即可,其他不用管,等待初始化完成即可。


2


编写布局,我们的重点不是界面设计和实现,了解流程即可。不过后期也可以学习一下Android界面布局基础知识。


3


最核心的是添加TFLite依赖这一步,因为TFLite不是Android自带的API,需要使用Gradle构建工具引入TensorFlow Lite外部链接库。注意,Android工程中有两个gradle文件,我们需要的是App及的build.gradle文件。


640.png


在dependencies 中添加三个implementation即可(注意版本号)


640.png


然后再android配置项添加aaptOptions(安卓资源打包工具),配置为不要压缩TFLite文件,否则无法使用。


640.png


配置完成后点击右上角立即同步,等待完成即可。

640.png


下一步是切换为工程视角,在app-src目录下新建一个Assets 文件夹,模型会放到这里,直接把模型paste进来就行了。


640.png


640.png

最后一步就比较复杂和关键了——--使用模型


步骤:加载模型、实例化解释器、获取输入数据并格式化模型需要的数据类型、构造存放输出数据的数据结构、使用模型进行推理、获取结果显示在界面上


加载模型这部分代码写在app-src-main-java下MainActivity文件中


640.png

到这里才出现第一个难点,需要用Kotlin写一个loadModelFile函数来加载模型


640.png

实例化解释器在MainActivity文件类级别加入模型和解释器的声明,这里调用了上一步中的loadModelFile函数,把assets下的模型读入到tflitemodel对象,然后将tflitemodel作为参数实例化解释器,赋值给解释器对象tflite。


640.png


获取输入数据并格式化模型需要的数据类型

还记得加载TFLite模型并配置张量这一步吗,有一个获取输入interpreter.get_input_detailes详细信息的步骤。记下输入输出信息的shape和dtype

640.png

在kotlin中使用getInputTensor结构可以实现类似的效果


640.png


然后完成数据数据的格式化,这一步也超纲了,需要后续补充相关知识才能理解。


构造存放输出数据的数据结构


和上面类似,input改为output,不再重复。


使用模型进行推理


模型推理代码就简单了,把输入和输出数据对象作为参数放进run方法就行了


640.png


获取结果显示在界面上


将获取到的ByteBuffer转化为浮点型数据弹窗显示,主要就是定义这个弹窗。其实这部分对应界面设计和实现,也需要后续补充知识才能理解。


640.png


完整代码在:https://github.com/lmoroney/tfbook


后续准备认真学习一下,不过我不太喜欢学习一大堆基础知识,准备尝试复刻并运行成功一个官方案例,然后在此基础上根据自己的需求和兴趣魔改一个新app,这样学的会更透彻。


感兴趣的朋友可以点击阅读原文一起学啊。

相关文章
|
2月前
|
开发工具 git C++
【App Service】VS Code直接部署App Service时候遇见 “fatal: not a git repository (or any of the parent directories): .git”
通过VS Code发布Python App Service的时候,遇见了发布失败错误: The deployment failed with error: fatal: not a git repository (or any of the parent directories): .git . Please take a few minutes to help us improve the deployment experience
80 24
|
16天前
|
机器学习/深度学习 数据采集 数据可视化
TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤
本文介绍了 TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤,包括数据准备、模型定义、损失函数与优化器选择、模型训练与评估、模型保存与部署,并展示了构建全连接神经网络的具体示例。此外,还探讨了 TensorFlow 的高级特性,如自动微分、模型可视化和分布式训练,以及其在未来的发展前景。
39 5
|
1月前
|
JavaScript C++ 容器
【Azure Bot Service】部署NodeJS ChatBot代码到App Service中无法自动启动
2024-11-12T12:22:40.366223350Z Error: Cannot find module 'dotenv' 2024-11-12T12:40:12.538120729Z Error: Cannot find module 'restify' 2024-11-12T12:48:13.348529900Z Error: Cannot find module 'lodash'
41 11
|
28天前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
25天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
69 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
25天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
73 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 TensorFlow API
机器学习实战:TensorFlow在图像识别中的应用探索
【10月更文挑战第28天】随着深度学习技术的发展,图像识别取得了显著进步。TensorFlow作为Google开源的机器学习框架,凭借其强大的功能和灵活的API,在图像识别任务中广泛应用。本文通过实战案例,探讨TensorFlow在图像识别中的优势与挑战,展示如何使用TensorFlow构建和训练卷积神经网络(CNN),并评估模型的性能。尽管面临学习曲线和资源消耗等挑战,TensorFlow仍展现出广阔的应用前景。
57 5
|
1月前
|
C#
【Azure App Service】使用Microsoft.Office.Interop.Word来操作Word文档,部署到App Service后报错COMException
System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (0x80040154 (REGDB_E_CLASSNOTREG)).
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
79 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器人 Shell Linux
【Azure Bot Service】部署Python ChatBot代码到App Service中
本文介绍了使用Python编写的ChatBot在部署到Azure App Service时遇到的问题及解决方案。主要问题是应用启动失败,错误信息为“Failed to find attribute 'app' in 'app'”。解决步骤包括:1) 修改`app.py`文件,添加`init_func`函数;2) 配置`config.py`,添加与Azure Bot Service认证相关的配置项;3) 设置App Service的启动命令为`python3 -m aiohttp.web -H 0.0.0.0 -P 8000 app:init_func`。

热门文章

最新文章

相关产品

  • 人工智能平台 PAI