新闻详情

新闻详情

首页 / 资讯中心 / 详情

TFLM_day7

发布时间:2026/9/29 9:37:57来源:尧图网络
TFLM_day7
轻松学习 TFLM Day 7:把.tflite模型接到 TFLM 示例里摘要:本文以 TFLM 仓库自带的hello_world示例为入口,完整演示如何把一个.tflite模型接入 TFLM 并完成一次真实推理。内容涵盖:模型接入的完整链路、.tflite转 C 数组的三种方式(Bazel 规则、命令行脚本、手动生成)及验证方法、最小接入代码、完整可编译示例、int8 量化模型的输入量化与输出反量化、Bazel 模型规则配置、常见报错定位,以及面向 AI 芯片的接入检查清单。核心思路是:先把模型编译成 C 数组,再通过GetModel→MicroMutableOpResolver→MicroInterpreter→AllocateTensors→Invoke完成推理,并强调「先 host 后硬件」的调试顺序。Day 6 我们已经知道如何从模型找出需要注册的 op。今天继续做完整实战:把一个.tflite模型放进 TFLM 示例,让它完成一次真实推理。本章以仓库自带的hello_world为入口。它的结构简单,适合先在 macOS/Linux host 上验证,再迁移到 MCU、DSP 或 NPU 平台。1. 模型接入的完整链路TFLM 不能直接把文件路径传给MicroInterpreter。嵌入式程序通常需要把.tflite内容编译成 C/C++ 数组:my_model.tflite | | Bazel generate_cc_arrays v my_model_data.cc + my_model_data.h | v const unsigned char g_my_model_data[] | | tflite::GetModel(...) v MicroInterpreter | v AllocateTensors - 写入输入 - Invoke - 读取输出除了模型本身,还必须准备:内容作用op resolver给模型中的每种 op 找到 registration。tensor arena保存 tensor、OpData 和 scratch buffer。输入转换把应用数据转换成模型需要的类型和量化格式。输出转换把模型输出转换成应用可以理解的结果。构建规则把模型数组、示例代码和 TFLM runtime 链接起来。2. 先选择一个具体模型本文使用仓库中的:tensorflow/lite/micro/examples/hello_world/models/hello_world_float.tflite它的模型特点是:输入:float32,单个数值 输出:float32,单个数值 op:FULLY_CONNECTED对应 resolver:tflite::MicroMutableOpResolver1resolver;resolver.AddFullyConnected();如果你要接入自己的模型,先把下面的路径替换成自己的.tflite文件,并按 Day 6 的方法重新分析 op。3.1 从 .tflite 到 C 数组的完整转换步骤上一节介绍了generate_cc_arrays的 Bazel 规则,这一节我们把它拆开,看看一个.tflite文件到底是怎么变成 C 数组的,以及如何验证转换结果。3.1.1 官方转换工具TFLM 仓库提供了两种方式把.tflite转成 C 数组:方式一:Bazel 规则(推荐,集成到构建系统)在models/BUILD中声明generate_cc_arrays,构建时自动生成:generate_cc_arrays(name="generated_my_model_cc",src="my_model.tflite",out="my_model_data.cc",)generate_cc_arrays(name="generated_my_model_hdr",src="my_model.tflite",out="my_model_data.h",)方式二:命令行工具(适合快速验证)TFLM 仓库提供了独立的转换脚本,可以直接在终端运行:# 从 tflite-micro 仓库根目录执行python tensorflow/lite/micro/tools/convert/convert_to_cc_source.py\--input=my_model.tflite\--output=my_model_data.cc\--output_header=my_model_data.h\--namespace=tflite如果你不想依赖仓库脚本,也可以用xxd或 Python 手动生成:# 用 xxd 生成 C 数组(Linux/macOS)xxd-imy_model.tflitemy_model_data.cc# 用 Python 生成 C 数组(跨平台)withopen("my_model.tflite","rb")asf:data=f.read()withopen("my_model_data.cc","w")asf:f.write("const unsigned char g_my_model_data[] = {\n")foriinrange(0,len(data),12):chunk=data[i:i+12]f.write(" "+", ".join(f"0x{b:02x}"forbinchunk)+",\n")f.write("};\n")f.write(f"const unsigned int g_my_model_data_len ={len(data)};\n")3.1.2 生成文件的格式说明generate_cc_arrays会生成两个文件:my_model_data.cc—— 包含模型字节数组:// 由 generate_cc_arrays 自动生成,不要手工编辑constunsignedcharg_my_model_data[]={0x1c,0x00,0x00,0x00,0x54,0x46,0x4c,0x33,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ... 更多字节};constunsignedintg_my_model_data_len=12345;my_model_data.h—— 声明数组供其他文件引用:// 由 generate_cc_arrays 自动生成,不要手工编辑#ifndefTENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MODELS_MY_MODEL_DATA_H_#defineTENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MODELS_MY_MODEL_DATA_H_externconstunsignedcharg_my_model_data[];externconstunsignedintg_my_model_data_len;#endif// TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MODELS_MY_MODEL_DATA_H_关键点:数组名g_my_model_data由out参数推导,实际名称以生成文件为准。数组类型固定为unsigned char,每个元素是一个字节。g_my_model_data_len记录模型文件的总字节数,可用于校验。3.1.3 验证生成的数组与原始模型一致转换后一定要验证,避免数组损坏导致运行时崩溃。有三种验证方式:方式一:比较文件大小# 原始 .tflite 文件大小ls-lmy_model.tflite# 生成数组声明的长度grep"g_my_model_data_len"my_model_data.cc两者应该完全一致。方式二:用 Python 校验字节内容importre# 读取原始模型withopen("my_model.tflite","rb")asf:original=f.read()# 从生成的 .cc 文件中提取数组withopen("my_model_data.cc","r")asf
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

