ZHDA204A June   2026  – October 2026 MSPM0G5187

 

  1.   1
  2.   摘要
  3.   商标
  4. 1 简介
  5. 2 带 TinyEngine NPU 的 MSPM0G5187
  6. 3 边缘 AI 工具链
    1. 3.1 TI Edge AI Studio
    2. 3.2 TI Tiny ML Tensorlab
    3. 3.3 TI 神经网络编译器
  7. 4 通过 TI Edge AI Studio 进行快速原型设计
    1. 4.1 工程设置
    2. 4.2 数据采集
      1. 4.2.1 硬件设置
      2. 4.2.2 特征概述
    3. 4.3 数据导入
      1. 4.3.1 分类任务
      2. 4.3.2 回归任务
      3. 4.3.3 预测任务
      4. 4.3.4 注释列表
    4. 4.4 数据注释
    5. 4.5 模型训练
      1. 4.5.1 训练参数
      2. 4.5.2 工具链依赖项
    6. 4.6 性能报告
    7. 4.7 模型导出
  8. 5 通过 TI Tiny ML Tensorlab 进行高级开发
    1. 5.1 环境设置
    2. 5.2 数据采集
      1. 5.2.1 数据检索
      2. 5.2.2 数据验证
    3. 5.3 模型架构迭代重构
      1. 5.3.1 基线实现
      2. 5.3.2 使用 PyTorch 内置模块进行重构
      3. 5.3.3 数据管道优化
      4. 5.3.4 过渡到 CNN 架构
    4. 5.4 模型导出
    5. 5.5 量化感知训练
    6. 5.6 模型编译
  9. 6 边缘 AI 应用:数字识别
    1. 6.1 LeNet-5 变体 CNN 模型
    2. 6.2 NPU/CPU 性能比较
  10. 7 边缘 AI 应用:波形分类器
    1. 7.1 特征提取
    2. 7.2 时序分类模型
    3. 7.3 模型内存注意事项
    4. 7.4 NPU/CPU 性能比较
  11. 8 总结
  12. 9 参考资料
  13. 10修订历史记录

模型编译

模型经过训练并导出为 ONNX 格式后,开发生命周期的最后一步是编译。此过程可将高级 ONNX 计算图转换为针对目标微控制器 (MCU) 进行优化的机器可读代码。

TI 神经网络编译器 (NNC) 用于弥合通用 ONNX 模型与嵌入式器件之间的差距。NNC 根据您的项目要求将模型转换为两种主要部署格式之一:

  • 静态库 (.a):使用交叉编译器(例如 tiarmclang)将该模型编译到静态库中。这是标准生产方法,其中该库直接链接到 Code Composer Studio™ (CCS) 项目中。
  • 源代码包 (.tar):该模型被解压缩到人类可读的 C 源文件中。此方法非常适合深度检查生成的内核或限制直接链接二进制文件的环境。此模式在编译阶段不需要外部交叉编译器。

输出文件结构

编译器生成的输出文件遵循标准化的目录结构:

root_path/
├── lib0.c                # Optimized source code lib0
├── lib1.c                # Optimized source code lib1
├── lib2.c                # Optimized source code lib2
├── mod.a                 # Compiled static library file (Link this to CCS)
└── tvmgen_default.h      # C header file containing inference function signatures

命令行界面 (CLI)

对于高级用户,tvmc 命令行界面提供了对编译过程的精细控制。有关详细文档,请参阅 TI MCU 神经网络编译器用户指南:编译说明。

要将 ONNX 模型编译为 MSPM0 (Cortex-M0+) 目标的静态库,请在终端中执行以下命令:

tvmc compile \
    --target="c, ti-npu skip_normalize=true output_int=true" \
    --target-c-mcpu=cortex-m0plus \
    .\model.onnx \
    -o artifacts_m0/mod.a \
    --cross-compiler="tiarmclang" \
    --cross-compiler-options="-Os -mcpu=cortex-m0plus -march=thumbv6m -mtune=cortex-m0plus -mthumb -mfloat-abi=soft -I. -Wno-return-type"

示例脚本

下载 Tiny ML 工作流程示例 Python 脚本包,并使用其中包含的“10_test_cnn_quan_compile_npu_lib.py”脚本。该脚本围绕 tvmc 命令行界面提供了一个通用封装器。该脚本使开发人员能够轻松管理目标特定编译器标志。

使用终端执行脚本后,通过监测日志来验证训练进度:

