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

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 【机器学习模型部署】在 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,这样学的会更透彻。


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

相关文章
|
21天前
|
人工智能 JSON 算法
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
阿里云的人工智能平台 PAI,作为一站式、 AI Native 的大模型与 AIGC 工程平台,为开发者和企业客户提供了 Qwen2.5-Coder 系列模型的全链路最佳实践。本文以Qwen2.5-Coder-32B为例,详细介绍在 PAI-QuickStart 完成 Qwen2.5-Coder 的训练、评测和快速部署。
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
|
5天前
|
编解码 机器人 测试技术
技术实践 | 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型快速搭建专业领域知识问答机器人
Qwen2-VL是一款具备高级图像和视频理解能力的多模态模型,支持多种语言,适用于多模态应用开发。通过PAI和LLaMA Factory框架,用户可以轻松微调Qwen2-VL模型,快速构建文旅领域的知识问答机器人。本教程详细介绍了从模型部署、微调到对话测试的全过程,帮助开发者高效实现定制化多模态应用。
|
25天前
|
机器学习/深度学习 PyTorch API
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
Transformer架构自2017年被Vaswani等人提出以来,凭借其核心的注意力机制,已成为AI领域的重大突破。该机制允许模型根据任务需求灵活聚焦于输入的不同部分,极大地增强了对复杂语言和结构的理解能力。起初主要应用于自然语言处理,Transformer迅速扩展至语音识别、计算机视觉等多领域,展现出强大的跨学科应用潜力。然而,随着模型规模的增长,注意力层的高计算复杂度成为发展瓶颈。为此,本文探讨了在PyTorch生态系统中优化注意力层的各种技术,
50 6
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
|
14天前
|
机器学习/深度学习 人工智能 算法
人工智能浪潮下的编程实践:构建你的第一个机器学习模型
在人工智能的巨浪中,每个人都有机会成为弄潮儿。本文将带你一探究竟,从零基础开始,用最易懂的语言和步骤,教你如何构建属于自己的第一个机器学习模型。不需要复杂的数学公式,也不必担心编程难题,只需跟随我们的步伐,一起探索这个充满魔力的AI世界。
33 12
|
21天前
|
机器学习/深度学习 Python
机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况
本文介绍了机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况,而ROC曲线则通过假正率和真正率评估二分类模型性能。文章还提供了Python中的具体实现示例,展示了如何计算和使用这两种工具来评估模型。
42 8
|
21天前
|
机器学习/深度学习 Python
机器学习中模型选择和优化的关键技术——交叉验证与网格搜索
本文深入探讨了机器学习中模型选择和优化的关键技术——交叉验证与网格搜索。介绍了K折交叉验证、留一交叉验证等方法,以及网格搜索的原理和步骤,展示了如何结合两者在Python中实现模型参数的优化,并强调了使用时需注意的计算成本、过拟合风险等问题。
42 6
|
24天前
|
机器学习/深度学习 数据采集 算法
从零到一:构建高效机器学习模型的旅程####
在探索技术深度与广度的征途中,我深刻体会到技术创新既在于理论的飞跃,更在于实践的积累。本文将通过一个具体案例,分享我在构建高效机器学习模型过程中的实战经验,包括数据预处理、特征工程、模型选择与优化等关键环节,旨在为读者提供一个从零开始构建并优化机器学习模型的实用指南。 ####
|
28天前
|
人工智能 边缘计算 JSON
DistilQwen2 蒸馏小模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
本文详细介绍在 PAI 平台使用 DistilQwen2 蒸馏小模型的全链路最佳实践。
|
25天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的线性回归模型
本文深入探讨了机器学习中广泛使用的线性回归模型,从其基本概念和数学原理出发,逐步引导读者理解模型的构建、训练及评估过程。通过实例分析与代码演示,本文旨在为初学者提供一个清晰的学习路径,帮助他们在实践中更好地应用线性回归模型解决实际问题。
|
23天前
|
机器学习/深度学习 人工智能 TensorFlow
基于TensorFlow的深度学习模型训练与优化实战
基于TensorFlow的深度学习模型训练与优化实战
63 0

热门文章

最新文章

相关产品

  • 人工智能平台 PAI