MADL!AR
Code is cheap, show me the PPT!
首页
分类
Fragment
关于
使用CMSIS-NN加速MicroSpeech推理
分类:
硬件
发布于: 2025-04-18
此前将micro_speech部署在STM32H753上时,采用了通用代码并添加了几乎所有优化手段,最佳推理耗时达到51ms。起初因担心增加部署难度而未使用CMSIS-NN,但实际使用后发现其部署流程与通用代码完全一致,并未引入额外操作。 采用STM32H7A3VIT6再此验证一下。 #### 1. 创建工程 工程命名为H7A3_MicroSpeech_NN,Template Language 选择C++,配置外部时钟,配置调试串口。同此前一样,选择release模式,创建External文件夹并将用户```inner_main.c```等文件及Path加入。 #### 2. 移植TFLite文件 执行 ``` python tensorflow/lite/micro/tools/project_generation/create_tflm_tree.py --makefile_options="TARGET=cortex_m_generic TARGET_ARCH=cortex-m7 OPTIMIZED_KERNEL_DIR=cmsis_nn" --example="micro_speech" ../gen_micro_speech_nn ``` 将```gen_micro_speech_nn```文件夹放在```External```之下,在```gen_micro_speech_nn/examples/micro_speech```下编写推理接口,以供```inner_main```调用。 在```Path and Symbols```的```Includes```选项卡中,为```GNU C```和```GNU C++```添加以下配置: ``` External/gen_micro_speech_nn/third_party/kissfft External/gen_micro_speech_nn/third_party/cmsis_nn External/gen_micro_speech_nn/third_party/cmsis_nn/Include External/gen_micro_speech_nn External/gen_micro_speech_nn/third_party/flatbuffers/include External/gen_micro_speech_nn/third_party/gemmlowp External/gen_micro_speech_nn/examples/micro_speech ``` 在```Symbols```中添加定义: ``` CMSIS_NN TF_LITE_STATIC_MEMORY CMSIS_DEVICE_ARM_CORTEX_M_XX_HEADER_FILE="stm32h7xx.h" ``` 最后在properties -> C/C++ build -> Settings -> MCU/MPU G++ Compiler -> Miscellaneous,点击Add 按钮添加 flag "-std=c++17"。 #### 3. 性能测试 直接执行,耗时31ms。下面进行多次测试: | I-Cache | D-Cache | -O3 | 禁用debug |耗时ms | |-------|-------|-------|-------|-------| | × | × | × | × | 31 | | × | × | √ | × | 22 | | × | × | √ | √ | 22 | | √ | × | √ | × | 12 | | √ | √ | √ | × | 4 | 其中禁用debug包括在.ioc文件中禁用debug接口,同时在“G++ Complier”中移除```-fno-rtti -fno-exceptions```参数,重新生成代码编译运行。事实证明这一步操作几乎没有优化。 另外,对```GenerateSingleFeature```进行测试,验证发现预处理模型单次推理耗时近1ms左右,符合预期。