RL-10-赵-Actor-Critic01-在线算法01:QAC【Actor:Policy函数拟合算法】【Critic:Sarsa算法】【π>0,具有探索性】【Q表示action value】 2026/9/29 10:42:54

RL-10-赵-Actor-Critic01-在线算法01:QAC【Actor:Policy函数拟合算法】【Critic:Sarsa算法】【π>0,具有探索性】【Q表示action value】

我们知道基于Monte-Carlo的Policy Gradient算法如下图所示: 我们将估计action values的方法换成“Temporal-difference learning”,现在给出第一个Actor-Critic算法:QAC

阅读更多 →
阿里AI Agent一面复盘:反问拿捏面试官(含LangChain/Multi-Agent/A2A/MCP面试全解) 2026/9/29 10:42:41

阿里AI Agent一面复盘:反问拿捏面试官(含LangChain/Multi-Agent/A2A/MCP面试全解)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
量化求真11|设了回撤线,为什么还能继续亏? 2026/9/29 10:42:02

量化求真11|设了回撤线,为什么还能继续亏?

前言|一个容易被误读的“停止线” 研究者给策略设了10%的回撤停止线,以为账户最多亏到这里。某天收盘,净值已经跌到线下;系统安排次日减仓,第二天却遇到跳空。卖出之前,账户继续下跌。看着超过10%的实际回…

阅读更多 →
MEMS传感器芯片前沿:低功耗振荡器、MEMS振镜与压感原理 2026/9/29 10:42:02

MEMS传感器芯片前沿:低功耗振荡器、MEMS振镜与压感原理

做嵌入式硬件这行,MEMS传感器芯片几乎每天都在接触。手机里的加速度计、汽车里的胎压计、扫地机里的陀螺仪、激光雷达里的MEMS振镜、智能手表里的MEMS振荡器,说白了都是同一套微米级机械结构在干活。2025到2026年这个时间窗口,整个行业明显不…

阅读更多 →
2026 AI 论文工具排行榜|按「投入产出效率」专项测评 2026/9/29 10:41:55

2026 AI 论文工具排行榜|按「投入产出效率」专项测评

挑选 AI 论文工具,很多同学容易盲目跟风,只看能不能生成文字,忽略时间成本、学习成本、配套功能。本次榜单以投入产出效率作为核心评判标准,同样的毕设任务,哪个工具花费时间更少、配套功能更全、踩坑风险更低&#xf…

阅读更多 →
帆软7.0使用手册 2026/9/29 10:41:55

帆软7.0使用手册

一、相关术语了解1.ERP:企业资源计划系统 2.宽维度表:字段较多,包含较多描述属性的维度表 指标:需要计算或观察的业务数值 维度:观察指标的角度 3.OLTP 和 OLAP 是架构思想/系统类型 OLTP(联机事务处理&am…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