MCUNet: Tiny Deep Learning on IoT Devices

本文纯翻译,原文见:https://arxiv.org/abs/2007.10319

目录

  • MCUNet: Tiny Deep Learning on IoT Devices
  • Abstract
  • 1 Introduction
  • 2 Background
  • 3 MCUNet: 系统算法协同设计
    • 3.1 TinyNAS: 两阶段NAS,用于微小的内存限制
    • 3.2 TinyEngine:一个高效内存推理库
  • 4 Experiment
    • 4.1 设置
    • 4.2 微型设备上的大规模图像识别
    • 4.2 微型设备上的大规模图像识别
    • 4.3 视觉和音频唤醒词
    • 4.4 MCU上的目标检测
    • 4.5 分析
  • 5 Conclusion
    • 更广泛的影响声明

Abstract

基于微控制器单元(MCU)的微小物联网设备上的机器学习很有吸引力,但也很有挑战性:微控制器的内存甚至比手机小2-3个数量级。我们提出了MCUNet,这是一个联合设计高效神经架构(TinyNAS)轻量级推理引擎(TinyEngine) 的框架,能够在微控制器上实现ImageNet规模的推理。

TinyNAS采用两阶段神经结构搜索方法,首先优化搜索空间以适应资源约束,然后在优化的搜索空间中专门研究网络结构。TinyNAS可以在低搜索成本的情况下自动处理各种约束(即设备、延迟、能源、内存)。TinyNAS与TinyEngine共同设计,TinyEngine是一种高效的内存推理引擎,用于扩展搜索空间并适应更大的模型。TinyEngine根据整个网络拓扑结构而不是分层优化来调整内存调度,

与TF Lite Micro[3]和CMSIS-NN[28]相比,减少了3.4×内存使用,并将推理速度提高了1.7-3.3×倍。
与量化MobileNetV2和ResNet-18相比,MCUNet是第一个在现成的商用微控制器上实现超过70%ImageNet top1精度的产品,使用的SRAM和闪存数量减少了3.5倍,闪存数量减少了5.7倍。

在视觉和音频唤醒词任务方面,MCUNet达到了最先进的精度,运行速度比基于MobileNetV2和ProxylessNAS的解决方案快2.4-3.4倍,峰值SRAM小3.7-4.1倍。

我们的研究表明,在物联网设备上始终进行微型机器学习的时代已经到来。

1 Introduction

基于always-on 微控制器的物联网设备数量正以历史速度快速增长,达到250B[2],实现了智能制造、个性化医疗、精准农业、自动化零售等众多应用。这些低成本,低能微控制器为微型机器学习(TinyML)带来了全新的机遇。通过在这些微型设备上运行深度学习模型,我们可以直接在传感器附近执行数据分析,从而大幅扩大人工智能应用的范围。

然而,微控制器的资源预算非常有限,尤其是内存(SRAM)和存储器(闪存)。芯片内存比移动设备小3个数量级,比云GPU小5-6个数量级,这使得深度学习部署极其困难。
如表1所示,最先进的ARM Cortex-M7 MCU只有320kB SRAM和1MB闪存,不可能运行现成的深度学习模型:ResNet-50[21]超出存储限制100倍,MobileNetV2[44]超出峰值存储限制22倍。即使是int8量化版的MobileNetV2也仍然超出了内存限制5.3×*,显示出所需和可用硬件容量之间的巨大差距

表1:
左图: 微控制器的内存和存储比手机少3个数量级,比云GPU少5-6个数量级。极其有限的记忆使深度学习部署变得困难。
右图: 广泛使用的深度学习模型的最高内存和存储使用率。ResNet50超过微控制器上的资源限制100倍,MobileNet-V2超过20倍。即使是int8量化的MobileNetV2也需要5.3×更大的内存,无法安装微控制器。

Tiny人工智能与云人工智能和移动人工智能有着根本的不同。微控制器是没有操作系统的裸金属设备,也没有DRAM。因此,我们需要联合设计深度学习模型和推理库,以有效地管理微小的资源,并适应紧张的内存和存储预算。现有的高效网络设计[25,44,49]和神经架构搜索方法[45,6,48,5]主要针对内存和存储都非常丰富的GPU或智能手机。因此,它们只会优化以减少触发器或延迟,由此产生的模型无法适合微控制器。事实上,我们发现,在类似ImageNet精度(70%)的情况下,MobileNet V2[44]比ResNet-18[21](图1)减少了4.6倍的模型尺寸,但峰值激活尺寸增加了1.8倍,使得在微控制器上安装SRAM更加困难。在微控制器上研究机器学习的文献有限[16,31,43,29]。然而,由于缺乏系统算法协同设计,他们要么研究小规模的数据集(例如,CIFAR或亚CIFAR级别),这些数据集远离实际用例,要么使用无法获得良好性能的弱神经网络。

