端智能技术演进与实践|青训营笔记

146 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的第6天

本节课的主要内容:端智能技术演进与实践

1,什么是端智能技术

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

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

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

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

image.png

2,端智能技术实践案例

2.1,手写数字识别

智能端案例落地的套路

  • 分三个步骤

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

问题与方案

  • 问题:App要做一个手写输入法模块,支持输入数字0~9。
  • 解决方案:

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

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

数据收集

  • 数据收集来源方式

    • 开源数据

    • 合成数据

    • 如将各种字体下的数字写在黑板上生成图片,作为样本。

  • 人工收集和标注的数据 (本次模型训练仅使用此种方式)

    • 设计和实际需求贴合的一个数据采集程序
    • 兼顾不同年龄段、性别、左手/右手等

移动端推理预测

  • 加载模型

    • 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版本的优化模型,准确率更高一些。

流程总结

image.png

3,端智能工程师学习长路线

回顾端智能完整流程

入门

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

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

进阶

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

4,总结

本次学习主要从以下几个方面进行了讲解,让我对端智能技术以及成为端智能工程师的学习有了一定的规划!

  • 什么是端智能技术

    • 端智能是什么 (what)
    • 为什么要做端智能 (why)
    • 端智能的发展历程
  • 端智能技术实践案例 (how)

    • 手写数字识别
  • 端智能工程师学习长路线

    • 回顾端智能完整流程
    • 入门:对端智能技术有一定认识,可以协作完成端智能技术的需求落地。
    • 进阶:对移动端技术、端智能技术和负责业务有更深入的理解,可以站在更全面的视野上设计端上智能解决方案,建设端上智能架构。