kraiskil/onnx2c
Open Neural Network Exchange to C compiler.
解决的问题
Onnx2c 是一个将 ONNX 模型转换为纯 C 代码的编译器,使在微控制器(TinyML)上执行神经网络推理成为可能。它消除了对重型运行时库或动态内存分配的依赖,这些通常对嵌入式系统来说资源过于受限。
工作原理
该工具读取 ONNX 文件并生成一个包含模型逻辑和权重的单一 C 文件。为确保与微控制器的兼容性,它使用编译时缓冲区分配,并避免使用 stdio.h 等标准 I/O 库。它包含优化步骤,例如张量合并以重用内存,以及针对 AVR 处理器的特定优化,将常量存储在指令内存中。
适用人群
需要在微控制器和嵌入式系统上运行训练好的神经网络(从 PyTorch 或 TensorFlow 等框架导出)但又不想承担完整 ML 运行时开销的开发者。
主要亮点
- 零动态分配:使用编译时缓冲区,避免小型设备上的堆碎片化和崩溃。
- C 标准兼容:仅需标准 C 数学库,可在不同 C 编译器之间高度移植。
- TinyML 优化:生成单个 C 文件,便于集成到现有嵌入式项目中。
- 对称支持:通过 GCC 和 Clang 扩展支持
float16和bfloat16数据类型。 - 内存高效:包含优化措施,通过将常量张量标记为
const,使其保留在闪存中,从而减少 RAM 使用量。
相关
- 项目
- 项目
- 项目
- 项目
- 项目