这是我参与「第四届青训营 」笔记创作活动的第11天
端智能技术
简介
端智能(On-Device Machine Learning): 把机器/深度学习算法模型应用和部署到端设备上,这里“端设备(端侧)”是相对于云服务而言的,可以是手机,也可以是物联网IoT设备。而端侧所做的机器学习,不仅包括模型的推理,也包括了模型的训练。
传统的机器学习,由于模型大小、机器算力的问题,很多是放在服务端做的。比如 Amazon AWS 有“Amazon Rekognition Service”,Google 有 “Google Cloud Vision Service”。而随着以手机为代表的端侧设备算力的提高,以及模型设计本身的演进,大小更小、能力更强的模型逐渐能够部署到端上运行。端智能可以说是业界从 Mobile First 走向 AI First 的过程中必然会出现的产物。
机器学习已进入生活中各个方面,在移动端上也有着非常多的应用场景:
- 视觉:扫码、人脸手势识别、肢体姿态估计、目标检测跟踪、图像分割、OCR文字识别提取、图片视频实时超分等
- 语音:语音分类识别等
- 文本:翻译、对话系统、文本分类、智能回复等
- 其他:推荐精排、无人驾驶、运动检测、智能预加载、AR、VR等
优势
- 低延迟、实时性高(Low Latency):特征收集、模型推理、业务逻辑均在端侧完成,无需网络交互,端侧也更能够实时感应用户状态。
- 保护隐私(Privacy):数据只在端侧使用,无需上传云端,可更好地保护用户隐私数据。
- 算力(Power):移动端设备越来越强大,算力越来越高。
- 可离线(Offline):可以离线使用。
- 低成本(Low Cost):在端侧计算,利用端侧算力和存储空间,可节省大量的云端计算和存储资源
挑战
速度:在中国环境下,手机设备碎片化严重,许多中低端的手机性能还不够。推理引擎的运行速度非常重要,速度快才能让许多端智能应用场景在各种端上运行。
设备碎片化:端侧设备的碎片化比较严重,有不同 OS 和版本,各种加速硬件(DSP, NPU, GPU 等)。如何适配各种设备,保证模型在不同的设备上都能运行并充分利用硬件加速,是一个挑战。
引擎大小:推理引擎需要集成到 app 里才能运行模,App 大小超过一定的阈值,App Store/Play Store 不给自动更新。
模型大小:模型太大会影响加载速度,模型更新时花费过多用户的数据流量,而且运行时的内存占用太大。
内存占用:运行时内存占用太大导致 GC(Garbage Collection) 频繁,影响用户体验,严重的甚至导致系统 OOM(Out of Memory)。
端云协同
端智能并不是云智能的替代,而是云端机器学习的延伸,是要结合云和端各自的优势,在云端之间合理分配任务以获取问题最优解。
端设备上算力、内存、存储和功耗受限,运行的模型大小有限制;云端有海量数据和充足算力资源,两者配合协同可以发挥各自优势;典型的场景如移动端上的智能精排场景。
发展历程
2006 年起,人工智能进入第三次发展阶段,并以 AlphaGo 先后战胜李世石和柯洁宣告新时代的到来,这背后得益于:
- 大数据的发展及硬件算力提升,CPU、GPU 及专用计算单元;
- 深度学习算法及框架不断演进,从 Torch、Caffe 到 TensorFlow、PyTorch 等。
2015年Tensorflow 推出Mobile版SDK,随后2017年开源,腾讯NCNN开源,各大互联网公司相继推出自己的移动端机器学习框架,开启了移动端计算框架开源潮。
框架
框架:面向移动端的机器学习框架的诞生让我们能更轻松的在端侧应用机器学习。在手机侧,Apple 的 Core ML,Google 的 NNAPI 提供了系统级别的支持,除此之外业内也有很多优秀的端侧框架:
- 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)……
以上内容来源于 稀土掘金-青训营官方账号 (juejin.cn/post/712345…)
案例
设计流程
典型案例
1、手写数字识别
2、左右手智能识别和应用
案例的具体实现方法步骤请参考网上内容,此处不再说明