这是我参与「第四届青训营」笔记创作活动的第7天。
本笔记内容是第六课的端智能技术演进与实践。
1 端智能技术介绍
端智能(On-Device Machine Learning):把机器学习/深度学习算法模型应用、部署到端设备(手机、IoT设备等)上。
端设备的算力越来越强大。端智能相对于云端,有更高的实时性、更低的延迟,可以离线操作,成本低,保护隐私。
但端智能的算力仍然与云端有较大的差异。所以端智能和云端智能相结合是更常用、效果更好的方式。
端侧机器学习框架:
Google: TF Lite、ML Kit
华为:HiAI、ML Kit
Meta:PyTorch Mobile、PyTorch Live
Apple:CoreML
腾讯:NCNN、TNN
阿里:MNN
百度:Paddle-Lite
小米:Mace
2 端智能技术实践案例
2.1 端智能落地方法
分为三个步骤。
1)明确问题和方案。定义问题,描述问题。调研并设计通过机器学习解决问题的方案。
2)训练AI模型。首先收集数据,然后设计、训练机器学习模型。获得模型后,针对端侧做优化、模型压缩、模型转换。
3)将AI模型在移动端部署应用。部署后执行推理预测,通过获得的结果执行业务策略。
2.2 手写输入数字识别案例
手写体识别是机器学习的基本案例,本案例的需求是支持用户输入0-9十个数字,识别出用户手写的内容。
数据收集可以使用开源数据集,可以合成数据,也可以通过人工收集、标注的方式。本案例使用了第三种方式,通过设计一个数据采集程序,请用户手写指定的数字。收集的数据保存在手机存储中并上传云端。
完成收集后做了数据增广,即对原始图片做旋转、平移、缩放等变换方式,目的是使数据集得到扩充,增强模型的适应能力。
随后根据所选用的算法设计训练模型。本案例使用神经网络模型,使用了tensorflow。利用keras构建模型。
模型转换方面,该案例使用了TFLite提供的转换器TFLite Convert。
模型部署方面,比较简单的做法是放在App中的assets目录中,本案例使用了这种方式。进阶的做法是URL动态下载,这样App包的体积得到了减小,还支持动态更新。
随后在移动端加载模型,完成推理预测。本步骤中模型的输入需要先将图片处理成模型可接受的输入格式。
通过演示的推测结果,发现在输入数字8时检测不准确。需要增加数据、尝试更复杂的模型,不断优化,以获得更好的结果。
2.3 左右手识别案例
本案例介绍了另一种端智能应用。需求的背景是判断用户是在用左手还是右手使用手机,从而给出不同的操作界面。给出的界面可以是激进的,即左手右手两者场景的按钮位置完全颠倒;也可以是保守的,即调整按钮的长度。
本案例的收集方式是通过邀请内测用户使用特殊的就客户端收集。
本案例使用了二分类模型,同样应用卷积神经网络。
训练样本包括X和Y。X需要采样对齐成九个固定点的输入,Y为标签(左/右)。
3 端智能工程师成长路线
回顾端智能流程,从问题发现到设计解决方案,属于架构工作;从收集训练数据到模型的优化处理,是算法工作;经过不断的迭代调优后,从模型部署到业务调用,是工程工作。
入门需要了解端智能技术的能力,了解常用的端智能框架。同时,也应该掌握移动端开发技术和机器学习/深度学习的基础知识。
进阶需要更深入理解业务,设计端智能解决方案并建立端智能架构,更好地解决业务问题。
4 总结
本课主要介绍了端智能的基本应用流程,并通过两个场景案例的介绍举例。最后讲解端智能工程师的成长路线,在各个阶段需具备的技术能力。