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

本文涉及的产品
交互式建模 PAI-DSW,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,这样学的会更透彻。


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

相关文章
|
23小时前
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的最佳实践
【5月更文挑战第18天】 在数据驱动的时代,构建高效的机器学习模型已经成为企业获取竞争优势的关键。本文将深入探讨如何通过精确的数据预处理、合理的特征工程、高效的算法选择以及细致的模型调优等步骤,来提升模型的性能和预测准确度。我们还将讨论模型部署后的监控和维护策略,确保模型长期稳定运行。这些最佳实践不仅适用于初学者建立基础,也能帮助有经验的数据科学家优化现有工作流程。
|
1天前
|
机器学习/深度学习 数据采集 人工智能
【机器学习】怎样检测到线性回归模型中的过拟合?
【5月更文挑战第17天】【机器学习】怎样检测到线性回归模型中的过拟合?
|
1天前
|
机器学习/深度学习 人工智能
【机器学习】有哪些指标,可以检查回归模型是否良好地拟合了数据?
【5月更文挑战第16天】【机器学习】有哪些指标,可以检查回归模型是否良好地拟合了数据?
|
2天前
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的策略与实践
【5月更文挑战第17天】 在当今数据驱动的时代,机器学习(ML)模型的效能成为衡量技术创新和解决实际问题能力的重要指标。本文旨在探讨构建高效机器学习模型的先进策略,并通过具体实践案例来揭示这些方法的有效性。我们将从数据处理、特征工程、模型选择、调参技巧以及模型部署等方面详细论述,旨在为读者提供一个全面而深入的视角,帮助其优化现有模型或开发新模型,以应对复杂多变的业务挑战。
11 2
|
3天前
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的最佳实践
【5月更文挑战第16天】 在数据驱动的时代,机器学习已成为创新的核心推动力。本文将深入探讨如何构建一个高效的机器学习模型,包括数据预处理、特征选择、模型训练与优化等关键步骤。通过实例分析和技术讲解,旨在为读者提供一套实用的技术指导和最佳实践方法,以支持其在复杂数据环境中实现准确预测和智能决策。
|
4天前
|
Java 开发工具 Android开发
Android mk 集成app
Android mk 集成app
14 5
|
4天前
|
机器学习/深度学习 人工智能 算法
为什么大模型训练需要GPU,以及适合训练大模型的GPU介绍
为什么大模型训练需要GPU,以及适合训练大模型的GPU介绍
20 0
|
4天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从数据预处理到模型优化
【5月更文挑战第14天】 在机器学习项目中,模型的性能不仅取决于算法的选择,还受到数据处理和模型配置的影响。本文将探讨如何通过有效的数据预处理和细致的模型调优来提升机器学习模型的效能。我们将讨论数据清洗、特征工程、以及超参数调整等关键步骤,并通过实例展示这些技术如何实现在不同类型的数据集上。目标是为读者提供一套实用的策略,以帮助他们在面对实际问题时能够构建出更加健壮和精确的机器学习模型。
|
4天前
|
机器学习/深度学习 BI
机器学习模型评估指标总结
机器学习模型评估指标总结
9 2
|
4天前
|
机器学习/深度学习 监控 算法
构建高效机器学习模型的五大技巧
【5月更文挑战第13天】 在数据科学领域,机器学习模型的性能往往决定了项目成功与否。本文将深入探讨提升机器学习模型效率和准确度的五个关键技巧。这些技巧包括数据处理优化、特征工程精炼、算法选择与调整、模型集成以及持续监控与调优。文章将结合实例分析每个技巧的实施过程及其对模型性能的影响。通过这些策略,读者可以构建出更加健壮、高效的机器学习模型,并为未来的项目提供实用的技术参考。

相关产品

  • 人工智能平台 PAI