图1。MobileNet V2减少了模型大小,但没有减少峰值内存,而MCUNet有效地减少了参数大小和激活大小。

我们提出了MCUNet,这是一个系统模型协同设计框架,能够在现成的微控制器上实现ImageNet规模的深度学习。
为了处理微控制器上稀缺的片上内存,我们联合优化了深度学习模型设计(TinyNAS)和推理库(TinyEngine),以减少内存使用。TinyNAS是一种两阶段的神经架构搜索(NAS)方法,可以处理各种微控制器上微小且多样的内存限制。NAS的性能在很大程度上取决于搜索空间[39],但很少有关于小规模搜索空间设计启发式的文献。TinyNAS首先自动优化搜索空间以适应微小的资源约束,然后在优化的空间中执行神经架构搜索,从而解决了这个问题。
具体来说,TinyNAS通过缩放输入分辨率和模型宽度来生成不同的搜索空间,然后收集搜索空间内满意网络的计算次数分布,以评估其优先级。TinyNAS依赖于这样一种洞察:在内存限制下,能够容纳更高触发器的搜索空间可以产生更好的模型。实验表明,优化后的空间可以提高NAS搜索模型的精度。为了处理微控制器上极其紧张的资源限制,我们还需要一个高效的内存推理库来消除不必要的内存开销,这样我们就可以扩展搜索空间,以适应更大的模型容量和更高的精度。TinyNAS与TinyEngine共同设计,旨在提升托管深度学习模型的上限。TinyEngine通过基于代码生成器的编译方法改进了现有的推理库,以消除内存开销。它还支持模型自适应内存调度:TinyEngine没有分层优化,而是根据整个网络拓扑优化内存调度,以获得更好的策略。最后,它对不同的层执行专门的计算内核优化(例如,循环平铺、循环展开、运算融合等),这进一步加速了推理。

MCUNet极大地推动了微控制器深度网络性能的极限。与TFLite和CMSIS-NN相比,TinyEngine将峰值内存使用量减少了3.4倍,并将推断速度加快了1.7-3.3倍,从而使我们能够运行更大的模型。通过系统算法协同设计,MCUNet(TinyNAS+TinyEngine)在现成的商用微控制器上实现了创纪录的ImageNet top-1精度70.7%。在视觉和音频唤醒字任务方面,MCUNet达到了最先进的精度,在峰值较小的SRAM为3.7-4.1×时,运行速度比现有解决方案快2.4-3.4×倍。对于交互式应用程序,我们的解决方案在语音命令数据集上以91%的top-1精度达到10 FPS。我们的研究表明,物联网设备上的微型机器学习时代已经到来。

2 Background

微控制器内存很紧:例如,对于流行的ARM Cortex-M7微控制器STM32F746,只有320kB SRAM和1MB闪存。因此,我们必须仔细设计推理库和深度学习模型,以适应紧张的记忆约束。在深度学习场景中,SRAM限制激活大小(读写);Flash限制模型大小(只读)。

微控制器上的深度学习推理。 微控制器的深度学习推理是一个快速发展的领域。现有的框架,如TensorFlow Lite Micro[3]、CMSIS-NN[28]、CMix NN[8]和MicroTVM[9]有几个局限性:1。大多数框架在运行时依赖解释器来解释网络图,这将消耗大量SRAM和闪存(高达峰值内存的65%),并将延迟增加22%。2.优化是在层级别进行的,未能利用整体网络架构信息进一步减少内存使用。
高效的神经网络设计。 网络效率对于深度学习系统的整体性能非常重要。一种方法是通过修剪[20,23,32,35,22,34]和量化[19,51,40,50,13,11,46]来压缩现成的网络,以消除冗余并降低复杂性。张量分解[30,17,26]也是一种有效的压缩方法。另一种方法是直接设计一个高效且移动友好的网络[25,44,37,49,37]。
最近,神经结构搜索(NAS)[52,53,33,6,45,48]主导了高效的网络设计。

NAS的性能在很大程度上取决于搜索空间的质量[39]。传统上,人们在NAS搜索空间设计中遵循手动设计启发法。例如,广泛使用的移动设置搜索空间[45,6,48]源自MobileNetV2[44]:它们都使用224输入分辨率和类似的基本通道号配置,同时搜索内核大小、块深度和扩展比。然而,对于内存有限的微控制器,缺乏标准的模型设计,搜索空间设计也是如此。一种可能的方法是手动调整每个微控制器的搜索空间。但是,通过测试和错误进行手动调整需要大量人力,这使得大量部署限制(例如,STM32F746具有320kB SRAM/1MB闪存,STM32H743具有512kB SRAM/2MB闪存,延迟要求5FPS/10FPS)无法实现。因此,我们需要一种方法来自动优化搜索空间,以适应微小而多样的部署场景。

3 MCUNet: 系统算法协同设计

