这是我参与「第四届青训营 」笔记创作活动的第6天
本节课的主要内容:端智能技术演进与实践
1,什么是端智能技术
端智能(On-Device Machine Learning)是指把机器/深度学习算法模型应用和部署到端设备上,这里“端设备”是相对于云服务而言的,可以是手机,也可以是物联网IoT设备。
为什么要做智能端
- 低延迟、实时性高:特征收集、模型推理、业务逻辑均在端侧完成,无需网络交互,端侧也更能够实时感应用户状态。
- 保护隐私:数据只在端侧使用,无需上传云端,可更好地保护用户隐私数据。
- 算力:移动端设备越来越强大,算力越来越高。
- 可离线:可以离线使用。
-
低成本:在端侧计算,利用端侧算力和存储空间,可节省大量的云端计算和存储资源。
-
端云协同: 端智能并不是云智能的替代,是云端机器学习的延伸,是要结合云和端各自的优势,在云端之间合理分配任务以获取问题最优解。
- 端设备上算力、内存、存储和功耗受限,运行的模型大小有限制;云端有海量数据和充足算力资源,两者配合协同可以发挥各自优势;典型的场景如移动端上的智能精排场景。
2,端智能技术实践案例
2.1,手写数字识别
智能端案例落地的套路
-
分三个步骤
- 首先,把问题描述和定义清楚,并调研出通过机器学习解决问题的方法。
- 然后,设计和训练出机器学习模型,并针对端侧设备优化和转换模型。
- 最后,把优化后模型部署和集成到端侧设备应用中,执行推理预测,并以进预测结果解决定义的问题。
问题与方案
- 问题:App要做一个手写输入法模块,支持输入数字0~9。
-
解决方案:
- 训练一个可以识别手写数字的机器学习模型。
- 将此模型部署应用到App中,实现手写输入到识别的过程,并将识别结果供给用户选择输入。
-
机器学习部分:
- 输入:手写输入数字(图片)
- 输出:其可能代表的数字数值,多种可能时给出各自置信度(0.0~1.0)
数据收集
-
数据收集来源方式
-
开源数据
-
合成数据
-
如将各种字体下的数字写在黑板上生成图片,作为样本。
-
-
人工收集和标注的数据 (本次模型训练仅使用此种方式)
- 设计和实际需求贴合的一个数据采集程序
- 兼顾不同年龄段、性别、左手/右手等
移动端推理预测
-
推理预测是指设备上执行 TensorFlow Lite 模型
- 代码位于 DigitalClassifier
- www.tensorflow.org/lite/guide/… (官方指导)
-
加载模型
-
var model: ByteBuffer = load(mymodel.tflite) val interpreter = Interpreter(model, options) // 可通过 interpreter 查看输入和输出格式 // inputShape:[1, 28, 28], outputShape:[1, 10] 复制代码
-
-
构造模型输入
- 模型的输入28x28单通道灰度图,而用手写输入是数据是存在bitmap中
- 需要将bitmap图片 resize 缩放到28x28像素,转灰度,再转成bytebuffer,这是 interpreter 接受的输入格式。
-
执行推理预测
- 构造输出buffer,调用run执行计算
-
val result = Array(1) { FloatArray(10) } // outputShape:[1, 10] interpreter.run(inputByteBuffer,result) 复制代码
-
获取推理预测结果
- result中的10个数值代表手写输入是 0~9 这10个数字置信度分值,对分值进行排序,把排序前三的数字作为预测输出,供用户选择。
拿到结果执行业务策略
- 视频中可以看出在输入8时不够准确,这受限于数据不足、模型简单。在实际场景中我们落地一个场景后,也需要不断迭代优化,让我们的智能方案更佳完善。
- 在demo中也提供了cnn版本的优化模型,准确率更高一些。
流程总结
3,端智能工程师学习长路线
回顾端智能完整流程
入门
-
达成:对端智能技术有一定认识,可以协作完成端智能技术的需求落地
- 了解端智能技术是什么、可以做什么
- 掌握移动端开发、Machine Learning 基础知识,了解业内端智能框架
- 理解怎么做端智能,可以协作完成端智能技术解决实际业务问题的需求落地
-
学习资料:
- 了解端智能可以做哪些事情:Google MLKit、华为 MLKit
- 机器学习入门: Tensorflow入门、机器学习速成课、微软AI-EDU
- 机器学习在移动端应用:TensorflowLite入门
- 机器学习原理:吴恩达课程
进阶
- 达成:对移动端技术、端智能技术和负责业务有更深入的理解,可以站在更全面的视野上设计端上智能解决方案,建设端上智能架构。
4,总结
本次学习主要从以下几个方面进行了讲解,让我对端智能技术以及成为端智能工程师的学习有了一定的规划!
-
什么是端智能技术
- 端智能是什么 (what)
- 为什么要做端智能 (why)
- 端智能的发展历程
-
端智能技术实践案例 (how)
- 手写数字识别
-
端智能工程师学习长路线
- 回顾端智能完整流程
- 入门:对端智能技术有一定认识,可以协作完成端智能技术的需求落地。
- 进阶:对移动端技术、端智能技术和负责业务有更深入的理解,可以站在更全面的视野上设计端上智能解决方案,建设端上智能架构。