[MIT6.5940] Lect 10 MCUNet: TinyML on  Microcontrollers

[MIT6.5940] Lect 10 MCUNet: TinyML on Microcontrollers

Administrator 40 2024-08-19

一、什么是TinyML

  • 随着时间推移和AI发展,模型大小急剧增加,因此我们需要新的算法和硬件来实现TinyML和Green AI,低能耗,低延迟,低成本,更好的隐私,以便我们能在本地设备上运行机器学习应用。
lect10-1.webp

  • 将深度学习压缩到物联网设备中。
    • 全球有数十亿台基于微控制器的物联网设备。
    • 低成本:低收入人群能够负担得起机会。民主化人工智能。
    • 低功耗:绿色人工智能,减少碳排放。
    • 各种应用:智能家居、智能制造、智能健康设备和精准农业等

二、TinyML的挑战

  • 权重和激活在内存方面的约束条件是什么?

    • 输入激活和输出激活,我们必须将其存储在可读写的内存(SRAM)中
    • 但对于核和权重,我们可以将它们存储在闪存中(也可以在DRAM,但是微控制器通常没有DRAM)
lect10-2.webp

  • Flash用途
    • =模型大小
    • 静态的,需要保持整个模型
  • SRAM用途
    • =输入激活+输出激活
    • 动态的,每一层大小都不同
    • 由于每一层都需要计算新的激活值,因此关注峰值SRAM
    • 权重不计算,因为它们可以部分存取

  • 因此,我们不仅希望减小模型大小,也希望减小激活大小。
    • 两者并不是同一个问题,如图中模型大小减小4.6×,但是激活大小反而增加了1.8×
    • 本lect即将介绍的MCUNet不仅减少模型大小,而且减少激活大小。
lect10-3.webp

三、微型神经网络设计

Ⅰ、MCUNet: System-Algorithm Co-design

  • 三个研究方向
    • 1、在给定的推理库基础上,目标寻找能够快速运行的最佳模型架构(NAS)。
    • 2、针对给定神经网络,目标开发设计推理库与推理引擎。
    • 3、神经架构搜索和推理引擎共同设计
      • 神经架构搜索为推理引擎提供高效的神经架构。
      • 推理引擎为神经架构搜索提供非常高效的编译器与运行时环境,以支持这些高效模型的运行。
lect10-4.webp

  • 本节课介绍TinyNAS,下一课介绍TinyEngine

Ⅱ、TinyNAS: Two-Stage NAS for Tiny Memory Constraints

问题:什么是正确的搜索空间?

  • 搜索空间的质量在很大程度上决定了搜索模型的性能。在完整的网络空间中,可能存在多个更优的子空间。
  • 选项1:重复利用曾经为移动AI(例:MobileNet、MnasNet)精心设计的搜索空间。
    • 搜索空间中最小的子网络由于巨大的差距而无法适应硬件。
  • 选项2:为物联网设备选择一个搜索空间(更明智的选择)

问题:如何扩展类似于MBNet-alike的搜索空间?

  • 我们可以通过使用不同的width multiplier宽度因子W和resolution multiplier分辨率因子R来缩放类似mbnet的搜索空间。

  • TinyNAS主要分为两个阶段:
    • 设计搜索空间:在给定的内存和存储限制下,首先推导出一个优化的子空间,即确定W和R参数,随后在该子空间中研究。
    • 搜索子网络:确定核大小、扩展比率、块数量等参数。
lect10-5.webp

  1. 自动搜索空间优化
  • 如何衡量搜索空间是否良好?
    • 直接训练模型获取准确度进行比较,成本较大,因此考虑使用FLOPs进行近似。
    • 分析每个搜索空间中模型的FLOPs分布:更大的FLOPs ->更大的模型容量->更有可能提供更高的精度。
    • 如下图中,红色线代表的搜索空间最佳,其中W=0.5,R=144。
