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 擴充功能支援 float16bfloat16 資料類型。
  • 記憶體高效:包含最佳化措施,透過將常數張量標記為 const,使其保留在快閃記憶體中,從而減少 RAM 使用量。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案