我们提出了MCUNet,这是一个系统算法协同设计框架,在同一个循环中联合优化NN体系结构(TinyNAS)和推理调度(TinyEngine)(图2)。与深度学习lib库(例如TensorFlow、PyTrac)45, 6, 48的神经网络搜索优化的神经网络相比,(a)优化了神经网络,或者(b)调整库以最大化给定网络的推理速度[9, 10 ],MCUNet可以通过系统算法协同设计更好地利用资源。

图2。 MCUNet联合设计神经结构和推理调度,以适应微控制器上的紧内存资源。TinyEngine充分利用了MCU上的有限资源,为架构搜索提供了更大的设计空间。与使用现有框架相比,TinyNAS拥有更大的设计自由度,更有可能找到高精度的模型。

3.1 TinyNAS: 两阶段NAS,用于微小的内存限制

TinyNAS是一种两阶段的神经架构搜索方法,它首先优化搜索空间以适应微小且多样的资源约束,然后在优化的空间内执行神经架构搜索。通过优化空间,它显著提高了最终模型的精度。

自动搜索空间优化。 我们建议通过分析满足模型的计算分布,以低成本自动优化搜索空间。为了适应不同微控制器的微小和多样的资源限制,我们调整了输入分辨率和移动搜索空间的宽度倍增[45]。我们从跨越R={48,64,80,…,192,208,224}的输入分辨率和宽度乘数W={0.2,0.3,0.4,…,1.0}中进行选择,以覆盖广泛的资源限制。这导致12×9=108个可能的搜索空间配置S=W×R。每个搜索空间配置包含3.3×1025个可能的子网络。我们的目标是找到最佳的搜索空间配置∗ 在满足资源约束的情况下,包含具有最高精度的模型。

发现S∗ 这不是小事。一种方法是在每个搜索空间上执行神经结构搜索,并比较最终结果。但计算结果将是天文数字。相反,我们通过从搜索空间中随机抽样m个网络并比较满意网络的分布来评估搜索空间的质量。我们没有收集每个令人满意的网络的精度的累积分布函数(CDF)[38],这是由于大量的训练,计算量很大,我们只收集失败的CDF(见图3)。直觉是,在同一模型族中,精度通常与计算呈正相关[7,22]。计算量越大的模型容量越大,越有可能获得更高的精度。我们进一步验证了第4.5节中的假设。

图3。 TinyNAS通过分析不同搜索空间的FLOPs CDF来选择最佳搜索空间。每条曲线代表一个设计空间。我们的见解是,在内存约束下更可能产生高触发器模型的设计空间提供了更高的模型容量,从而更可能实现高精度。
对于实心红色区域,前20%的型号的翻牌次数大于50.3M,而对于实心黑色区域,前20%的型号的翻牌次数仅大于32.3M。使用实心红色空间进行神经结构搜索的最终准确率为78.7%,比使用黑色空间高4.5%。图例的格式为:w{width}-r{resolution}|{mean FLOPs}。

作为一个例子,我们研究了STM32F746上ImageNet-100(一个从原始ImageNet中提取的100类分类任务)的最佳搜索空间。我们在图3中展示了前10个搜索空间配置的FLOPs分布CDF。我们从每个空间采样m=1000个网络,并使用TinyEngine优化每个模型的内存调度。我们只将满足内存需求的模型保持在最佳调度状态。为了对每个空间进行定量评估,我们计算每个配置的平均触发器,并选择平均触发器最大的搜索空间。例如,根据ImageNet-100上的实验结果,与使用实心绿色空间(平均浮点46.9M)相比,使用实心红色空间(平均浮点52.0M)的精度提高了2.3%,这表明了自动搜索空间优化的有效性。我们将在第4.5节中详细介绍消融实验。

资源受限的模型专业化。 为了专门针对各种微控制器的网络架构,我们需要保持较低的神经架构搜索成本。在对每个内存约束进行搜索空间优化后,我们执行一次性神经结构搜索[4,18],以有效地找到一个好的模型,将搜索成本降低200×[6]。我们通过权值共享训练一个包含所有可能子网络的超级网络,并使用它来估计每个子网络的性能。然后,我们执行进化搜索,在搜索空间内找到满足车载资源约束的最佳模型,同时实现最高精度。对于每个采样网络,我们使用TinyEngine优化内存调度,以测量最佳内存使用率。通过这种协同设计,我们可以有效地满足微小的内存预算。有关超级网络训练和进化搜索的详细信息,请参见补充资料。

3.2 TinyEngine:一个高效内存推理库

研究人员过去认为,使用不同的深度学习框架(库)只会影响推理速度,而不会影响准确性。然而,TinyML的情况并非如此:推理库的效率对搜索模型的延迟和准确性都非常重要。明确地,一个好的推理框架将充分利用单片机有限的资源,避免内存浪费,并为架构搜索提供更大的搜索空间。TinyNAS拥有更大的设计自由度,更有可能找到高精度的模型。因此,TinyNAS与一个高效内存推理库TinyEngine共同设计。

