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

简介: 【机器学习模型部署】在 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,这样学的会更透彻。


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

相关文章
|
7月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
月之暗面发布开源模型Kimi K2,采用MoE架构,参数达1T,激活参数32B,具备强代码能力及Agent任务处理优势。在编程、工具调用、数学推理测试中表现优异。阿里云PAI-Model Gallery已支持云端部署,提供企业级方案。
464 0
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
|
11月前
|
机器学习/深度学习 人工智能 JSON
【解决方案】DistilQwen2.5-R1蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
阿里云的人工智能平台 PAI,作为一站式的机器学习和深度学习平台,对DistilQwen2.5-R1模型系列提供了全面的技术支持。无论是开发者还是企业客户,都可以通过 PAI-ModelGallery 轻松实现 Qwen2.5 系列模型的训练、评测、压缩和快速部署。本文详细介绍在 PAI 平台使用 DistilQwen2.5-R1 蒸馏模型的全链路最佳实践。
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
Cosmos on PAI系列一:PAI-Model Gallery云上一键部署NVIDIA Cosmos Reason-1
本篇文章介绍 Cosmos 最新世界基础模型 Cosmos Reason-1 如何在阿里云人工智能平台 PAI 上进行快速部署使用。
|
10月前
|
人工智能 JSON 算法
【解决方案】DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
DistilQwen 系列是阿里云人工智能平台 PAI 推出的蒸馏语言模型系列,包括 DistilQwen2、DistilQwen2.5、DistilQwen2.5-R1 等。本文详细介绍DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践。
|
11月前
|
人工智能 运维 API
PAI-Model Gallery云上一键部署阶跃星辰新模型Step1X-Edit
4月27日,阶跃星辰正式发布并开源图像编辑大模型 Step1X-Edit,性能达到开源 SOTA。Step1X-Edit模型总参数量为19B,实现 MLLM 与 DiT 的深度融合,在编辑精度与图像保真度上实现大幅提升,具备语义精准解析、身份一致性保持、高精度区域级控制三项关键能力;支持文字替换、风格迁移等11 类高频图像编辑任务类型。在最新发布的图像编辑基准 GEdit-Bench 中,Step1X-Edit 在语义一致性、图像质量与综合得分三项指标上全面领先现有开源模型,比肩 GPT-4o 与 Gemin。PAI-ModelGallery 支持Step1X-Edit一键部署方案。
|
7月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署gpt-oss系列模型
阿里云 PAI-Model Gallery 已同步接入 gpt-oss 系列模型,提供企业级部署方案。
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
【新模型速递】PAI-Model Gallery云上一键部署MiniMax-M1模型
MiniMax公司6月17日推出4560亿参数大模型M1,采用混合专家架构和闪电注意力机制,支持百万级上下文处理,高效的计算特性使其特别适合需要处理长输入和广泛思考的复杂任务。阿里云PAI-ModelGallery现已接入该模型,提供一键部署、API调用等企业级解决方案,简化AI开发流程。
|
9月前
|
机器学习/深度学习 人工智能 JSON
DistilQwen-ThoughtX 蒸馏模型在 PAI-ModelGallery 的训练、评测、压缩及部署实践
通过 PAI-ModelGallery,可一站式零代码完成 DistilQwen-ThoughtX 系列模型的训练、评测、压缩和部署。
|
API 开发工具 Python
阿里云PAI部署DeepSeek及调用
本文介绍如何在阿里云PAI EAS上部署DeepSeek模型,涵盖7B模型的部署、SDK和API调用。7B模型只需一张A10显卡,部署时间约10分钟。文章详细展示了模型信息查看、在线调试及通过OpenAI SDK和Python Requests进行调用的步骤,并附有测试结果和参考文档链接。
3954 11
阿里云PAI部署DeepSeek及调用

热门文章

最新文章

相关产品

  • 人工智能平台 PAI