什么是端智能技术
端智能(On-Device Machine Learning)是指把机器/深度学习算法模型应用和部署到端设备上,这里“端设备”是相对于云服务而言的,可以是手机,也可以是物联网IoT设备。
端智能的优势
- 低延迟、实时性高:特征收集、模型推理、业务逻辑均在端侧完成,无需网络交互,端侧也更能够实时感应用户状态。
- 保护隐私:数据只在端侧使用,无需上传云端,可更好地保护用户隐私数据。
- 算力:移动端设备越来越强大,算力越来越高。
- 可离线:可以离线使用。
- 低成本:在端侧计算,利用端侧算力和存储空间,可节省大量的云端计算和存储资源。
端智能的学习框架
- Google: Tensorflow Lite, ML Kit
- 华为: HiAI, ML Kit
- Meta: PyTorch Mobile, PyTorch Live
- Apple: CoreML
当然还有其他很多框架,这里就不多一一赘述了。
端智能技术实践案例
下面使用两个项目来辅助我们理解端智能技术,分别是手写数字识别项目和左右手智能识别和应用。
手写数字识别项目
需求背景
App要做一个手写输入法模块,支持输入数字0~9。
解决方案
- 训练一个可以识别手写数字的机器学习模型。
- 将此模型部署应用到App中,实现手写输入到识别的过程,并将识别结果供给用户选择输入。
机器学习部分
- 输入:手写输入数字(图片)
- 输出:其可能代表的数字数值,多种可能时给出各自置信度(0.0~1.0)。
数据收集
- 开源数据(MNIST)
- 合成数据
- 人工收集和标注的数据
- 设计和实际需求贴合的一个数据采集程序
- 兼顾不同年龄段、性别、左右手等
- 数据增广:旋转、平移、缩放变换
模型设计
模型的设计就像一个搭积木的过程,通过调整神经元个数和层数让预测更精确;神经元和层数越多相应耗时也会增加,需要综合权衡考虑。
模型训练
-
搭建训练环境
1.在vscode中安装jupyter notebook运行环境
2.安装Tensorflow和相关依赖
pip install matplotlib numpy Pillow tensorflow torch torchvision -
训练样本处理
图片通过旋转、平移、缩放、剪切、翻转增广16倍,并缩放到28x28大小,转成numpy array作为输入样本
-
模型构建
-
模型训练
-
验证模型准确度
模型压缩和转换
-
为什么要做模型转换?
- 移动端使用的是被优化的推理引擎,可以在不同CPU和GPU架构下高效的执行模型推理计算。
-
这里我们使用Tensorflow Lite作为移动端上推理引擎。
- TensorFlow Lite 的设计旨在在各种设备上高效执行模型。这种高效部分源于在存储模型时,采用了一种特殊的格式。
- TensorFlow模型在被TensorFlow Lite 使用前,必须转换成这种格式。
- Tensorflow Lite 提供转换器 TFLite Convert
左右手智能识别和应用
需求背景
-
很多App会以右手习惯来设计交互,并以此去引导用户点击它们期望的选项。
-
存在问题:用户左手使用手机时,引导效果会变差,有没有更智能更个性化的交互体验方式?
- 左手和右手单手拇指操作时的舒适区是相反的,针对右手的UI交互可能对左手并不友好。特别随着屏幕尺寸再不断增大,这种差异更明显。
- 另外一些数据统计,左手用的比例并不低
问题和方案
-
问题:设计一种方法检测用户是左手在操作手机、还是右手在操作手机,然后依据检测结果动态调整交互,提升用户体验。
- 如识别到右手时,交互设计保持右手适配模式;识别到左手时,交互设计更改为左手适配模式。
端智能工程师学习路线
入门
-
对端智能技术有一定认识,可以协作完成端智能技术的需求落地
- 了解端智能技术是什么、可以做什么
- 掌握移动端开发、Machine Learning 基础知识,了解业内端智能框架
- 理解怎么做端智能,可以协作完成端智能技术解决实际业务问题的需求落地
进阶
- 对移动端技术、端智能技术和负责业务有更深入的理解,可以站在更全面的视野上设计端上智能解决方案,建设端上智能架构。