第1章 绪论
1.1 AI嵌入式系统的概念与特点
嵌入式系统是指“嵌入”在应用中的计算机系统。嵌入式系统和传统PC的不同之处在于它通常针对特定应用配备专用软硬件接口,在运算速度、存储容量、可靠性、功耗、体积方面的要求和通用PC有明显差别。我们在日常生活中随处可见嵌入式系统,比如智能手机、万用表、无人机控制系统、电信交换机、洗衣机、智能电视、汽车控制系统、医用CT设备等(见图1-1)。
图1-1 生活中嵌入式系统的例子及共性结构
通常来说,嵌入式系统具备以下几个特点:1)高可靠性,比如控制电信交换机的嵌入式系统需要24小时不停歇地工作,可靠性达到99.999%或更高;2)低延迟响应,比如车载刹车防抱死系统,需要在紧急刹车时实时判断车速,识别轮胎状态,在规定的时间内输出刹车控制命令;3)低功耗,比如万用表等手持测量设备,可能需要依赖电池使用几个月甚至几年;4)小体积,比如手机、无线降噪耳机等便携设备需要在有限体积内安装嵌入式控制系统,以满足应用场景的要求。
传统的嵌入式系统主要用于控制,即接收传感器信号、分析并输出控制命令。随着应用需求的发展,越来越多的嵌入式系统要求具备“人工智能”,成为“智能嵌入式系统”。和传统的“控制类”嵌入式系统相比,智能嵌入式系统在智能感知、智能交互和智能决策方面有了增强,如图1-2所示。
图1-2 智能嵌入式系统
·智能感知
传统嵌入式系统基于固定规律,比如信号均值和方差或者它的频域变换等分析、理解信号,随着应用的拓展,人们需要让嵌入式系统理解更加复杂的或者有变化的场景。比如让智能相机系统识别当前拍摄的场景是自然风景还是室内人物或者城市建筑等;负责机械设备监控的嵌入式系统要能够识别多种异常振动模式,并对这些振动进行故障识别和分类。这一类感知和识别依赖更加复杂的分析和判断模型,通常基于有监督的训练数据得到模型参数,相比之下,传统的基于人工特征选择和信号分析算法难以实现复杂多变的智能感知。
·智能交互
智能嵌入式系统要求和用户有更加“拟人”的双向交互能力,比如通过语音识别获取用户指示并通过“语音”汇报执行结果,或者通过手势识别、人脸表情识别等判断用户意图,并做出正确的响应,这一能力支撑了嵌入式系统实现各类“人机协作”应用。相比之下,传统的嵌入式系统交互方式限制大,通常只通过简单的按钮、显示屏交互,应用场景受限,人机互动效率低。
·智能决策
具备自主决策能力是现代嵌入式智能系统的另一重要特性,比如在自动驾驶系统中,需要车载嵌入式系统根据车速、道路障碍、交通标识信息对当前状态以及趋势进行判断,并在有限时间内发布行驶指令。此外,该系统需要能够“随机应变”,遭遇未知状态时,能够权衡动作收益和风险,给出合适的动作输出。传统的嵌入式系统在智能决策方面往往基于固定且简单的逻辑规则,虽然高效实时,但在灵活性和适应性上无法满足各类复杂应用场景对嵌入式系统的要求。
需要注意的是:机器学习算法涉及训练和推理两部分,其中训练部分需要访问海量训练样本,搜索最优的算法参数,对运算速度、功耗要求高,难以在嵌入式系统中实现,目前主要依靠GPU系统完成。本书侧重机器学习算法的推理运算,即使用训练完成的模型,对输入数据进行处理分析,得到结果。相比机器学习算法的训练,推理过程的运算量小得多,但对于资源有限的嵌入式系统,实现机器学习推理算法仍旧面临挑战,需要从不同层次进行优化。
之前介绍的“智能”型应用需求对嵌入式系统的软硬件带来了挑战,这些挑战主要来自这些应用所需要的算力需求。比如目前常用的图像分析深度卷积神经网络算法,它们的底层运算主要是二维矩阵卷积或者矩阵乘法运算,实现这些算法需要进行大量乘加运算和海量存储。图1-3给出了几种典型的神经网络的运算量。
从图1-3中可以看到,对于嵌入式系统,实现比如10帧/秒的实时视频AI识别,通常需要10×109~150×109次的乘加运算,虽然已有的运算硬件(比如高性能的GPU显卡)实现这一算力并不困难,但对于要同时满足功耗、体积、可靠性、实时性等多项约束条件的嵌入式系统而言,这一运算量带来了巨大挑战。此外,一些AI算法所依赖的参数数据量也给嵌入式系统的存储带来了巨大压力,图1-4是典型的神经网络的参数数据量。
图1-3 典型的图像处理卷积神经网络运算量比较
图1-4 典型的图像处理卷积神经网络参数存储量比较
从图1-4中可以看到,一般神经网络的参数数据存储量在5×106~140×106之间,使用单精度浮点数存储参数值对应的存储量是20MB~560MB,相比之下,传统的低成本嵌入式系统的RAM存储空间往往不超过16MB。
随着对机器学习研究的深入,很多智能算法在性能上达到了商业应用的要求,并逐步进入我们的生活。这些算法中有不少是以嵌入式系统的形式实现的,比如人脸识别门禁系统、具有语音交互能力的智能音响、基于机器视觉的自动驾驶系统等。虽然有这些机器学习算法在嵌入式系统中的应用案例,但还存在很多待解决的问题。嵌入式系统中实现机器学习算法面临的主要问题和难点包括以下几个方面:
·运算量
在机器学习应用领域,尤其是图像识别中,需要使用二维矩阵或者更高维度的张量运算,核心算法由大量二维卷积和矩阵乘法构成,并且有些应用还需要进行矩阵分解,比如特征值分解、QR分解等,这些都是运算密集型的算法。此外,随着深度学习的兴起,神经网络的规模不断膨胀,给算力有限的嵌入式系统带来了压力。
·存储大小
机器学习算法中有一部分是基于特征数据库的搜索和比较,要求在短时间内访问海量数据,进行特征分析和比对。为满足实时性要求,往往把需要访问的数据全部存于RAM,这给嵌入式系统中有限的存储器资源分配带来了困难。此外,现代的深度神经网络在计算过程中需要访问海量权重系数,神经网络的参数规模超出嵌入式处理器子系统可用内存规模,需要短时间内在片内RAM和相对低速的外部存储器之间进行大量数据交换来完成计算。
·功耗
在嵌入式系统中实现机器学习算法往往需要同时满足运算量和实时性要求,虽然通过不断提升处理器主频和运算硬件资源可以达到要求,但付出的代价是运行功耗的提升,这限制了不少机器学习算法在使用电池供电或者太阳能等绿色能源供电等场景下的应用。
[1] 此处运算量是指神经网络对每一幅图进行推理运算所需要的乘加数量。