硬汉嵌入式论坛

 找回密码
 立即注册
搜索
查看: 6360|回复: 9
收起左侧

[DSP] Arm与TensorFlow合作,开发了TensorFlow Lite内核的优化版本

[复制链接]

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
124425
QQ
发表于 2021-2-11 08:33:04 | 显示全部楼层 |阅读模式
回复

使用道具 举报

1

主题

122

回帖

125

积分

初级会员

积分
125
发表于 2021-2-12 23:35:28 | 显示全部楼层
这个好,很有意义。
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
124425
QQ
 楼主| 发表于 2021-2-13 00:08:55 | 显示全部楼层
hexenzhou 发表于 2021-2-12 23:35
这个好,很有意义。

是的,后面应该会不断精进。
回复

使用道具 举报

0

主题

12

回帖

12

积分

新手上路

积分
12
发表于 2022-5-30 11:10:43 | 显示全部楼层
硬汉哥请问STM32F405支持TensorFlow Lite吗
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
124425
QQ
 楼主| 发表于 2022-5-30 15:45:58 | 显示全部楼层
2522428130 发表于 2022-5-30 11:10
硬汉哥请问STM32F405支持TensorFlow Lite吗

没问题。
回复

使用道具 举报

13

主题

48

回帖

87

积分

初级会员

积分
87
发表于 2022-11-13 22:16:41 | 显示全部楼层

运行速度如何,运行耗时太大就没有多大意义。
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
124425
QQ
 楼主| 发表于 2022-11-14 02:15:36 | 显示全部楼层
终极菜鸟 发表于 2022-11-13 22:16
运行速度如何,运行耗时太大就没有多大意义。

他们有实际性能测试表,上他们官网找下。
回复

使用道具 举报

8

主题

32

回帖

56

积分

初级会员

积分
56
发表于 2026-7-20 15:09:15 | 显示全部楼层
硬汉哥,tensorflow lite 这个模型应用到F407上有详细步骤参考学习一下吗
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
124425
QQ
 楼主| 发表于 2026-7-23 10:06:25 | 显示全部楼层
渡渡M 发表于 2026-7-20 15:09
硬汉哥,tensorflow lite 这个模型应用到F407上有详细步骤参考学习一下吗

这个我还没有研究过
回复

使用道具 举报

8

主题

32

回帖

56

积分

初级会员

积分
56
发表于 2026-7-23 15:51:00 | 显示全部楼层
这是我整理的TensorFlow Lite Micro(TFL微版)完整部署全流程:

环境:Windows 10/11 + STM32F407ZG
目标:PC 上 Python 训练模型 → 转为 TFLite → 生成 TFLite Micro 可执行 C 数组模型 → 移植到 STM32 裸机 / RTOS 工程,MCU 实时推理。
TFLM 官方不支持 Windows 原生编译,模型转换在 Windows Python 完成;MCU 侧 TFLM 源码直接纳入 Keil/STM32CubeIDE 工程编译。

一、Windows PC 需要安装全部软件清单
1. Python 环境(模型训练、转换核心):推荐版本:Python 3.8 ~ 3.10(太高版本 TensorFlow 兼容性差)
2. STM32 开发工具(二选一)
方案 A:STM32CubeIDE(免费,推荐)官网下载 1.10~1.13 版本,自带 GCC 编译器,无需 Keil
方案 B:Keil MDK-ARM 5.37+,需要 STM32F4 器件支持包;注意:TFLM 大量 C++ 代码,Keil 必须开启 C++ 支持。
3. 辅助工具
- Git for Windows:拉取 TFLite Micro 源码
- STM32CubeMX:生成 STM32F407 底层初始化工程(时钟、串口、ADC、DMA 等)
- ST-LINK 驱动:下载程序到开发板
4. 获取 TensorFlow Lite Micro 源码(核心!)
二、略、
三、阶段 1:PC Python 数据集准备 + 模型训练
3.1 数据集形式:一维数据,数据集格式:csv 文件每行:特征 1, 特征 2, 特征 3... ,
数据集来源:
1.自己采集 MCU 传感器数据,串口上传 PC 保存 csv
2.公开数据集:UCI 传感器数据集、MNIST 手写数字 (28×28 灰度,经典入门)
3.2 Keras 训练模型完整示例:新建 train_model.py,运行:python train_model.py,本阶段生成物:mnist_model.h5
四、阶段 2:.h5模型转换为 .tflite(浮点 / INT8 量化)
方式 A:浮点模型(简单,速度慢,RAM 占用高,不推荐 F407 长期使用)
方式 B:INT8 全量化【强烈推荐 STM32F407!】MCU 没有硬件 FPU 浮点加速时,int8 推理速度提升 3~10 倍,Flash 占用更小。
新建脚本 convert_tflite.py,运行脚本得到:model_int8.tflite,当前阶段产物model_float.tflite / model_int8.tflite 二进制模型文件
五、阶段 3:.tflite 文件转为 C数组(最重要一步)
MCU 不能直接读取外部 bin 文件,必须把模型编译进 Flash,转换成头文件数组。
方法 1:Windows 下使用 python 脚本转换(最简单,不用命令行工具)
generate_model_header.py运行后输出 model.h,产物:model.h,直接拷贝进 STM32 工程。
六、阶段 4:STM32F407 工程搭建 + 移植 TFLM 源码
6.1 使用 STM32CubeMX 生成基础工程,TFLM 推理时需要内存缓冲区,栈太小直接 HardFault!
TFLM 主体是 C++ 代码,开启工程 C++ 编译支持,main.c 如果调用 TFLM 函数,需要使用 extern "C" 包裹接口。
6.2 筛选需要导入工程的 TFLM 源码文件:从tensorflow/tensorflow/lite/micro/ 复制下列目录到你的 STM32 工程目录,命名 tflite_micro需要包含:
tensorflow/
├─ lite/
   ├─ micro/          # 核心micro接口
   ├─ c/              # flatbuffer解析代码
   ├─ core/           # tflite基础结构
   ├─ kernels/        # 算子实现(conv,dense,maxpool等)
   ├─ schema/         # flatbuffer模型解析头文件
必须添加的头文件路径(工程 Include Path)
../tflite_micro
../tflite_micro/tensorflow
../tflite_micro/tensorflow/lite
../tflite_micro/tensorflow/lite/micro
6.3 TFLM 最重要概念:张量内存缓冲区(Arena)
TFLM 不在堆动态 malloc!所有推理中间变量放在一块预先分配连续内存 Tensor ArenaSTM32F407ZG RAM 只有 192KB,Arena 大小必须精准估算。示例定义:       Arena 太小 → 初始化解释器直接失败,推理崩溃。
// 放在全局区(不要定义在函数栈里!栈空间很小)
#define TENSOR_ARENA_SIZE 60*1024  // 60KB,根据模型调整
uint8_t tensor_arena[TENSOR_ARENA_SIZE];
七、阶段 5:MCU 推理主代码编写(完整可参考框架)
把前面生成的 model.h 复制到工程 Inc/新建 tflm_inference.cpp(C++ 文件)
在 main.c 调用(注意 extern C)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-10-24 09:44 , Processed in 0.376738 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表