这是我参与「第四届青训营 」笔记创作活动的第4天
一、本堂课重点内容:
- 了解什么是端智能技术
- 学习用端智能技术案例
二、详细知识点介绍:
2.1 何为端智能技术
- 端智能(On-Device Machine Learning)是指把机器/深度学习算法模型应用和部署到端设备上,这里“端设备”是相对于云服务而言的,可以是手机,也可以是物联网IoT设备。
- 其主要应用于如下几个方面:音频分类、图像分类、物体检测、文本分类、视觉产品搜索等
2.2 端智能技术优点
- 低延迟、实时性高(Low Latency):特征收集、模型推理、业务逻辑均在端侧完成,无需网络交互,端侧也更能够实时感应用户状态。
- 保护隐私(Privacy):数据只在端侧使用,无需上传云端,可更好地保护用户隐私数据。
- 算力(Power):移动端设备越来越强大,算力越来越高。
- 可离线(Offline):可以离线使用。
- 低成本(Low Cost):在端侧计算,利用端侧算力和存储空间,可节省大量的云端计算和存储资源。
- 端云协同:: 端智能并不是云智能的替代,是云端机器学习的延伸,是要结合云和端各自的优势,在云端之间合理分配任务以获取问题最优解。
如现在工业互联网中已经大量使用了端云协同这一方法,从而使用端智能。iSESOL网 基于数据驱动的工业互联网平台
2.3 端智能的发展历程
2006年,深度学习被提出,又得益于大数据的发展和硬件算力提升,深度学习算法和框架也不断演进,人工智能领域迎来了一次大发展。
与此同时,端侧设备在算力、算法和框架上同样有突飞猛进的发展,各类端侧框架和案例层出不穷。
- 2015年Tensorflow 推出Mobile版SDK,随后2017年开源,随后各大互联网公司相继推出自己的移动端机器学习框架,许多采用了开源的形式,移动端端智能技术框架层出不穷。
图片来源于字节青训营相关资料
2.4 端智能技术实现案例
这里以手写数字识别案例为代表,案例代码见ahcyd008/DigitalRecognition(github.com)
问题提出
某app需要做一个手写数字输入识别器,从而识别0-9十种数字。
问题分析
问题分析如下图所示
-
解决方案:
- 训练一个可以识别手写数字的机器学习模型。
- 将此模型部署应用到App中,实现手写输入到识别的过程,并将识别结果供给用户选择输入。
-
机器学习部分:
- 输入:手写输入数字(图片)
- 输出:其可能代表的数字数值,多种可能时给出各自置信度(0.0~1.0)。
数据收集与处理
手写数据识别,首先我们可以采用经典数据集MNIST。除此之外我们也可以采用app自行收集的方法。采用手写识别的方法,将数据进行增广并上传至云端。
模型训练我们使用一个全连接神经网络,然后将得到的模型转为Tensorflow Lite这种移动端可以运行的模型。Tensorflow已经为我们提供了这种转换方法 TensorFlow Lite 转换器 (google.cn)
import tensorflow as tf
# Convert the model
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) # path to the SavedModel directory
tflite_model = converter.convert()
# Save the model.
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
移动端模型部署
将移动端部署有两种方法
- 简单的方法为将模型放在App包体内assets目录下。
- 更好的方法为,通过url动态下载,支持动态更新,同时减少包体积。
移动端推理预测
推理预测是指设备上执行TensorFlow Lite模型。并将模型的加载和执行封装在Interpreter类中,具体分为以下四部分
- 加载模型
- 构造模型输入
- 执行推理预测
- 获取推理运行结果
部署结果
通过运行,我们可以得到一个预测准确性较高的预测结果。
三、实践练习例子:
学习TensorFlow Lite和Google上的相关案例,熟练掌握端智能相关知识。
四、课后个人总结:
本节课学习了端智能的相关技术,以数字识别案例为入门,带我们了解了如何在Android端部署相关机器学习案例,理解怎么做端智能,可以协作完成端智能技术解决实际业务问题的需求落地。
五、引用参考:
部分图片与知识点来源于: