Logo

NNoM: 面向微控制器的高级神经网络库

NNoM简介

NNoM(Neural Network on Microcontroller)是一个专为微控制器设计的高级神经网络推理库。它的目标是帮助嵌入式开发人员更快速、更简便地将神经网络模型部署到资源受限的微控制器(MCU)平台上。

与其他底层神经网络库相比,NNoM提供了更高级别的抽象和更友好的接口,使得开发人员无需深入了解神经网络的底层细节就可以快速构建和部署模型。NNoM与Keras紧密结合,只需一行Python代码就可以将Keras模型转换为NNoM模型。

NNoM的主要特点

NNoM具有以下几个突出特点:

  1. 支持复杂的网络结构,如Inception、ResNet、DenseNet等。

  2. 用户友好的接口,类似于Keras的API风格。

  3. 提供多种高性能后端选择。

  4. 支持板载(MCU)评估工具,如运行时分析、Top-k准确率、混淆矩阵等。

  5. 板载预编译,避免运行时解释器带来的性能损失。

NNoM结构图

为什么选择NNoM?

近年来,神经网络模型变得越来越宽、越来越深、越来越密集。这些复杂的网络结构在提高效率和性能方面起到了重要作用,这对资源受限的MCU平台尤其重要。然而,现有的面向MCU的神经网络库大多是低级别的,这使得在MCU上部署复杂结构的模型变得非常困难。

NNoM的出现就是为了解决这个问题。它为嵌入式开发人员提供了一个轻量级、用户友好且灵活的接口,可以快速部署各种复杂的神经网络模型。使用NNoM,开发人员只需要关注输入数据和获取结果,而无需操心结构管理、内存分配等底层细节。

NNoM的使用

安装

NNoM可以作为Python包安装:

pip install git+https://github.com/majianjia/nnom@master

NNoM需要TensorFlow版本<=2.14,可以通过以下命令安装:

pip install 'tensorflow-cpu<=2.14.1'

注意:TensorFlow 2.14支持到Python 3.11,不支持Python 3.12。

模型转换

使用NNoM的一个重要步骤是将Keras模型转换为NNoM模型。这可以通过NNoM提供的generate_model()函数轻松完成:

generate_model(model, x_test, name='weights.h')

这将生成一个包含所有模型信息的C头文件"weights.h"。

在MCU上运行

将生成的"weights.h"文件复制到MCU项目中,然后在main()函数中调用nnom_model_create()即可创建和编译模型:

#include "nnom.h"
#include "weights.h"

int main(void)
{
    nnom_model_t *model;

    model = nnom_model_create();
    model_run(model);
}

NNoM的优化

NNoM支持CMSIS-NN作为后端,可以在ARM Cortex-M4/7/33/35P上获得约5倍的性能提升。NNoM会自动为每一层选择最佳的运算符。

为了获得最佳性能,建议保持通道数为4的倍数。如果不确定优化是否生效,可以使用model_stat()函数打印每一层的性能。

NNoM的评估工具

NNoM提供了多种评估方法来可视化固定点模型的性能,包括:

  1. 模型结构信息(由model_compile()打印)
  2. 运行时统计信息(由model_stat()打印)
  3. Top-K准确率、混淆矩阵等(由prediction_*() API提供)

这些工具可以帮助开发人员快速评估模型在MCU上的性能,并进行针对性的优化。

结语

NNoM为嵌入式开发人员提供了一个强大而易用的工具,大大简化了将复杂神经网络部署到MCU的过程。通过提供高级抽象和丰富的评估工具,NNoM使得在资源受限的MCU上运行先进的神经网络模型成为可能。无论是对于初学者还是有经验的嵌入式开发人员,NNoM都是一个值得尝试的优秀工具。

相关项目

Project Cover
Machine-Learning-Flappy-Bird
该项目利用神经网络和遗传算法,实现了Flappy Bird游戏中小鸟的智能控制。项目采用HTML5、Phaser框架和Synaptic神经网络库,详细介绍了神经网络架构及基于进化算法的训练过程,包括选择、交叉和变异操作。通过该教程,用户可以学习如何创建并优化AI模型,使小鸟更好地避开障碍物。
Project Cover
nnom
NNoM 是为微控制器设计的高层次神经网络推理库,支持如 Inception、ResNet 和 DenseNet 等复杂结构,可一键部署 Keras 模型并提供用户友好的界面。其高性能后端选择和预编译功能确保了运行时零损耗,同时提供完整的评估工具如运行时分析和混淆矩阵。最新的 v0.4.x 版本新增了循环层(RNN)支持,并切换到更适合机器处理的结构化接口。与 TensorFlow Lite 和 STM32Cube.AI 的对比显示,NNoM 在推理时间和内存占用方面表现出色。
Project Cover
Neural-Network-Architecture-Diagrams
本项目使用diagrams.net(也叫draw.io)生成神经网络模型图,帮助用户直观理解不同的神经网络结构。涵盖YOLO v1、VGG-16、Autoencoder等实例,并欢迎贡献新的架构图。无论是初学者还是研究人员,皆可受益于提供的可视化示例。点击查看更多详情,了解如何分享架构图。
Project Cover
bumblebee
Bumblebee提供基于Axon的预训练神经网络模型,并集成Hugging Face模型,使机器学习任务变得简单。用户可通过Livebook和Phoenix轻松部署模型,支持CPU和GPU加速。其可加载和配置多种模型,在端到端的机器学习流水线中使用。官方文档和示例代码帮助用户深入了解Bumblebee的强大功能和实际应用。

最新项目

Project Cover
豆包MarsCode
豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。
Project Cover
AI写歌
Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。
Project Cover
商汤小浣熊
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。
Project Cover
有言AI
有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。
Project Cover
Kimi
Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。
Project Cover
吐司
探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。
Project Cover
SubCat字幕猫
SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。
Project Cover
AIWritePaper论文写作
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。
Project Cover
稿定AI
稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。
投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号