端智能技术演进与实践

3,897 阅读6分钟

什么是端智能技术

从端智能是什么、为什么要做端智能、端智能的发展历程带大家认识端智能技术

端智能是什么:端智能(On-Device Machine Learning)是指把机器/深度学习算法模型应用和部署到端设备上,这里“端设备”是相对于云服务而言的,可以是手机,也可以是物联网IoT设备。

Google对端智能的介绍 developers.google.com/learn/topic…

为什么要做端智能 developers.google.com/learn/topic…

  • 低延迟、实时性高:特征收集、模型推理、业务逻辑均在端侧完成,无需网络交互,端侧也更能够实时感应用户状态。
  • 保护隐私:数据只在端侧使用,无需上传云端,可更好地保护用户隐私数据。
  • 算力:移动端设备越来越强大,算力越来越高。
  • 可离线:可以离线使用。
  • 低成本:在端侧计算,利用端侧算力和存储空间,可节省大量的云端计算和存储资源。

端云协同:端智能不是云智能的替代,是云端机器学习的延伸,是要结合云和端各自的优势,在云端之间合理分配任务以获取问题最优解。

端设备上算力、内存、存储和功耗受限,运行的模型大小有限制;
云端有海量数据和充足算力资源,两者配合协同可以发挥各自优势;
典型的场景如移动端上的智能精排场景

端智能的发展历程

  • 2006年,深度学习被提出,又得益于大数据的发展和硬件算力提升,深度学习算法和框架也不断演进,人工智能领域迎来了一次大发展。

  • 与此同时,端侧设备在算力、算法和框架上同样有突飞猛进的发展,各类端侧框架和案例层出不穷。

端侧机器学习框架

Google:Tensorflow Lite、ML Kit
Meta:PyTorch Mobile、PyTorch Live 
Apple: CoreML 
腾讯:NCNN、TNN,(NCNN和TNN不得不说的故事) 
阿里:MNN 
百度:Paddle-Lite 
华为: HiAI 、ML Kit 
小米:Mace 
其他:字节(ByteNN、Pitaya),快手(KwaiNN、Ykit)

端智能技术实践案例

通过两个案例(“手写数字识别” “左右手智能识别和应用”)理解如何做端智能

手写数字识别

https://githup.com/ahcyd008/DigitalRecognition

端智能案例落地套路:三个步骤:

  • 首先,把问题描述和定义清楚,并调研出通过机器学习解决问题的方法。
  • 然后,设计和训练出机器学习模型,并针对端侧设备优化和转换模型。
  • 最后,把优化后模型部署和集成到端侧设备应用中,执行推理预测,并以进预测结果解决定义的问题。

image.png

来源:青训营课件

需求背景:App要做一个手写输入法模块,支持输入数字0~9

解决方案

  • 训练一个可以识别手写数字的机器学习模型。
  • 将此模型部署应用到App中,实现手写输入到识别的过程,并将识别结果供给用户选择输入。

机器学习部分

  • 输入:手写输入数字(图片)
  • 输出:其可能代表的数字数值,多种可能时给出各自置信度(0.0~1.0)。

数据收集

开源数据(MNIST)
合成数据
人工收集和标注的数据
    设计和实际需求贴合的一个数据采集程序
    兼顾不同年龄段、性别、左右手等
数据增广:旋转、平移、缩放变换

模型设计:模型的设计就像一个搭积木的过程,通过调整神经元个数和层数让预测更精确;神经元和层数越多相应耗时也会增加,需要综合权衡考虑。

参考了Tensorflow官方案例www.tensorflow.org/tutorials/q…

模型训练

  • 完整参考代码 notebook/digital_recognition.ipynb (notebook代码包括了运行结果缓存)

  • 搭建训练环境

    1.在vscode中安装jupyter notebook运行环境
     code.visualstudio.com/docs/datascience/jupyter-notebooks
     
    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

AI模型在移动端部署和应用

简单做法:放在App包体内assets目录下
进阶做法:通过url动态下载,支持动态更新,同时减少包体积

小结

  • 一个端智能案例落地套路流程

image.png

来源:青训营课件

左右手智能识别和应用(抖音案例)

github.com/ahcyd008/Op…

需求背景

  • 很多App会以右手习惯来设计交互,并以此去引导用户点击它们期望的选项。

  • 存在问题:用户左手使用手机时,引导效果会变差,有没有更智能更个性化的交互体验方式?

    • 左手和右手单手拇指操作时的舒适区是相反的,针对右手的UI交互可能对左手并不友好。特别随着屏幕尺寸再不断增大,这种差异更明显。
    • 另外一些数据统计看左手用的比例并不低

问题和方案

  • 问题:设计一种方法检测用户是左手在操作手机、还是右手在操作手机,然后依据检测结果动态调整交互,提升用户体验。

    • 如识别到右手时,交互设计保持右手适配模式;识别到左手时,交互设计更改为左手适配模式。

端智能工程师学习路线

回顾端智能技术完整落地流程、并给出一些端智能技术的学习指引

入门

  • 达成:对端智能技术有一定认识,可以协作完成端智能技术的需求落地

    • 了解端智能技术是什么、可以做什么
    • 掌握移动端开发、Machine Learning 基础知识,了解业内端智能框架
    • 理解怎么做端智能,可以协作完成端智能技术解决实际业务问题的需求落地
  • 学习资料:

    • 了解端智能可以做哪些事情:Google MLKit、华为 MLKit
    • 机器学习入门: Tensorflow入门、机器学习速成课、微软AI-EDU
    • 机器学习在移动端应用:TensorflowLite入门
    • 机器学习原理:吴恩达课程

进阶

  • 达成:对移动端技术、端智能技术和负责业务有更深入的理解,可以站在更全面的视野上设计端上智能解决方案,建设端上智能架构。

回顾端智能完整流程

image.png

来源:青训营课件