lect10-6.webp

  • 对于不同大小的SRAM和Flash,寻找最佳配置(W,R)
    • 横坐标为SRAM大小,纵坐标为Flash大小,上图表格为宽度W(代表着通道数量),下图表格为分辨率R。
    • 当仅增加SRAM大小时,分辨率R更大。 SRAM决定激活大小,激活大小=分辨率×分辨率×输入通道×输出通道,而Flash大小不变->输入通道和输出通道不变,因此导致宽度W和通道数量大致保持不变,分辨率R增大。
    • 当仅增加Flash大小时,宽度W增大,分辨率R减小。 Flash增大导致容纳的模型大小增大,输入输出通道增大,即宽度W增大,而SRAM不变决定激活大小不变,因此分辨率R降低。
lect10-7.webp

  1. 资源受限的模型专业化
  • 在缩小设计空间后,我们可以执行Once-for-All架构搜索,随机抽样网络,微调该模型,寻找到最佳的子网络。

  1. TinyNAS更好的利用内存
  • TinyNAS为每个块设计具有更统一的峰值内存的网络,允许我们在相同数量的内存下适应一个更大的模型。
lect10-8.webp

  1. 人工设计与MCUNet对比
  • 下图中,Han et al指人工设计网络的表现,左图为延迟与准确率的关系,右图为峰值内存与准确率的关系,实验数据集为Visual Wake Words。
    • 从左图可以看出MCUNet相比于人工设计有2.4×的延迟提升,与MobileNetV2也有3.4×的提升。
    • 从右图可以看出,对于256kB的微控制器内存限制,只有MCUNet可以避免OOM。
lect10-9.webp

Ⅲ、MCUNetV2: Patch-based Inference

Imbalanced Memory Distribution of CNNs

  • 如下图是MobileNetV2的各块SRAM用量,可以看出前几个阶段峰值极高,这是限制部署到边缘端的瓶颈。
    • 由于MobileNetV2前几个阶段分辨率较高,都使用了大约三个卷积核,大量的激活导致了对SRAM需求较高。
    • 我们知道在后面阶段SRAM需求下降是因为进行了下采样,每下采样一次,内存即缩小四倍。
    • 若我们能减少这一初始阶段的内存使用,便能降低整体内存消耗。
lect10-10.webp

1. Saving Memory with Patch-based Inference

  • Per-layer inference:原始的MobileNetV2中是逐层进行推理计算的,必须同时保留输入激活和输出激活,这两者都需要在内存中存储。
  • Per-patch inference:MCUNetV2提出了基于Patch的推理方法,模型每次仅在小比例区域(比完整区域小10倍)进行计算,这可以有效降低峰值内存占用。当完成该部分后,网络的其他具有较小峰值内存的模块则采用常规的layer-by-layer 方式运行。例如图中示意,每次仅计算该特征图的四分之一。
lect10-11.webp

  • 下图为采用Patch-base inference后,MobileNetV2各块的SRAM用量。可以看到改进后,满足256kB的限制。
lect10-12.webp

  • 下图为采用2×2Patch和3×3Patch的效果对比图。可以看出后者对于SRAM需求的改进更为明显。
lect10-13.webp

  • 问题:随着接感受野receptive field的增加,空间重叠会变大,重复计算导致更大的计算开销
lect10-14.webp

2. Network Redistribution to Reduce Overhead

  • 上述重叠区域的将带来10%的额外计算开销,虽然相对于其提升微不足道,但是作者还是力求完美以消除额外的开销。
  • Redistribution感受野:在进行Per-patch推理时,希望减小感受野,而在Per-layer推理时希望增大感受野。
    • Per-patch阶段:移除了一个3×3卷积,并用一个1×1的卷积取而代之,减小感受野。
    • Per-layer阶段:增加了一个3×3卷积
    • 总体而言,总感受野不变,准确度不变,而重叠部分减小,额外计算开销降低。
lect10-15.webp

