Skip to main content
QUICK REVIEW

[论文解读] Efficient Neural Network Deployment for Microcontroller

Hasan Unlu|arXiv (Cornell University)|Jul 2, 2020
Advanced Neural Network Applications参考文献 3被引用 9
一句话总结

本文提出两种新颖的优化技术——融合的就地最大池化(fused in-place max-pooling)与乒乓缓冲(ping-pong buffering),以实现神经网络在微控制器上的高效部署。通过在步长≥卷积核大小的池化操作中消除中间缓冲区,并在层间重用内存,该框架相较 CMSIS-NN 将 RAM 使用量减少了 74%,从而实现在 SRAM 小于 100KB 的设备上进行推理,且性能损失极小。

ABSTRACT

Edge computing for neural networks is getting important especially for low power applications and offline devices. TensorFlow Lite and PyTorch Mobile were released for this purpose. But they mainly support mobile devices instead of microcontroller level yet. Microcontroller support is an emerging area now. There are many approaches to reduce network size and compute load like pruning, binarization and layer manipulation i.e. operator reordering. This paper is going to explore and generalize convolution neural network deployment for microcontrollers with two novel optimization proposals offering memory saving and compute efficiency in 2D convolutions as well as fully connected layers. The first one is in-place max-pooling, if the stride is greater than or equal to pooling kernel size. The second optimization is to use ping-pong buffers between layers to reduce memory consumption significantly. The memory savings and performance will be compared with CMSIS-NN framework developed for ARM Cortex-M CPUs. The final purpose is to develop a tool consuming PyTorch model with trained network weights, and it turns into an optimized inference engine(forward pass) in C/C++ for low memory(kilobyte level) and limited computing capable microcontrollers.

研究动机与目标

  • 在 SRAM 为千字节级别且计算资源受限的微控制器上,实现神经网络的高效推理。
  • 减少顺序执行神经网络时的内存占用,并提升单核微控制器上的内存重用效率。
  • 开发一个工具链,将训练好的 PyTorch 模型转换为针对微控制器优化的 C/C++ 推理代码。
  • 在 RAM 效率方面超越现有框架(如 CMSIS-NN),同时保持相近的 ROM 使用量。

提出的方法

  • 当步长 ≥ 池化核大小时,通过将结果直接写入输入缓冲区,将最大池化操作融合进卷积层输出,从而消除中间存储。
  • 在层间采用乒乓缓冲策略,跨多个层重用最大的中间激活缓冲区,以最小化峰值内存使用量。
  • 将模型权重移至 .text 段(ROM)而非 .bss 或 .data 段,通过避免运行时分配来减少 SRAM 消耗。
  • 通过自定义内存布局与缓冲区调度策略,将峰值内存限制为前两层输出的最大值,而非单个最大输出。
  • 通过将 ReLU 激活函数融合进卷积核,优化内存访问,避免额外的内存或计算开销。
  • 将优化后的模型编译为适用于 RISC-V 和 ARM Cortex-M 平台的 C/C++ 代码,以支持嵌入式部署。

实验结果

研究问题

  • RQ1当步长 ≥ 池化核大小时,就地最大池化是否能减少微控制器上卷积神经网络的内存使用?
  • RQ2在微控制器上顺序执行神经网络推理时,乒乓缓冲策略能在多大程度上减少峰值内存消耗?
  • RQ3与 CMSIS-NN 相比,该框架在 LeNet-5 等标准 CNN 模型上的 RAM 和 ROM 利用率如何?
  • RQ4是否可以将模型权重安全地存储在只读存储器(ROM)中,而不会降低微控制器上的推理性能?
  • RQ5在 SRAM 小于 100KB 的微控制器上,对 32 位浮点 LeNet-5 模型可实现的最大内存减少量是多少?

主要发现

  • 所提框架将峰值 RAM 使用量降低至 11.2 KB,相较 CMSIS-NN 的 44 KB 减少了 74%,同时保持相同的 ROM 使用量(36 KB)。
  • 融合的就地最大池化优化在步长 ≥ 池化核大小时消除了中间缓冲区的需求,直接将结果写入卷积输出缓冲区。
  • 乒乓缓冲策略将峰值内存限制为前两层输出的最大值,与分配完整大小的临时缓冲区相比,显著减少了内存占用。
  • LeNet-5 的总内存需求从 283 KB(246 KB 参数 + 37 KB 激活)减少至 11.2 KB SRAM,其中 ROM 占用 36 KB 用于存储权重。
  • 该框架成功在 SiFive FE310-G000 RISC-V 微控制器上实现 LeNet-5 的实时推理,通过 UART 输出实现正确分类。
  • 该方法兼容 RISC-V 与 ARM Cortex-M 平台,性能影响极小,且未造成模型精度损失。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。