HPM6750边缘AI框架运行实测与TFLM基准测试
如果您关注嵌入式AI领域的开发,一定听说过TensorFlow——谷歌开源的机器学习框架,它同时支持模型训练与推理。但今天我们要聊的是它的一个特殊分支:TensorFlow Lite for Microcontrollers,简称TFLM。 先理清几个关键概念。TensorFlow Lite(TFL
如果您关注嵌入式AI领域的开发,一定听说过TensorFlow——谷歌开源的机器学习框架,它同时支持模型训练与推理。但今天我们要聊的是它的一个特殊分支:TensorFlow Lite for Microcontrollers,简称TFLM。
先理清几个关键概念。TensorFlow Lite(TFLite)是谷歌为将模型部署到手机、平板等移动设备而推出的轻量级方案,可以理解为“手机版TensorFlow”。而TFLM则是TFLite的微控制器版本,专门针对内存仅有几千字节的单片机设计。它不依赖操作系统,不需要标准C/C++库,甚至无需动态内存分配。官方数据显示,在Cortex M3上,核心运行时仅需16KB,再加上一个语音关键词检测模型也不过22KB。这三者的关系可以想象成一棵树:TensorFlow是主干,TFLite是分支,而TFLM则是分支上的细枝。如今它们并行发展,但很长一段时间内代码都存放在同一个仓库——TensorFlow包含后两者,TFLite又包含TFLM。
那么,TFLM在HPM6750上如何运行?HPM SDK已经为我们做了不少准备工作。
HPM SDK中的TFLM
TFLM中间件
HPM SDK集成了TFLM中间件,位于 hpm_sdk/middleware 子目录。该目录的代码是从TFLM开源项目裁剪而来,删除了大量无关文件,仅保留最核心的运行部分。

TFLM示例
SDK还提供了示例代码,位于 hpm_sdk/samples/tflm 子目录。该示例基于官方的person_detection示例改造,增加了摄像头采集和LCD显示功能。但由于手头缺少配套的摄像头和显示屏,这里就不以此示例进行演示了。

换一个思路,直接运行TFLM的基准测试(benchmark)——person detection benchmark,效果更加直观。
在HPM6750上运行TFLM基准测试
将person detection benchmark源代码添加到HPM SDK环境
按照以下步骤操作:
- 在HPM SDK的
samples子目录下创建tflm_person_detect_benchmark目录,并在其中创建src目录。 - 从已经运行过person detection benchmark的tflite-micro目录中,拷贝以下文件到
src目录:tensorflow/lite/micro/benchmarks/person_detection_benchmark.cctensorflow/lite/micro/benchmarks/micro_benchmark.htensorflow/lite/micro/examples/person_detection/model_settings.htensorflow/lite/micro/examples/person_detection/model_settings.cc
- 在
src目录下创建testdata子目录,并将tflite-micro目录下tensorflow/lite/micro/tools/make/gen/linux_x86_64_default/genfiles/tensorflow/lite/micro/examples/person_detection/testdata中的文件全部拷贝到testdata中。 - 修改
person_detection_benchmark.cc、model_settings.cc、no_person_image_data.cc、person_image_data.cc文件中部分#include预处理指令的文件路径(根据拷贝后的相对路径修改)。 - 在
person_detection_benchmark.cc文件的main函数开头添加一行board_init();,并在文件顶部添加#include "board.h"。
添加CMakeLists.txt和app.yaml文件
在 src 同级目录下创建 CMakeLists.txt,内容如下:
cmake_minimum_required(VERSION 3.13)
set(CONFIG_TFLM 1)
find_package(hpm-sdk REQUIRED HINTS $ENV{HPM_SDK_BASE})
project(tflm_person_detect_benchmark)
set(CMAKE_CXX_STANDARD 11)
sdk_app_src(src/model_settings.cc)
sdk_app_src(src/person_detection_benchmark.cc)
sdk_app_src(src/testdata/no_person_image_data.cc)
sdk_app_src(src/testdata/person_image_data.cc)
sdk_app_inc(src)
sdk_ld_options("-lm")
sdk_ld_options("--std=c++11")
sdk_compile_definitions(__HPMICRO__)
sdk_compile_definitions(-DINIT_EXT_RAM_FOR_DATA=1)
# sdk_compile_options("-mabi=ilp32f")
# sdk_compile_options("-march=rv32imafc")
sdk_compile_options("-O2")
# sdk_compile_options("-O3")
set(SEGGER_LEVEL_O3 1)
generate_ses_project()
再创建 app.yaml 文件,内容如下:
dependency:
- tflm
编译和运行TFLM基准测试
接下来进入熟悉的编译运行流程。首先使用命令生成项目:

将HPM6750开发板连接至PC,在Embedded Studio中打开刚刚生成的项目:

由于引入了TFLM的源码,文件数量较多,右侧源码导航窗的Indexing需要等待一段时间才能完成。之后按F7编译,再按F5开始调试:

编译完成后,打开串口终端(波特率115200),启动调试并继续运行,即可看到基准测试的输出结果:
==============================
hpm6750evkmini clock summary
==============================
cpu0: 816000000Hz
cpu1: 816000000Hz
axi0: 200000000Hz
axi1: 200000000Hz
axi2: 200000000Hz
ahb: 200000000Hz
mchtmr0: 24000000Hz
mchtmr1: 1000000Hz
xpi0: 133333333Hz
xpi1: 400000000Hz
dram: 166666666Hz
display: 74250000Hz
cam0: 59400000Hz
cam1: 59400000Hz
jpeg: 200000000Hz
pdma: 200000000Hz
==============================
----------------------------------------------------------------------
$$ $$ $$$$$$$ $$ $$ $$
$$ | $$ |$$ __$$ $$$ $$$ |__|
$$ | $$ |$$ | $$ |$$$$ $$$$ |$$ $$$$$$$ $$$$$$ $$$$$$
$$$$$$$$ |$$$$$$$ |$$$$$$ $$ |$$ |$$ _____|$$ __$$ $$ __$$
$$ __$$ |$$ ____/ $$ $$$ $$ |$$ |$$ / $$ | __|$$ / $$ |
$$ | $$ |$$ | $$ |$ /$$ |$$ |$$ | $$ | $$ | $$ |
$$ | $$ |$$ | $$ | _/ $$ |$$ |$$$$$$$ $$ | $$$$$$ |
__| __|__| __| __|__| _______|__| ______/
----------------------------------------------------------------------
InitializeBenchmarkRunner took 114969 ticks (4 ms).
WithPersonDataIterations(1) took 10694521 ticks (445 ms)
DEPTHWISE_CONV_2D took 275798 ticks (11 ms).
DEPTHWISE_CONV_2D took 280579 ticks (11 ms).
CONV_2D took 516051 ticks (21 ms).
DEPTHWISE_CONV_2D took 139000 ticks (5 ms).
CONV_2D took 459646 ticks (19 ms).
...
NoPersonDataIterations(1) took 10694160 ticks (445 ms)
...
WithPersonDataIterations(10) took 106960312 ticks (4456 ms)
NoPersonDataIterations(10) took 106964554 ticks (4456 ms)
从输出日志可以看出,在HPM6750EVKMINI开发板上,连续运行10次人像检测模型,总耗时4456毫秒,平均每次耗时445.6毫秒。
在树莓派3B+上运行TFLM基准测试
作为对比,我们在树莓派3B+上运行相同的基准测试。在树莓派上可以直接使用PC端的测试命令,得到如下结果:

可以看到,对于包含人脸的图片,连续运行10次平均耗时418.6毫秒;对于不包含人脸的图片,平均耗时419毫秒。
HPM6750与树莓派3B+、AMD R7 4800H的对比
将HPM6750EVKMINI、树莓派3B+和AMD R7 4800H上运行人脸检测模型的平均耗时汇总如下:

有趣的是,在TFLM人脸检测模型场景下,HPM6750EVKMINI和树莓派3B+表现相当。尽管HPM6750主频为816MHz,远低于树莓派3B+的BCM2837 Cortex-A53 1.4GHz,但单核计算能力并未拉开明显差距。
需要说明的是,树莓派上的测试运行在64位Debian Linux系统上,而HPM6750运行在裸机环境中。操作系统的任务调度器会带来一定的性能损耗,因此这一对比并非严格意义上的公平对比,仅作为参考之用。
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:HPM6750边缘AI框架运行实测与TFLM基准测试要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点Diatech aiAnalytics为钻石行业提供一站式数据解决方案,覆盖供应商、零售商和品牌商。通过钻石数据分析、价格指数、供应链及客户行为分析等功能,帮助从业者把握市场动态、预判价格趋势、优化营销定位。
滴答清单是一款功能全面的时间管理应用,支持待办提醒、日历视图、四象限、番茄钟、习惯打卡及团队协作,并具备自然语言智能识别和多端实时同步能力,适合个人与团队高效规划任务。
Hypesaga面向作家、编剧、游戏开发者等故事创作者,利用AI生成故事概念、情节、角色及游戏剧情,覆盖从灵感到成品的创作链条关键环节,提供灵活定制化的差异化内容,助力高效产出独特故事。
高通为骁龙XElite平台开放AIHub,提供针对HexagonNPU优化的预训练模型,覆盖图像分类、对象检测、生成式AI等场景,并附工具与文档,助力开发者快速构建智能应用,旨在催生AI应用生态以应对市场竞争。
- 日榜
- 周榜
- 月榜
热点快看
