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

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


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

相关文章
|
1月前
|
机器学习/深度学习 存储 设计模式
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
本文探讨了数据基础设施设计中常见的一个问题:数据仓库或数据湖仓中的表格缺乏构建高性能机器学习模型所需的历史记录,导致模型性能受限。为解决这一问题,文章介绍了缓慢变化维度(SCD)技术,特别是Type II类型的应用。通过SCD,可以有效追踪维度表的历史变更,确保模型训练数据包含完整的时序信息,从而提升预测准确性。文章还从数据工程师、数据科学家和产品经理的不同视角提供了实施建议,强调历史数据追踪对提升模型性能和业务洞察的重要性,并建议采用渐进式策略逐步引入SCD设计模式。
103 8
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
云上一键部署 DeepSeek-V3 模型,阿里云 PAI-Model Gallery 最佳实践
本文介绍了如何在阿里云 PAI 平台上一键部署 DeepSeek-V3 模型,通过这一过程,用户能够轻松地利用 DeepSeek-V3 模型进行实时交互和 API 推理,从而加速 AI 应用的开发和部署。
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
276 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
1月前
|
机器学习/深度学习 安全 PyTorch
FastAPI + ONNX 部署机器学习模型最佳实践
本文介绍了如何结合FastAPI和ONNX实现机器学习模型的高效部署。面对模型兼容性、性能瓶颈、服务稳定性和安全性等挑战,FastAPI与ONNX提供了高性能、易于开发维护、跨框架支持和活跃社区的优势。通过将模型转换为ONNX格式、构建FastAPI应用、进行性能优化及考虑安全性,可以简化部署流程,提升推理性能,确保服务的可靠性与安全性。最后,以手写数字识别模型为例,展示了完整的部署过程,帮助读者更好地理解和应用这些技术。
97 20
|
1天前
|
机器学习/深度学习 数据挖掘 定位技术
多元线性回归:机器学习中的经典模型探讨
多元线性回归是统计学和机器学习中广泛应用的回归分析方法,通过分析多个自变量与因变量之间的关系,帮助理解和预测数据行为。本文深入探讨其理论背景、数学原理、模型构建及实际应用,涵盖房价预测、销售预测和医疗研究等领域。文章还讨论了多重共线性、过拟合等挑战,并展望了未来发展方向,如模型压缩与高效推理、跨模态学习和自监督学习。通过理解这些内容,读者可以更好地运用多元线性回归解决实际问题。
|
1月前
如何看PAI产品下训练(train)模型任务的费用细节
PAI产品下训练(train)模型任务的费用细节
85 6
|
2月前
|
网络协议 容器
【Container App】部署Contianer App 遇见 Failed to deploy new revision: The Ingress's TargetPort or ExposedPort must be specified for TCP apps.
Failed to deploy new revision: The Ingress's TargetPort or ExposedPort must be specified for TCP apps.
74 27
|
2月前
|
编解码 机器人 测试技术
技术实践 | 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型快速搭建专业领域知识问答机器人
Qwen2-VL是一款具备高级图像和视频理解能力的多模态模型,支持多种语言,适用于多模态应用开发。通过PAI和LLaMA Factory框架,用户可以轻松微调Qwen2-VL模型,快速构建文旅领域的知识问答机器人。本教程详细介绍了从模型部署、微调到对话测试的全过程,帮助开发者高效实现定制化多模态应用。
|
2月前
|
机器学习/深度学习 人工智能 算法
人工智能浪潮下的编程实践:构建你的第一个机器学习模型
在人工智能的巨浪中,每个人都有机会成为弄潮儿。本文将带你一探究竟,从零基础开始,用最易懂的语言和步骤,教你如何构建属于自己的第一个机器学习模型。不需要复杂的数学公式,也不必担心编程难题,只需跟随我们的步伐,一起探索这个充满魔力的AI世界。
74 12

热门文章

最新文章

相关产品

  • 人工智能平台 PAI