从解释到代码生成。 大多数现有的推理库(如TF Lite Micro、CMSIS-NN)都是基于解释器的。虽然它很容易支持跨平台开发,但它需要额外的运行时内存(MCU中最昂贵的资源)来存储元信息(如模型结构参数)。相反,TinyEngine将这些操作从运行时卸载到编译时,只生成TinyNAS模型将执行的代码。由于算法和系统的协同设计,我们可以完全控制运行什么模型,生成的代码完全专用于TinyNAS模型。它不仅避免了运行时解释的时间,还释放了内存使用量,以允许运行更大的模型。与CMSIS-NN相比,TinyEngine通过代码生成减少了2.1倍的内存使用,并将推理效率提高了22%,如图4和图5所示。

图4。 TinyEngine在减少内存使用的同时,实现了比现有推理框架更高的推理效率。左:TinyEngine分别比TF Lite Micro和CMSIS-NN快3倍和1.6倍。
请注意,如果所需内存超过内存限制,则会标记为“OOM”(内存不足)。
右图:通过减少内存使用量,TinyEngine可以用极小的内存运行各种型号的设计,在MCU有限的内存下扩大TinyNAS的设计空间。我们缩放宽度乘数和输入分辨率,以便大多数库可以适应神经网络(用w{}-r{}表示)。

图5。 TinyEngine通过消除运行时开销、专门化每种优化技术以及采用就地深度卷积,超越了现有库。在给定的延迟/内存约束下,这有效地扩大了TinyNAS的设计空间。

TinyEngine的二进制大小很轻,这使得它对MCU非常有效。与基于解释器的TF Lite Micro不同,TF Lite Micro为每个操作(例如,conv、softmax)准备代码,以支持跨模型推理,即使不使用它们,也具有高冗余。TinyEngine只将给定模型使用的操作编译为二进制。
如图6所示,与TF Lite Micro和CMSIS-NN相比,这种模型自适应编译将代码大小分别减少了4.5倍和5.0倍。

图6。 二进制大小。

模型自适应内存调度。 现有的推理库仅基于层本身来调度每个层的内存:一开始,指定一个大的缓冲区来存储im2col之后的输入激活;当执行每一层时,只有一列经过转换的输入占用了这个缓冲区。这会导致输入激活和重用不好。相反,TinyEngine巧妙地将内存调度调整到模型级统计数据:在所有层L上恰好适合一列转换输入所需的最大内存M,

对于每一层Lj,TinyEngine都会尝试平铺计算循环嵌套,以便在该内存中容纳尽可能多的列,

