一、前言
边缘计算可以利用靠近终端用户的分析计算资源,提高应用程序的吞吐量和响应速度。它的应用场景包括智能医疗、自动驾驶、公共安全、人机交互、农业和紧急应用。物联网是边缘计算的一个实例。通过传感器、边缘设备和云设施的协作,物联网可以将计算从云端转移到网络边缘,提供数据持久性、内容缓存、更好的服务交付和质量的物联网数据管理,同时增强隐私和安全性。然而,边缘硬件受到资源限制,导致其无法提供高端和复杂的服务。机器学习工具集依赖于复杂的硬件芯片,需要大量的功率和内存容量才能运行深度神经网络模型。因此,对于嵌入式物联网来说,TinyML成为一个新兴的研究课题。本文旨在讨论TinyML的现有发展情况,主要包括:TinyML的基本定义、现有的TinyML工具集、TinyML的关技术方向、TinyML的应用以及面临的问题与挑战[1]。
二、什么是TinyML
TinyML是一种在设备上进行感知模式分析的机器学习技术,适用于嵌入式边缘设备。它由软件、硬件和算法组成,要求新颖的算法和更好的压缩、量化方案,以满足嵌入式边缘设备在能耗和内存等资源受限的要求。在系统设计中,通过硬件-软件协同设计和优化的算法,与高质量数据和紧凑的软件设计相结合,最终将主机机器上训练的二进制模型文件部署到边缘设备。
三、 TinyML的应用
使用TinyML可以解决多种不同的问题,并在许多领域提供支持:
- 图像识别
AttendNets[2]是一种低精度的设备本地图像识别模型,使用机器设计的微观-宏观结构,改善了空间-通道选择性注意力。这种结合的有用性可以将设备本地图像识别作为低成本和低能耗智能物联网系统中TinyML应用的关键驱动因素。结果显示,它降低了3倍的乘加操作,并提高了7.2%的准确性。与MobileNet-V1相比,它使用的参数少了4.17倍,权重内存减少了16.7倍。
- 语音识别
语音识别被认为是一种适用于任何机器学习模型的通用应用程序。比如TinySpeech可提供低精度的设备本地语音识别[3],从音频信号中提取梅尔频率倒谱系数(MFCC)表示作为输入,模型包括一个卷积层、一个平均池化层、一个全连接层和一个softmax层,使用注意力压缩器来提高内存利用率和最小化处理器功耗,可以提供48倍较少的乘加操作,内存需求非常少,可以检测有限的词汇语音识别。
- 手势识别
基于电容感应的手势预测有学者研究设计了一个手腕佩戴式嵌入式原型[4],使用一个隐藏层作为分类器,准确率达到96.4%。该设计使用了一款ARM Cortex-M4微控制器,闪存1 MB,RAM 256 KB。部署的板载模型在float32模式下大小为29.6 KB,没有量化。推理时间为12毫秒,功耗为26.4mW。
- 关键词识别
关键词识别(KWS)是TinyML应用的一个重要方向,在文献[5]中,提出了一种仅使用5个训练示例的few-shot KWS模型,该模型使用49x40的频谱图和嵌入表示,使用一个softmax层对3个类别进行分类。该方法对于9种不同语言的180个新关键词获得了0.75的F1分数。
- 实时语音唤醒
语音活动检测(VAD)在物联网领域中越来越受欢迎。TinyML可以支持这种应用,例如在文献[6]中,他们开发了一种循环神经网络感知分类器,底层分类器使用数字化的短期频谱作为输入进行分析,以检测语音的状态,一旦检测到开始语音,WUS(Warm-Up Steps)会通过低噪声放大器(LNA)启动语音识别引擎。带通滤波器(BPF)提取0.1-7KHz范围的音频信号频谱。
- 姿态估计
身体姿势估计在监测老年人健康护理方面起着至关重要的作用。在文献[7]中,提出了一个平台无关的框架,可以快速验证和促进模型对平台的适应。该框架使用了以下算法:面部特征点(如RetinaFace)和身体姿势估计(如OpenPifPaf-使用复合场进行实时检测姿势),以便将应用部署在Nvidia Jetson NX平台上(该平台包括GPU和深度学习硬件加速器)。
四、TinyML的技术方向
- TinyMLaas
TinyML作为服务(TinyMLaaS)旨在简化嵌入式领域中与机器学习相关的问题,特别是在物联网环境中进行高效的机器学习业务开发。传统的基于云的机器学习任务由云提供商完成,但嵌入式设备的处理和内存能力有限,不适合运行完整的机器学习模型。因此,需要对模型进行优化,如量化、修剪和融合,以适应资源受限的物联网设备。TinyMLaaS生态系统需要ML编译器来生成轻量级ML运行时模型,并训练适用于特定物联网硬件加速器的模型。TinyMLaaS通过保留用户数据在本地边界内来减轻用户的隐私担忧,并减少网络带宽的压力,同时可以提供可靠和低延迟的服务,并在网络覆盖不稳定的区域进行设备级的模型推理决策。
- 超维计算
HDC(Hyperdimensional Computing)是一种计算方法,通过使用高维向量(超向量)来处理和表示数据,核心思想是将数据映射到高维空间中,并使用向量之间的相似性来进行计算和推理。HDC的优势之一是在保持相当准确性的同时,能够降低能耗和计算成本。它可以在资源受限的嵌入式设备上高效地进行推理,适用于物联网环境中的应用。然而,由于超向量对内存和能量感知处理能力的需求,需要研究如何最小化超向量的维度,以提高分类器的鲁棒性和准确率。一些研究已经探索了基于HDC的手势识别系统和最小化HDC分类器维度的机制,以满足物联网设备的需求。这些研究展示了HDC在TinyML中的潜力和优化方向。
- 交换
神经网络模型的高算力需求对于基于物联网的设备来说是一个难点问题,尽管已经有不少研究与应用在物联网设备中使用了神经网络的技术,但大多数都是在准确性和普适性之间做出了妥协。最近的一项研究提出了一种新的方法[8],它使用交换技术在物联网设备的微控制器中执行神经网络[2]。该方法将离线神经网络分割成多个小块,每个小块可以加载到设备的有限内存中。当需要时,请求的神经网络层会从外部存储器中交换到内存中,这种内存交换的方法被认为是TinyML领域中具有前景的技术之一。
- 注意力浓缩器(Attention condensers)
Attention condensers为嵌入式和机器学习提供了一种新的方向,可用于边缘设备上的复杂语音和图像识别等多种应用。它可以被看作是自注意机制,能够自学习并生成描述局部和跨通道激活之间关系的浓缩嵌入。在2020年提出的AttendNets[9]是一种紧凑的深度神经网络,专为在资源极其有限的物联网设备上部署图像识别应用而设计。它依赖于注意力浓缩器的概念,并扩展了空间通道选择性注意力机制。与ImageNet50基准数据集相比,它在准确性、参数减少、内存利用最小化和乘加操作降低方面表现出更好的结果。
- 受限神经架构搜索(LNAS)
受限神经架构搜索(Limited Neural Architecture Search, LNAS)是一种神经架构搜索(NAS)的方法,用于在计算资源受限的环境下自动搜索最优的神经网络架构。受限神经架构搜索通过限制搜索空间和使用轻量级的搜索算法,以适应资源有限的环境。具体来说,LNAS针对特定设备或应用场景,将搜索空间缩小为适合资源限制的网络架构,并使用高效的搜索算法来加速搜索过程。这样可以在保持较低计算和存储需求的同时,找到适合特定资源约束的最优网络结构。LNAS的目标是在资源受限的设备上实现高性能的神经网络模型,例如在物联网设备、移动设备或嵌入式设备上进行深度学习推理。最近的一项研究提出了一种NAS架构,将神经网络部署到基于物联网的微控制器的KB大小的RAM中[10]。尽管NAS有广阔的前景,但目前面临一些挑战,如基准测试、可重复性、迁移学习和在NAS感知的微型设备之间的可迁移性。
- 模型压缩
神经网络模型压缩主要用于减小深度神经网络模型的大小和计算量,以便在资源受限的环境中进行部署和推理。模型压缩的目标是在尽量保持模型性能的同时,减少模型的存储需求、内存占用和计算资源消耗。常见的模型压缩方法包括:
- 参数剪枝(Pruning):通过去除模型中不重要的连接或权重,减少模型的参数数量。
- 量化(Quantization):减少模型中参数的位数,从而减小模型的内存占用和计算量,常见的方法有训练后量化,QAT以及最近提出的针对TinyML的QGT[11]等。
- 低秩分解(Low-rank Decomposition):将模型中的权重矩阵分解为多个低秩矩阵的乘积,从而减少模型的参数数量和计算量。
- 知识蒸馏(Knowledge Distillation):利用一个较大、复杂的模型(教师模型)的预测结果来指导一个较小、简化的模型(学生模型)的训练。学生模型通过学习教师模型的软标签来捕捉更多的知识。
这些方法可以单独应用或结合使用,以达到减小模型大小、加速推理过程和降低资源消耗的目的。具体使用哪种方法取决于应用场景和对模型性能和资源利用的要求。
- 联邦学习
联邦学习是一种分布式机器学习方法,它允许在保护数据隐私的前提下,多个参与方共同训练一个共享的模型。在联邦学习中,数据分散在不同的本地设备或服务器上,而模型的训练过程在这些设备上进行。每个设备在本地使用自己的数据进行训练,并将更新的模型参数发送到中央服务器。中央服务器根据接收到的参数进行模型更新,并将更新后的模型参数发送回各个设备。这个过程迭代进行,直到模型收敛或达到预定的停止条件。联邦学习的优势在于可以保护数据隐私,因为原始数据不需要离开本地设备。同时,联邦学习还可以解决数据分散、不平衡和不可靠的问题,适用于训练数据无法集中的场景,如移动设备、边缘设备和医疗保健等。
常用的联邦学习框架:
- TensorFlow Federated (TFF): 由Google开发的开源框架,用于实现联邦学习算法。它提供了用于构建联邦学习模型的高级API和工具。
- PySyft: 一个用于联邦学习和安全多方计算的Python库,通过添加安全协议和加密技术来保护数据隐私。
- OpenMined: 一个基于PySyft构建的开源项目,旨在促进隐私保护的联邦学习和安全多方计算。
- IBM Federated Learning: IBM开发的联邦学习框架,提供了用于构建和训练联邦学习模型的工具和库。
- Flower: 一个用于联邦学习的开源框架,支持多种机器学习框架,如PyTorch和TensorFlow。
- Benchmark
基准测试是用来测量、比较、评估和改进机器学习系统的工具。TinyML基准测试目前还在初期开发阶段。最近,TinyMLPerf工作组致力于为TinyML感知的深度神经网络提供一套基准测试代码。这种基准测试可以在受限速度(10-250 MHz)下运行在微型微控制器、神经网络加速器和数字信号处理器(DSP)上,并且功耗最低仅为50mW。该工作组已经发布了用于TinyML领域基准测试的MLPerf Tiny版本v1.0,它使用TensorFlow Lite for Microcontrollers(TFLM)作为参考。虽然还有其他一些基准测试正在进行中(例如,EEMBC(r)的CoreMark(r)和EEMBC的MLMark(r)),但它们在几个方面存在不足,包括无法提供完整程序的配置文件、缺乏推断工作负载的准确度测量、需要更高的内存(>GBs)以及运行时间更长、功耗更高。
五、TinyML工具集
5.1 硬件
大多数硬件板的处理器频率低于100 MHz,平均闪存和SRAM都小于1 MB。蓝牙(BLE)和Wi-Fi是最常用的连接技术,板载传感器包括加速度计、温度、湿度、麦克风、陀螺仪、气压、手势检测、光传感器、霍尔效应、空气质量和摄像头。这些板的功耗在mW范围内。除了常规的直流电源供应,大多数设备还可以使用锂电池和纽扣电池供电。ARM Cortex-M4是所有其他替代品中最受欢迎的处理器。少数板(例如GAP8、GAP9)内置了硬件卷积引擎(HCE),以增强边缘处的神经网络感知计算。
5.2 软件
- TensorFlow Lite (TFL)
项目主页:
https://www.tensorflow.org/lite?hl=zh-cn
TensorFlow Lite是一个用于在移动设备、嵌入式设备和物联网设备上运行机器学习模型的轻量级版本。它是TensorFlow的一个扩展,提供了针对资源受限环境的优化和压缩功能。TensorFlow Lite可以将训练好的模型转换为适合在移动设备上部署的格式,并提供了针对移动平台的高效推理引擎,以实现实时的机器学习推断。它支持多种硬件平台和操作系统,并提供了易于使用的API,方便开发者进行集成和部署。
- TensorFlow Lite Micro (TFLM)
项目主页:
https://www.tensorflow.org/lite/microcontrollers?hl=zh-cn
TensorFlow Lite Micro是TensorFlow Lite的一个子项目,旨在将机器学习模型部署到资源受限的微控制器和嵌入式设备上。它专门针对微控制器的内存和计算资源进行了优化,使得即使在较小的设备上也能运行轻量级的机器学习应用。TensorFlow Lite Micro提供了一个小型的运行时库和一组API,使开发者可以在微控制器上加载和执行TensorFlow Lite模型。它支持多种硬件平台和操作系统,并提供了用于构建和训练模型的工具链。
- uTVM
项目主页:
https://tvm.apache.org/docs/topic/microtvm/index.html
uTVM(micro TVM)是TVM(深度学习编译器和优化器)的一个分支项目,专注于在资源受限的嵌入式设备上进行深度学习推理。uTVM通过对模型进行优化、压缩和量化,以适应嵌入式设备的计算和存储资源限制。它还提供了针对嵌入式设备的编译器后端和运行时库,以支持将深度学习模型部署到嵌入式设备上,并提供高效的推理性能。uTVM支持多种硬件平台和操作系统,并提供了易于使用的API,方便开发者进行集成和部署。
- ncnn
项目主页:
https://github.com/Tencent/ncnn
ncnn是一个轻量级的神经网络计算库,用于在移动设备和嵌入式平台上进行高效的深度学习推理。它是由Tencent AI Lab开发的,并且被广泛应用于移动应用、嵌入式系统和物联网设备等领域。ncnn支持多种硬件平台,包括ARM、MIPS和x86,并提供了丰富的计算优化和模型转换工具。它具有轻量级、高性能和低功耗的特点,适用于在资源受限的环境下进行推理任务。
- TNN
项目主页:
https://github.com/Tencent/TNN
TNN是Tencent Neural Network的缩写,是腾讯公司开发的开源神经网络计算库。TNN旨在提供高性能、低功耗的深度学习推理能力,适用于移动设备和边缘计算设备。TNN支持多种硬件平台,包括ARM、x86和GPU,并提供了丰富的优化技术,如量化、剪枝和自动化模型转换。TNN还提供了易于使用的API,方便开发者在移动应用和嵌入式系统中集成深度学习推理功能。
- uTensor
项目主页:
https://github.com/uTensor/uTensor
uTensor是一个轻量级、高效的嵌入式设备上的机器学习推理框架。它专注于在资源受限的嵌入式设备上进行模型推理,并提供了一个简单而灵活的工具链,方便开发者将训练好的模型转换为适合在嵌入式设备上运行的格式。uTensor支持多种硬件平台和操作系统,并提供了针对嵌入式设备的优化和压缩功能,以实现高效的模型推理。它还提供了易于使用的API,方便开发者进行模型加载和推理操作。uTensor的目标是在嵌入式设备上实现低延迟、高性能的机器学习推理。
- Edge Impulse
项目主页:https://edgeimpulse.com/
Edge Impulse是一个端到端的开发平台,用于在边缘设备上开发和部署机器学习模型。它提供了一个易于使用的界面,使开发者可以在云端收集、标记和预处理数据,并使用这些数据训练机器学习模型。Edge Impulse还提供了用于在边缘设备上进行模型推理的运行时库和集成开发环境(IDE),以方便开发者在实际设备上部署和测试模型。它支持多种硬件平台和操作系统,并提供了丰富的文档和示例代码,以帮助开发者快速上手。Edge Impulse的目标是使开发者能够在资源受限的边缘设备上实现智能感知和决策。
- STM32Cube.AI
项目主页:
https://stm32ai.st.com/stm32-cube-ai/
STM32Cube.AI是STMicroelectronics(意法半导体)提供的一个软件工具,用于在STM32微控制器上实现人工智能(AI)应用。它是基于TensorFlow Lite Micro的一个扩展,提供了一套用于训练和部署机器学习模型的工具链。STM32Cube.AI可以将训练好的模型转换为适合在STM32微控制器上运行的格式,并提供了一个轻量级的推理引擎,以实现实时的机器学习推断。它支持多种STM32系列微控制器,并提供了易于使用的API和配置工具,方便开发者进行集成和部署。STM32Cube.AI的目标是为嵌入式设备提供高效的AI功能。
- PyTorch Mobile
项目主页:
https://pytorch.org/mobile/home/
PyTorch Mobile是PyTorch的一个扩展,用于在移动设备上运行机器学习模型。它提供了一种将PyTorch模型转换为在移动设备上运行的格式的方法,并提供了一个轻量级的推理引擎,以实现实时的机器学习推断。PyTorch Mobile支持多种移动平台和操作系统,并提供了易于使用的API,方便开发者进行集成和部署。它可以在iOS和Android设备上运行,并支持使用C++和Java进行开发。
Embedded Learning Library (ELL)
项目主页:
https://github.com/Microsoft/ELL
Embedded Learning Library(ELL)是Microsoft Research开发的一个开源机器学习库,专门用于在嵌入式设备上进行机器学习推理。ELL旨在提供一个轻量级、高效的解决方案,使开发者能够在资源受限的设备上部署和运行机器学习模型。ELL支持多种硬件平台和操作系统,并提供了用于模型优化、部署和推理的工具和库。它提供了易于使用的API,方便开发者进行模型加载和推理操作。ELL还支持模型压缩和量化,以实现更小的模型尺寸和更高的推理性能。ELL的目标是使嵌入式设备能够具备智能感知和决策能力。
六、问题与挑战
- 内存限制:这是TinyML发展的限制之一。边缘设备上的机器学习任务很困难,因为它们只有很少的内存(如KB级别的SRAM和不到1MB的Flash内存)。传统的机器学习推断需要更高的内存(如GB级别),这在边缘平台上是不可能的。因此,边缘设备的低内存占用使得TinyML应用变得困难。
- 低功耗:低功耗是TinyML的主要研究问题之一。由于边缘设备的能源供应限制,TinyML必须考虑能效特性。由于硬件平台和预处理路径的变化,很难为硬件平台指定通用的功耗管理模块。边缘设备通常连接到传感器和其他外围设备,这可能引发TinyML系统中一些能源感知的管理问题。因此,设计能效较高的TinyML系统仍然是一个重要的挑战。
- 硬件和软件异构性:硬件和软件的异构性对于TinyML系统的学习和部署策略构成了巨大挑战。由于各种硬件平台的差异性导致无法实现边缘感知性能结果的规范化。此外,当前使用的软件框架也存在差异,为了在资源有限的设备上成功部署TinyML,需要解决软件异构性的问题。
- 缺乏基准测试工具:传统的机器学习基准测试需要使用推理模型,这些模型在高负载时消耗大量能量,并需要大量内存空间。在TinyML场景下,由于内存和处理能力的限制,很难进行这些基准测试。即使尝试在TinyML环境中部署适用的单个基准测试,也需要考虑到运行测试会消耗大量功耗。因此,需要重新设计现有的基准测试,以适应硬件的异构性,并确保灵活性。目前,TinyMLPerf组织正在提供更多的基准测试措施。
- 缺乏数据集:现有的数据集可能不适合适用于低功耗的TinyML架构。适合TinyML的数据集应该具有适当的时间和空间分辨率,以生成来自外部传感器的数据特征。此外,这样的数据集的噪声水平和多样性应该与低功耗边缘设备的需求相匹配。因此,我们需要一套标准的数据集,可以方便地用于训练TinyML系统。
- 缺乏广泛接受的模型:目前,许多机器学习模型在传统基础设施中得到广泛应用,例如MobileNet被用作在移动边缘计算设备上进行深度神经网络基准测试的模型。然而,在TinyML生态系统中还没有一个被广泛使用的模型。我们预计,不久将会有类似的模型出现,以提高TinyML的适用性。
七、总结
TinyML是一项创新的技术,使得在资源受限的嵌入式设备上实现智能功能成为可能。它为嵌入式系统带来了智能化的可能性,并促进了边缘计算的发展。随着技术的不断发展,我们可以期待TinyML在更多领域发挥重要作用。
【参考文献】
[1] https://arxiv.org/abs/2211.04448
[2] https://arxiv.org/abs/2009.14385
[3] https://arxiv.org/abs/2008.04245
[4] https://dl.acm.org/doi/10.1145/3460418.3479287
[5] https://arxiv.org/abs/2104.01454
[6] https://arxiv.org/abs/2103.04792
[7] https://www.researchgate.net/publication/351915142_Edge_AI_Framework_for_Healthcare_Applications
[8] https://arxiv.org/abs/2101.08744
[9] https://arxiv.org/abs/2009.14385
[10] https://arxiv.org/abs/2010.14246
[11] https://arxiv.org/abs/2103.06231