这是我参与「第四届青训营 」笔记创作活动的的第6天
端智能技术演进与实践
课程回顾
Android客户端开发的基础知识、UI编程、数据库和网络通信以及客户端上的直播技术。
01 什么是端智能技术
1.1 端智能是什么?
端智能(O-D ML)是指把机器学习/深度学习算法模型应用和部署到端设备上,这里“端设备”是相对于云服务而言的,可以是手机,也可以是物联网IoT设备。
-
抖音换装特效
-
离线文字识别
-
肢体检测
-
手势识别
1.2 为什么要做端智能?
Low Latency:低延迟、实时性高
Privacy:保护隐私
Power:端设备算力越来越强大
Offline:可离线
Low Cost:低成本
- 端云协同:端智能不是云智能的替代,是云端机器学习的延伸,是要结合云和端各自的优势,在云端之间合理分配任务以获取问题最优解。
1.3 端智能技术的发展历程
2006年,深度学习被提出,得益于大数据的发展和硬件算力的提升,深度学习的算法和框架不断演进,人工智能领域迎来了一次大发展。
与此同时,端侧设备在算力、算法和框架上同样有突飞猛进的发展,各类端侧机器学习框架和应用案例层出不穷。
1.4 端侧机器学习框架
-
Google: Tensorflow Lite、ML Kit
-
Meta: PyTorch Mobile、PyTorch Live
-
Apple: CoreMlL
-
腾讯:NCNN、TNN
-
阿里:MNN
-
百度:Paddlle-Lite
-
华为:HiAl、MIL Kit
-
小米:Mace
-
其他:字节((ByteNN、Pitaya),快手(KwaiNN、Ykit) ...
02 端智能技术实践案例
2.1 手写数字识别
需求背景:App要做一个手写输入法模块,支持输入数字0-9,
端智能案例落地的套路:
-
问题和方案:问题描述和定义 → 设置机器学习解决方案
-
训练AI模型:数据收集 → 模型设计、模型训练 → 模型压缩、模型转换
-
AI模型在移动端部署应用:模型部署到移动端 → 收集输入推理预测 → 拿到结果执行业务策略
2.1.1 问题和方案
问题:App要做一个手写输入法模块,支持输入数字0~9。
解决方案: . 训练一个可以识别手写数字的机器学习模型。 ·将此模型部署应用到App中,实现手写输入到识别的过程,并将识别结果供给用户选择输入。
机器学习部分: ·输入:手写输入数字(图片) 。输出:其可能代表的数字数值,多种可能时给出各自置信度(0.0~1.0)。
2.1.2 数据收集
数据来源方式:
-
开源数据(MNIST)
-
合成数据
-
人工收集和标注的数据:设计和实际需求贴合的一个数据采集程序;兼顾不同年龄段、性别、左手/右手等。
数据增广
- 旋转、平移、缩放变换
2.1.3 模型设计
一个在线模拟演示神经网络模型设计的网站:
→ 10分类模型,全连接神经网络。
参考Tensorflow官方样例www.tensorflow.org/tutorials/q…
2.1.4 模型训练
-
搭建环境
-
训练样本处理
-
模型构建
-
模型训练
-
验证模型准确率
2.1.5 模型压缩和转换
为什么要做模型压缩和转换?
→ 移动端使用的是被优化的推理引擎,可以在不同CPU和GPU架构下更高效的执行模型推理计算。
使用Tensorflow Lite作为移动端上推理引擎。
Tensorflow模型在被TensorFlow Lite使用前,必须转换成Tensorflow Lite支持的格式。
Tensorflow Lite提供转换器TFLite Convert。
2.1.6 模型部署到移动端
核心:让移动端可以加载到前面转换出的模型
- 简单做法:放在App包体内的assets目录下
- 进阶做法:通过url动态下载,支持动态更新,同时减少包体积。
2.1.7 移动端推理预测
推理预测是指设备上执行TensorFlow Lite模型
Tensorflow Lite将模型的加载和执行封装在Interpreter类中。
2.1.8 拿到结果,执行业务策略
2.1.9 手写数字识别案例回顾
一个端智能案例的落地套路完整流程:
2.2 左右手智能识别与应用(抖音案例)
需求背景:很多App会以右手习惯来设计交互,并以此去引导用户点击它们期望的选项。
存在问题:用户左手使用手机时,引导效果会变差,有没有更智能更个性化的交互体验方式?
2.2.1 问题和方案
问题:设计一种方法检测用户是左手在操作手机、还是右手在操作手机,然后依据检测结果动态调 整交互,提升用户体验。
调研:手指在屏幕滑动轨迹识别左右手www.ncbi.nlm.nih.cov/pmc/article…
机器学习方案:训练一个二分类的CNN神经网络模型来识别用户是左手or右手操作。
- 输入:用户在屏幕上的滑动轨迹
- 输出:左手or右手
2.2.2 数据收集
数据格式:
X样本:[p0, p1, p2, p3,p4,... ],p= (x, y, w, h, density, dtime) . Y样本:left / right
收集方式:(特殊客户端、内测用户收集)
滑动轨迹:拦截Activity的dispatchTouchEvent事件,缓存手指滑动产生的MotionEvent序列。
左右手标签:
左手样本收集时,只用左手持机操作。
右手样本收集时,只用右手持机操作。
2.2.3 模型设计
二分类模型(Left or Right ),卷积神经网络。
2.2.4 模型训练和转换
-
训练样本处理
-
模型训练
-
验证模型准确度
2.2.5 移动端推理预测 & 业务应用
→ 接入模型,滑动后触发预测,将结果缓存,业务使用时获取。
2.2.6 左右手案例课后作业
继续完善。
03 端智能工程师学习成长路线
3.1 回顾端智能完整流程
3.2 入门
学习资料:
了解端智能可以做哪些事情:Google MLKit、华为MLKit
机器学习入门:Tensorflow入门、机器学习速成课、微软Al-EDU
机器学习在移动端应用:TensorflowLite入门
机器学习原理:吴恩达课程
3.3 进阶
达成:对移动端技术、端智能技术和负责业务有更深的理解,可以站在更全面的视野上设计端上智能解决方案,建设端上智能架构。
04 课程总结
- 什么是端智能技术
-
端智能是什么:是将AI算法模型部署和应用到端侧
-
端智能的优势:Latency、Privacy、Power、Offline、Cost
-
端智能的发展历程和端智能框架介绍
- 端智能技术案例
-
手写数字识别
-
左右手智能识别和应用(抖音案例)3.端智能工程师学习路线
- 端智能技术落地完整流程
- 入门->进阶