因此,即使对于两个不同模型中具有相同配置(例如,内核大小,#输入/输出通道)的层,TinyEngine也将提供不同的策略。这种自适应充分利用了可用内存,增加了输入数据的重用,减少了运行时的开销,包括内存碎片和数据移动。如图5所示,模型自适应im2col操作将推理效率提高了13%。

计算内核专门化。 TinyEngine专门针对不同层进行内核优化:循环平铺基于内核大小和可用内存,每层的可用内存不同;内部循环展开还专门针对不同的内核大小(例如,3×3内核有9个重复代码段,5×5有25个重复代码段),以消除分支指令开销。对Conv+Padding+ReLU+BN层执行操作融合。这些针对计算内核的专门优化进一步将推理效率提高了22%,如图5所示。

就地深度卷积 我们提出就地深度卷积来进一步减少峰值内存。与标准卷积不同,深度卷积不跨通道执行滤波。因此,一旦一个通道的计算完成,该通道的输入激活可以被覆盖,并用于存储另一个通道的输出激活,从而允许按深度卷积的激活被就地更新,如图7所示。如图5所示,这种方法将测量到的内存使用量减少了1.6倍。

图7。TinyEngine通过执行就地深度卷积来减少峰值内存。左图:传统的深度卷积需要2N内存来激活。右图:就地深度卷积将深度卷积的内存减少到N+1。具体地,第一信道的输出激活被存储在临时缓冲器中。然后,对于每个后续通道,输出激活覆盖其前一通道的输入激活。最后,存储在缓冲器中的第一个通道的输出激活被写回最后一个通道的输入激活

4 Experiment

4.1 设置

数据集。 我们使用了3个数据集作为基准:ImageNet[14]、视觉唤醒词(VWW)[12]和语音命令(V2)[47]。ImageNet是图像分类的标准大规模基准。VWW和语音命令代表了流行的微控制器用例:VWW是一个基于视觉的数据集,用于识别图像中是否有人;Speech Commands是一个用于关键字识别(例如,“Hey Siri”)的音频数据集,需要从大小为35的词汇表中对口语进行分类。这两个数据集都反映了微控制器工作负载的常开特性。我们没有使用像CIFAR[27]这样的数据集,因为它是一个具有有限图像分辨率(32×32)的小数据集,无法准确地表示实际情况下的基准模型大小或精度。

在神经架构搜索过程中,为了不触及验证集,我们对训练集的一小部分进行了验证(我们从ImageNet的训练集中分割了10000个样本,从VWW中分割了5000个样本)。语音命令有一个单独的验证和测试集,因此我们使用验证集进行搜索,并使用测试集报告准确性。培训细节见补充材料。

模型部署。 我们执行int8线性量化来部署模型。我们将这些模型部署在各种硬件资源的微控制器上,包括STM32F412(Cortex-M4,256kB SRAM/1MB闪存)、STM32F746(Cortex-M7,320kB/1MB闪存)、STM32F765(Cortex-M7,512kB SRAM/1MB闪存)和STM32H743(Cortex-M7,512kB SRAM/2MB闪存)。默认情况下,除非另有规定,否则我们使用STM32F746报告结果。使用216MHz CPU将所有延迟标准化为STM32F746。

4.2 微型设备上的大规模图像识别

通过我们的系统算法协同设计,我们在微控制器上实现了高精度(70.7%)的大规模图像网络识别。我们共同优化TinyNAS和TinyEngine,以找到最佳的可运行网络。我们将结果与几个基线进行比较。我们通过复合缩小宽度倍增器和输入分辨率,生成MobileNetV2[44](表示为S-MbV2)和ProxylessNAS Mobile[6](表示为S-Proxyless)的最佳缩放比例,直到它们满足内存需求。我们在帕累托前沿†对所有令人满意的缩小模型的性能进行培训和评估,然后报告最高精度作为基线。前者是一种高效的手动设计模型,后者是一种最先进的NAS模型。我们没有使用与MobileNetV3[24]类似的型号,因为微控制器上没有有效地支持硬swish激活。

协同设计带来更好的性能。 推理库和模型设计都有助于适应微控制器的资源限制。如表2所示,当在320kB SRAM和1MB闪存的紧张预算下运行时,使用CMSIS-NN,MobileNetV2和ProxylessNAS模型的最佳缩放在ImageNe上仅达到35.2%和49.5%的顶级精度[28]。使用TinyEngine,我们可以拟合更大的模型,实现47.4%和56.4%的更高精度;使用TinyNAS,我们可以在内存紧张的约束下专门化更精确的模型,以实现55.5%的top-1精度。
最后,通过系统算法协同设计,MCUNet进一步将精度提高到61.8%,显示了联合优化的优势。

表2。 系统算法协同设计(TinyEngine+TinyNAS)实现了可在微控制器上运行的模型的最高ImageNet精度。

协同设计在各种延迟约束下提高了性能(表3)。TinyEngine在相同的延迟约束下加速推理以获得更高的准确性。对于MobileNetV2的最佳缩放,TinyEngine在5 FPS设置下将精度提高了1.9%,在10 FPS设置下提高了5.4%。通过MCUNet联合设计,我们可以将性能进一步提高8.3%和6.4%

表3。 在各种延迟要求下,MCUNet的性能优于基线。TinyEngine和TinyNAS都为ImageNet带来了显著的改进。

不同的硬件限制和较低的位精度。 我们对权重和激活都使用int8线性量化,因为它是更快推断的工业标准,通常在不进行微调的情况下,精度损失可以忽略不计。我们还在ImageNet上进行了4位线性量化,可以适应更多的参数。结果如表4所示。MCUNet可以在Cortex-M4(F412)和M7(F746、F765、H743)内核的不同MCU上处理不同的硬件资源。

表4。 MCUNet可以在不同的MCU上处理不同的硬件资源。在不同的资源限制下,在不使用高级混合比特量化(8/4/2位)策略的情况下,它的性能优于[43],在微控制器上实现了记录ImageNet精度(>70%)

如果没有混合精度,我们已经可以在微控制器上超越现有的最先进技术[43],这表明了系统算法协同设计的有效性。我们相信,未来我们可以通过混合精度量化进一步推进帕累托曲线

值得注意的是,我们的模型在STM32H743 MCU上实现了创纪录的ImageNet top-1精度70.7%。据我们所知,我们是第一个在现成的商用微控制器上实现超过70%ImageNet精度的公司。与ResNet-18和MobileNet V2-0.75(均为8位)相比,它们实现了类似的ImageNet精度(69.8%),我们的MCUNet将内存使用量减少了3.5倍,闪存使用量减少了5.7倍(图8),以适应微控制器上的微小内存大小。

图8。 与MobileNetV2和ResNet-18(8位)相比,MCUNet将SRAM内存减少了3.5倍,闪存使用量减少了5.7倍,同时实现了更好的精度(70.7%比69.8%的ImageNet top-1)。

4.2 微型设备上的大规模图像识别

通过我们的系统算法协同设计,我们在微控制器上实现了高精度(70.7%)的大规模图像网络识别。我们共同优化TinyNAS和TinyEngine,以找到最佳的可运行网络。我们将结果与几个基线进行比较。我们通过复合缩小宽度倍增器和输入分辨率,生成MobileNetV2[44](表示为S-MbV2)和ProxylessNAS Mobile[6](表示为S-Proxyless)的最佳缩放比例,直到它们满足内存需求。我们在帕累托前沿†对所有令人满意的缩小模型的性能进行培训和评估,然后报告最高精度作为基线。前者是一种高效的手动设计模型,后者是一种最先进的NAS模型。我们没有使用与MobileNetV3[24]类似的型号,因为微控制器上没有有效地支持硬swish激活。

协同设计带来更好的性能。 推理库和模型设计都有助于适应微控制器的资源限制。如表2所示,当在320kB SRAM和1MB闪存的紧张预算下运行时,使用CMSIS-NN,MobileNetV2和ProxylessNAS模型的最佳缩放在ImageNe上仅达到35.2%和49.5%的顶级精度[28]。使用TinyEngine,我们可以拟合更大的模型,实现47.4%和56.4%的更高精度;使用TinyNAS,我们可以在内存紧张的约束下专门化更精确的模型,以实现55.5%的top-1精度。
最后,通过系统算法协同设计,MCUNet进一步将精度提高到61.8%,显示了联合优化的优势。

协同设计在各种延迟约束下提高了性能(表3)。TinyEngine在相同的延迟约束下加速推理以获得更高的准确性。对于MobileNetV2的最佳缩放,TinyEngine在5 FPS设置下将精度提高了1.9%,在10 FPS设置下提高了5.4%。通过MCUNet联合设计,我们可以将性能进一步提高8.3%和6.4%。

不同的硬件限制和较低的位精度。 我们对权重和激活都使用int8线性量化,因为它是更快推断的工业标准,通常在不进行微调的情况下,精度损失可以忽略不计。我们还在ImageNet上进行了4位线性量化,可以适应更多的参数。结果如表4所示。MCUNet可以在Cortex-M4(F412)和M7(F746、F765、H743)内核的不同MCU上处理不同的硬件资源。

如果没有混合精度,我们已经可以在微控制器上超越现有的最先进技术[43],这表明了系统算法协同设计的有效性。我们相信,我们可以进一步推进帕累托曲线在未来的混合精度量化。

值得注意的是,我们的模型在STM32H743 MCU上实现了创纪录的ImageNet top-1精度70.7%。据我们所知,我们是第一个在现成的商用微控制器上实现超过70%ImageNet精度的公司。与ResNet-18和MobileNet V2-0.75(均为8位)相比,它们实现了类似的ImageNet精度(69.8%),我们的MCUNet将内存使用量减少了3.5倍,闪存使用量减少了5.7倍(图8),以适应微控制器上的微小内存大小。

4.3 视觉和音频唤醒词

我们对两个唤醒词数据集的性能进行了基准测试:视觉唤醒词[12](VWW)和谷歌语音命令(表示为GSC),以比较准确度延迟和准确度峰值内存权衡。我们将其与TF Lite Micro上运行的最佳规模的MobileNetV2和ProxylessNAS进行了比较。结果如图9所示。MCUNet显著推进了帕累托曲线。在VWW数据集上,我们可以在2.4-3.4×更快的推理速度和3.7×更小的峰值内存下实现更高的精度。我们还将我们的结果与之前关于VWW挑战[1]的第一名解决方案(表示为Han等人)进行了比较。我们调整了输入分辨率,使其严格适应320kB的内存限制,并在与我们相同的设置下对其进行了重新训练。我们发现,与之前的最新技术相比,MCUNet的推理速度提高了2.4倍。有趣的是,与最大的MobileNetV2和ProxylessNAS模型相比,[1]中的模型具有更小的峰值内存使用率,同时具有更高的计算和延迟。它还表明,较小的峰值内存是微控制器成功的关键。


图9。 VWW(顶部)和语音命令(底部)数据集的准确性与延迟/SRAM内存权衡。
MCUNet在峰值较小的SRAM为3.7-4.1×时,在2.4-3.4×更快的同时实现了更好的精度。

在语音命令数据集上,MCUNet以2.8倍更快的推理速度和4.1倍更小的峰值内存实现了更高的精度。在256kB SRAM限制下,与最大的MobileNetV2相比,它实现了2%的高精度,与最大的可运行ProxylessNAS相比,提高了3.3%

4.4 MCU上的目标检测

为了展示MCUNet框架在不同任务中的泛化能力,我们将MCUNet应用于目标检测。对于内存有限的MCU来说,目标检测尤其具有挑战性:通常需要高分辨率输入来检测相对较小的目标,这将显著提高峰值性能。我们在Pascal VOC[15]数据集上对我们的MCUNet和缩放的MobileNetV2+CMSIS-NN的目标检测性能进行了基准测试。我们使用YOLOv2[41]作为检测器;其他更先进的探测器,如YOLOv3[42]使用多尺度特征图生成最终预测,它必须在SRAM中保持中间激活,从而大幅增加峰值记忆。H743的结果如表5所示。在内存预算紧张的情况下(只有512kB SRAM和2MB闪存),MCUNet将mAP显著提高了20%,这使AIoT应用程序更容易访问。

4.5 分析

搜索空间优化很重要。 搜索空间优化显著提高了NAS的准确性。我们对ImageNet-100进行了消融研究,ImageNet-100是ImageNet的一个子集,随机抽取了100个类别。前10个搜索空间的分布如图3所示。我们从前10个搜索空间中抽取几个搜索空间,并执行整个神经架构搜索过程,以在空间内找到适合320kB SRAM/1MB闪存的最佳模型。
我们使用表6中的不同搜索空间比较了搜索模型的准确性。使用我们的算法找到的搜索空间配置,我们可以实现78.7%的top-1精度,在224分辨率输入(内存不足)上更接近ResNet-18。我们评估了前10个空间中的几个随机抽样搜索空间;他们的表现要差得多。另一个基准是使用支持可变分辨率(96-176)和可变宽度乘数(0.3-0.7)的非常大的搜索空间。请注意,这个“巨大的空间”包含了最好的空间。然而,它并没有获得良好的性能。我们假设使用超大空间会增加训练超级网络和进化搜索的难度。我们在图10中绘制了最终搜索模型的精度与搜索空间配置的平均失败率之间的关系。我们可以看到一个明确的积极关系,这支持我们的算法。

逐块峰值内存分析。 我们比较了图11中320kB SRAM限制下缩小的MobileNetV2(0.3×)和TinyNAS搜索模型的峰值内存分布。我们绘制了前两个阶段的每块激活大小(不包括其他运行时缓冲区),其中最大的激活大小是内存瓶颈。MobileNetV2的峰值激活大小高度不平衡:与平均值相比,单个区块的峰值激活大小为2.2倍。为了缩小网络规模并适应SRAM限制,其他模块被迫扩展到非常小的容量。另一方面,TinyNAS搜索的MCUNet具有更均衡的峰值内存大小,从而导致整体更高的网络容量。TinyNAS(第3.1节)在优化精度/内存权衡时会自动发现内存分配,而无需对内存分配进行人工启发。

搜索空间优化的灵敏度分析。 我们检查了搜索空间优化的结果,发现了一些有趣的模式。结果如图12所示。我们将SRAM限制从192kB更改为512kB,闪存限制从512kB更改为2MB,并显示所选的宽度倍增和分辨率。通常,使用更大的SRAM存储更大的激活图,我们可以使用更高的输入分辨率;使用更大的闪光灯来存储更大的型号。我们可以使用更大的宽度倍增器。当我们增加SRAM并将闪光灯从1点保持在2点(红色矩形)时,宽度不会因为闪光灯小而增加;随着更大的SRAM可以承载更大的激活,分辨率会增加。从点1到点3,宽度增加,分辨率实际上降低。这是因为更大的闪存承载更宽的型号,但我们需要缩小分辨率以适应小型SRAM。这样的模式并不琐碎,很难手动发现。


图12。 不同SRAM和闪存约束下的最佳搜索空间配置。

进化搜索。 不同推理库的进化搜索曲线如图13所示。实线表示平均值,阴影显示(最小、最大)精度范围。在TinyEngine上,进化明显优于随机搜索,最佳准确率高出1%。由于内存效率低下,CMSISNN的进化导致了更糟糕的结果:与TinyEngine相比,该库只能承载更小的模型,从而导致更低的准确性。

图13。 进化进程

5 Conclusion

我们建议MCUNet联合设计神经网络体系结构(TinyNAS)和推理库(TinyEngine),在微小的硬件资源上实现深度学习。我们在现成的微控制器上实现了创纪录的ImageNet精度(70.7%),并将wake word应用程序的推断速度提高了2.4-3.4倍。我们的研究表明,在物联网设备上始终进行微型机器学习的时代已经到来。

更广泛的影响声明

我们的工作有望在微控制器上实现小规模的深度学习,并进一步使深度学习应用程序民主化。多年来,人们已经将深度学习推理的成本从5000美元的工作站GPU降低到500美元的手机。现在,我们为微控制器带来了深入学习,成本为5美元甚至更低,这大大扩展了人工智能应用的范围,使人工智能更容易获得。

由于商用微控制器的低成本和大量(250B),我们可以将人工智能应用到我们日常生活的方方面面,包括个性化医疗、智能零售、精准农业、智能工厂等。来自农村和欠发达地区、没有互联网或高端硬件的人们也可以享受人工智能的好处。我们的方法也有助于对抗COVID-19,通过提供负担得起的深度学习解决方案来检测面罩和人们聚集在边缘设备上而不牺牲隐私。

有了这些始终处于低功耗的微控制器,我们就可以从源头上处理原始传感器数据。它有助于保护隐私,因为数据不再需要传输到云端,而是在本地处理。

【Paper Reading】MCUNet:物联网设备上的微型深度学习相关推荐

  1. 【读点论文】PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices,一种可在边缘设备上部署的深度学习目标检测

    PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices https://github.com/ChanChiChoi/awes ...

  2. 爆肝一周,用Python在物联网设备上写了个智能语音助手

    1. 背景介绍 智能语音助手作为物联网领域的一个重要生态成员,是一种全新的交互方式,它能够解放双手,随时提供服务,无须借助任何按键.想必很多开发者都有玩过天猫精灵.小爱同学或者小度吧,看到这些炫酷的人 ...

  3. 5分钟教你如何利用华为云IoT进行物联网设备上云

    一.背景 近些年,云计算的发展使得物联网技术突飞猛进,万物联网已经成为这个时代的标识,没有物联网之前,你能想象人在路上就能打开家里的空调?有了物联网,冰箱也能听懂主人在说什么:有了物联网,音响可以直接 ...

  4. 物联网设备上云难?华为云IoT帮你一键完成模型定义,快速在线调试设备

    摘要:在不到3分钟的操作里,不仅完成了一款智慧烟感设备在云端的模型定义,还通过在线调试了解到了设备和远端通信的过程. 本文分享自华为云社区<物联网设备上云难?华为云IoT帮你一键完成模型定义,快 ...

  5. 爆肝一周,用Python在物联网设备上写了个智能语音助手-阿里云智能语音交互

    基于HaaS云端一体框架,用Python打造HaaS EDU K1智能语音助手的过程中需要用到云端能力.本篇文章介绍如何开通阿里云智能语音交互,并创建配置语音识别及语音合成项目,获取Appkey.请参 ...

  6. TVM 优化 ARM GPU 上的移动深度学习

    TVM 优化 ARM GPU 上的移动深度学习 随着深度学习的巨大成功,将深度神经网络部署到移动设备的需求正在迅速增长.与桌面平台上所做的类似,在移动设备中使用 GPU 既有利于推理速度,也有利于能源 ...

  7. CUDA上的量化深度学习模型的自动化优化

    CUDA上的量化深度学习模型的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参 ...

  8. TVM在ARM GPU上优化移动深度学习

    TVM在ARM GPU上优化移动深度学习 随着深度学习的巨大成功,将深度神经网络部署到移动设备的需求正在迅速增长.与在台式机平台上所做的类似,在移动设备中使用GPU可以提高推理速度和能源效率.但是,大 ...

  9. 姿态检测 树莓派_怎样在树莓派上轻松实现深度学习目标检测?

    原标题:怎样在树莓派上轻松实现深度学习目标检测? 雷锋网按:本文为 AI 研习社编译的技术博客,原标题 How to easily Detect Objects with Deep Learning ...

最新文章

  1. C# 利用Jmail接收邮件
  2. 有的人在25岁时就死了,但在75岁时才被埋葬:周鸿祎
  3. 2.3.1 spring属性注入-注解注入-半注解方式-前序
  4. 为什么不使用volatile,其它线程也能得到当前线程修改后的值,不使用volatile也不存在可见性问题?原来解决可见性问题不一定需要volatile,println也可以
  5. 摘录HTTP头部信息的注释
  6. Ruby. Vs . Python
  7. 《C++ Primer》14.3.1节练习
  8. JavaScript-初识jQuery及公式
  9. 夺命雷公狗---ECSHOP---01-解决报错问题
  10. 计算机专业指南考试题6,计算机专业指南考试题.doc
  11. Atitit.每周末总结 于每周一计划日程表 流程表 v8 -------------import 上周遗漏日志补充 检查话费 检查流量情况 Crm问候 Crm表total and 问候
  12. 三次样条插值详解(附代码实现)
  13. SOAP Action介绍
  14. java符号三角形问题_实验四 回溯算法和分支限界法 符号三角形问题
  15. python 自动发送微信消息 (win)
  16. WMS系统(二)盘点之“核对库存”
  17. c语言编程齿轮模数选择,如何画齿轮,一看就懂
  18. [转载]Linux SWAP 交换分区配置说明
  19. strtol()函数介绍
  20. 网站安全之XSS攻击

热门文章

  1. 埃森哲携手阿里云共建基于云原生的消费者运营中台解决方案
  2. requests进阶
  3. 如何使用visual C++6.0查看MFC源码(.sbr浏览信息文件的功效)
  4. 非奇异终端滑模控制(NTSM)
  5. 小草酒店客房管理系统 v2.61 单机/网络版 bt
  6. 腾讯社交广告高校算法大赛——总结
  7. 能作曲的人工智能 深度神经网络MuseNet
  8. Prefix function. Knuth–Morris–Pratt algorithm
  9. 中图分类法----J 艺术
  10. 天河二号那些事儿(1)