3. Joint Automated Search for Optimization

  • 通过将神经架构搜索与推理调度结合,即可得到MCUNetV2。
    • 对于神经架构搜索,我们有层数、通道数、卷积核大小等参数可供调整。
    • 对于推理调度,我们有patches、基于patches推理层数以及TinyEngine的参数可供调整
    • 在下一节进行讨论。
lect10-16.webp

Performance

  • 如下左图是基于Visual Wake Words数据的准确率与峰值内存对比图,右图是MCUNet和其V2的峰值内存对比图,接近4×的差距。
lect10-17.webp

  • 左图是ImageNet分类,右图Pascal VOC目标检测,都是在微处理器STM32上进行实验。
lect10-18.webp

Dissecting(解剖) MCUNetV2 architecture

  • 下图是MCUNetV2的架构示意图
    • 从160×160的分辨率开始,实际上可以使用基于patch的推理来适应相当大的分辨率。
    • 前期per-patch推理阶段,使用相对较小的核,以减小感受野和空间重叠。
    • 中间阶段的扩展比率仍然较小,以降低峰值内存,因为此时分辨率仍然较高。
    • 后期阶段采用更宽的神经网络,以提高性能。
    • 对于VWW等对分辨率敏感的数据集,采用更大的输入分辨率,以便检测到更小的人和物体。
lect10-19.webp

四、应用

  • 第四章主要是介绍韩松老师实验室的一些实践成果,在微控制器上部署微型模型,并取得不错的效果。

Ⅰ、Tiny vision

Tiny Image Classification

  • ImageNet-level image classification
    • 通过MCUNet等技术,我们能够在微控制器上实现ImageNet级的图像分类性能。
    • 如下图,通过MCUNet技术,使得在相对较高规格的STM32H743微控制器上的准确率从53.8%提升至70.7%,这是第一个在商业MCU上实现>70%的ImageNet精度。
    • 图中四种微控制器上的网络可以轻松得到,无需重新训练模型,可以使用Once-For-All网络,再为不同的内存约束采样不同的子网络。
lect10-20.webp

  • visual wake words
    • 只有当一个人站在摄像机前时,才能进行人脸识别,这样可以节省大量的能量。
lect10-21.webp

Tiny Object Detection

  • 目标检测对输入分辨率更为敏感,因为我们需要做出更密集的预测。Patched-based推理可以通过打破内存瓶颈来适应更大的分辨率。
  • 该图展示了平均精度与图像分辨率的关系。
lect10-22.webp

Tiny On-device Training

  • 不仅能够在微控制器上推理,还可以进行训练。

Ⅱ、Tiny audio

  • 在我们的日常生活中的常见应用
    • 音频关键词/关键字定位
    • 语音识别
    • 噪声消除

  • 关键字定位
    • 输入:一段长度为l、步长为s的重叠帧,总共T=(L-l)/s+1的帧。
    • 人工设计的特征:将时域信号转换为一组频域光谱系数。
    • 神经网络提取特征:生成输出类的概率,例如关键字是“是/否”“开/关”的概率。
lect10-23.webp

Ⅲ、Tiny time series/anomaly detection

  • 在微型设备上的异常检测应用
    • 视频监控
    • 医疗保健
    • 反诈反骗,对抗攻击

  • 用自动编码器(autoencoders)检测异常
    • 自动编码器定义:一种预测其输入的神经网络
      • 编码器:将输入端压缩成一个较低维的代码向量(code vector)
      • 代码向量(code vector):输入的抽象化
      • 解码器:重建来自代码向量的输出
      • 通过检查输入与输出之间的差异,可以判断当前场景正常还是异常
    • 训练和推理
      • 训练:最小化重建误差
      • 推断:使用实时数据检测异常输入
    • 自动编码器的属性
      • 无监督学习:我们不需要培训时的标签。
      • 特定数据:它们只能有意义地压缩类似于训练数据集的数据,即特定领域的数据,例如数字图像等。
      • 损失性:输出将与输入不相同。
lect10-24.webp
lect10-25.webp