================================================================
Output Mode    : LIB
Target Device  : MSPM0 (cortex-m0plus)
NNC Target     : c, ti-npu skip_normalize=true output_int=true
Input Model    : C:\ti\tinyml-tensorlab\UserTestFolder\model\mnist\mnist_model_int8.onnx
Output Dir     : C:\ti\tinyml-tensorlab\UserTestFolder\model\mnist\outputLib
================================================================
WARNING:ti_mcu_nnc:GCONV layer NOT offloaded to TI-NPU
WARNING:ti_mcu_nnc:GCONV layer config: 8-bit input [9, 9, 16], 8-bit output [4, 4, 10], 8-bit kernel [3, 3], strides [2, 2], padding [(0, 0), (0, 0)], data layout NHWC, kernel layout HWIO
WARNING:ti_mcu_nnc:GCONV does not support 10 output channels. Please change to multiples of 4.
WARNING:ti_mcu_nnc:AVGPOOL layer NOT offloaded to TI-NPU
WARNING:ti_mcu_nnc:Global AVGPOOL layer config:8-bit input [4, 4, 10], 8-bit output [10]
WARNING:ti_mcu_nnc:Global AVGPOOL does not support 10 input channels. Please change to multiples of 4.
INFO:ti_mcu_nnc: ============================================================
INFO:ti_mcu_nnc: TI NPU Offloading Report
INFO:ti_mcu_nnc: ============================================================
INFO:ti_mcu_nnc: 
INFO:ti_mcu_nnc: LAYER/OPERATOR COUNT SUMMARY
INFO:ti_mcu_nnc: ============================================================
INFO:ti_mcu_nnc:
INFO:ti_mcu_nnc: Layer Patterns Offloaded
INFO:ti_mcu_nnc: ------------------------------------------------------------
INFO:ti_mcu_nnc: Layer Pattern                                    Count     
INFO:ti_mcu_nnc: ------------------------------------------------------------
INFO:ti_mcu_nnc: FCONV                                            1         
INFO:ti_mcu_nnc: PAD                                              2         
INFO:ti_mcu_nnc: GCONV                                            1         
INFO:ti_mcu_nnc:
INFO:ti_mcu_nnc: Operators not Offloaded
INFO:ti_mcu_nnc: ------------------------------------------------------------
INFO:ti_mcu_nnc: Operator                                         Count     
INFO:ti_mcu_nnc: ------------------------------------------------------------
INFO:ti_mcu_nnc: reshape                                          1         
INFO:ti_mcu_nnc: nn.pad                                           2         
INFO:ti_mcu_nnc: qnn.conv2d                                       1         
INFO:ti_mcu_nnc: cast                                             4         
INFO:ti_mcu_nnc: nn.bias_add                                      1         
INFO:ti_mcu_nnc: multiply                                         2         
INFO:ti_mcu_nnc: right_shift                                      2         
INFO:ti_mcu_nnc: clip                                             2         
INFO:ti_mcu_nnc: sum                                              1         
INFO:ti_mcu_nnc: add                                              1         
INFO:ti_mcu_nnc:
INFO:ti_mcu_nnc: ============================================================
INFO:ti_mcu_nnc:
INFO:ti_mcu_nnc:
INFO:ti_mcu_nnc: MODEL PARTITION - TOPOLOGICAL VIEW
INFO:ti_mcu_nnc: ============================================================
INFO:ti_mcu_nnc: Layer/Operator                                   Offloaded 
INFO:ti_mcu_nnc: ------------------------------------------------------------
INFO:ti_mcu_nnc: Input
INFO:ti_mcu_nnc: reshape                                          [ ]       
INFO:ti_mcu_nnc: nn.pad                                           [ ]       
INFO:ti_mcu_nnc: nn.pad                                           [ ]       
INFO:ti_mcu_nnc: FCONV                                            [X]       
INFO:ti_mcu_nnc: PAD                                              [X]       
INFO:ti_mcu_nnc: GCONV                                            [X]       
INFO:ti_mcu_nnc: PAD                                              [X]       
INFO:ti_mcu_nnc: qnn.conv2d                                       [ ]       
INFO:ti_mcu_nnc: cast                                             [ ]       
INFO:ti_mcu_nnc: nn.bias_add                                      [ ]       
INFO:ti_mcu_nnc: multiply                                         [ ]       
INFO:ti_mcu_nnc: right_shift                                      [ ]       
INFO:ti_mcu_nnc: clip                                             [ ]       
INFO:ti_mcu_nnc: cast                                             [ ]       
INFO:ti_mcu_nnc: cast                                             [ ]       
INFO:ti_mcu_nnc: sum                                              [ ]       
INFO:ti_mcu_nnc: add                                              [ ]       
INFO:ti_mcu_nnc: multiply                                         [ ]       
INFO:ti_mcu_nnc: right_shift                                      [ ]       
INFO:ti_mcu_nnc: clip                                             [ ]       
INFO:ti_mcu_nnc: cast                                             [ ]       
INFO:ti_mcu_nnc: Output
INFO:ti_mcu_nnc: ============================================================
INFO:ti_mcu_nnc:
INFO:ti_mcu_nnc: ============================================================
INFO:ti_mcu_nnc: TI Model Library Memory Usage (mod.a)
INFO:ti_mcu_nnc: ============================================================
INFO:ti_mcu_nnc: Code:                      1952 bytes (    1.91 KB)
INFO:ti_mcu_nnc: RO Data:                   7061 bytes (    6.90 KB)
INFO:ti_mcu_nnc: RW Data:                   9540 bytes (    9.32 KB)
INFO:ti_mcu_nnc: Total:                    18553 bytes (   18.12 KB)
INFO:ti_mcu_nnc: ============================================================