0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将AI模型部署到嵌入式系统中

Linux阅码场 来源:Linuxer 2020-08-03 16:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本期我们分享主题是如何将 AI 模型部署到嵌入式系统中,下一期将介绍如何在 RT-Thread 操作系统上运行 Mnist Demo(手写数字识别)。

嵌入式关联 AI

AI落地一直是一个很红火的前景和朝阳行业。我的好奇心也比较旺盛,所以关于任何嵌入式和 AI 相关的都是想尝一尝。本系列文章将带你一步一步把 AI 模型部署在嵌入式平台,移植到 RT-Thread 操作系统上,实现你从菜鸟到起飞的第一步甚至第 n 步!

开发环境:

后续开发过程将基于 STM32H743ZI-Nucleo 开发板,并且使用 STM32CubeMX.AI 工具。它可以基于训练好的 AI Model (仅限 Keras/TF-Lite),自动生成嵌入式项目工程(包括但是不局限于 MDK、STM32CubeIDE 等)。该工具易于上手,适合嵌入式 AI 入门开发。

STM32CubeMX 是 ST 公司推出的一种自动创建单片机工程及初始化代码的工具,适用于旗下所有 STM32 系列产品,现在其 AI 组件可以提供 AI 模型到嵌入式 C 代码的转换功能。

1. 准备工作

1.1 安装开发环境

我是用的操作系统是 Ubuntu 18.04。本次实验要用到如下开发工具,软件的安装过程很简单,网上都有很成熟的教程,在此不再赘述。该篇教程同样适用于 Windows 环境,实验步骤完全相同。

STM32CubeMx

STM32CubeIDE

STM32CubeProgrammer

STM32CubeProgrammer 在 ubuntu 环境下使用可能会出现如下错误:

安装好之后,在终端执行安装包路径下的bin文件夹下的执行文件,会报错误:找不到或无法加载主类 “com.st.app.Main”,这时候只要将 Ubuntu 默认的 Open-JDK 换成 Oracle JDK 就好了,下面是切换成 Oracle JDK 成功的截图:

1# Oracle官网中下载 JavaSEJDK压缩包 2$sudotarzxvfjdk-8u172-linux-x64.tar.gz-C/usr/lib/jvm 3#将下载的JDK注册到系统中 4$sudoupdate-alternatives--install/usr/bin/javajava/usr/lib/jvm/jdk1.8.0_172/bin/java300 5#切换JDK 6$sudoupdate-alternatives--configjava 7#查看JDK版本 8$java-version

1.2 在 PC 端搭建极简神经网络

首先将如下开源仓库克隆到本地:

Github:https://github.com/Lebhoryi/Edge_AI/tree/master/Project1

在本次实验中我选择了最简单的一个线性回归(Linear Regression) Tensor Flow2 Demo 作为示例,模型相关源文件说明如下:

tf2_linear_regression.ipynb 内含三种不同方式搭建网络结构

tf2_线性回归_扩展.ipynb 内含不同方式训练模型

其中,在模型搭建的时候,重新温习了一下,有三种方式(各个方式的优缺点已经放在参考文章当中,感兴趣的同学自行查阅):

Sequence

函数式 API

子类

后面将 AI 模型导入到 CubeMx 的过程中,如果使用后两种方式生成的网络模型,将会遇到如下报错:

1INVALIDMODEL:Couldn'tloadKerasmodel/home/lebhoryi/RT-Thread/Edge_AI/Project1/keras_model.h5, 2error:Unknownlayer:Functional暂时的解决方式是采用Sequence方式搭建神经网络,训练好的 AI Model 会被保存为Keras 格式,后缀为 .h5,例如keras_model.h5。 示例模型我已经保存好了,大家可以直接下载该模型进行实验,下载地址如下: https://github.com/Lebhoryi/Edge_AI/tree/master/Project1/model 本次示例所训练的神经网络模型结构如下:

2. 使用 CubeMX AI生成工程

在 CubeMX 中选择 STM32H743ZI Nucleo 开发板,这里其实不限制开发板型号,常见的

2.1 打开CubeMX

2.2 安装CUBE-AI 软件包

打开菜单栏中的 Help,选择 Embedded Software Packages Manager,然后在 STMicroelectronics 一栏中选择 X-CUBE-AI 插件的最新版本,安装好之后点击右下角的 Close。

在工程中导入X-CUBE-AI插件:

会出现如下界面:

接下来选择用于通信的串口,这里选择串口 3,因为该串口被用于 STlink 的虚拟串口。

2.3 导入 AI 模型到工程中

将 AI 模型烧录到开发板前,需要先分析 Model,检查其是否可以被正常转换为嵌入式工程,本次实验使用的模型比较简单,分析起来也也比较快,结果如下所示:

接下来我们要在开发板上验证转换后的嵌入式工程,在这个过程中 CubeMX AI 工具会根据你导入的 AI 模型,自动生成嵌入式工程,并且将编译后的可执行文件烧录到开发板中,并通过 STlink 的虚拟串口验证运行的结果。我的系统是 Ubuntu,不支持 MDK,所以在这里选择自动生成 STM32CubeIDE 工程。

验证成功界面如下所示:

2.4 生成项目工程

上一步我们只是进行了项目结果的验证,但是并没有生成项目源代码,接下来我们将生成项目工程,如下图所示:

生成后的 Project 文件夹树如下所示:

1(base)#(07/03/20@10:51上午)(lebhoryi@RT-AI):~/RT-Thread/Edge_AI@master✗✗✗ 2tree-L2./Project1 3./Project1 4├──DNN#CubeMX生成工程路径 5│├──DNN.ioc#CubeMX类型文件 6│├──Drivers 7│├──Inc 8│├──Middlewares 9│├──network_generate_report.txt 10│├──Src 11│├──Startup 12│├──STM32CubeIDE 13│├──STM32H743ZITX_FLASH.ld 14│└──STM32H743ZITX_RAM.ld 15├──image#相关图片保存文件夹 16│├──mymodel1.png#model 17│└──STM32H743.jpg#H743 18├──model#model保存路径 19│└──keras_model.h5 20├──Readme.md 21├──tf2_linear_regression.ipynb 22└──tf2_线性回归_扩展.ipynb至此,神功练成了一大半,剩下的就是代码调试的工作了。

3. 代码调试

关于 STM32CubeIDE 的初步认识:基础说明与开发流程:https://blog.csdn.net/Naisu_kun/article/details/95935283

3.1 导入工程

选择 File 选项 --> import:

选择先前导出工程的路径:

导入成功的界面如下所示:

接下来就可以使用 STM32Cube IDE 来调试生成的工程了。

3.2 生成 bin文件

在编译的过程中还会自动生成相应的 bin 文件,后续可以通过 stm32cubeProgramer 工具将 bin 文件烧录到开发板中。

3.3 烧录 .bin文件

打开STM32CubeProgramming,点击右上角connect,然后选择Open file,选择要打开的.bin 文件。

烧录成功的界面:

3.4 Other

在 ubuntu 系统中我们可以使用串口工具cutecom 来查看最终程序的运行结果,程序运行结果如下:

在使用 cutecom 连接串口前,记得断开 STM32Programer 和开发板的连接,否则会出现串口打开错误的情况。

可以看到我们的 AI 模型已经在开发板上欢快地跑了起来 ,奥里给!!!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    89

    文章

    38121

    浏览量

    296676
  • RT-Thread
    +关注

    关注

    32

    文章

    1540

    浏览量

    44287

原文标题:【嵌入式AI入门日记】将 AI 模型移植到 RT-Thread 上(1)

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    在以下嵌入式软件设计模型,属于数据流模型的是,哪里有设计模型的介绍?

    在以下嵌入式软件设计模型,属于数据流模型的是()。A. CCSB. CSPC. FSMD. Petri Net
    发表于 11-24 15:55

    RA8P1部署ai模型指南:从训练模型部署 | 本周六

    嵌入式边缘AI,如何把“训练好的模型”稳定地“跑在板子上”,决定了项目能否落地。我们带你基于RA8P1平台,跑通从数据准备、模型训练、量
    的头像 发表于 11-20 18:06 1643次阅读
    RA8P1<b class='flag-5'>部署</b><b class='flag-5'>ai</b><b class='flag-5'>模型</b>指南:从训练<b class='flag-5'>模型</b><b class='flag-5'>到</b><b class='flag-5'>部署</b> | 本周六

    新唐科技推出高效AI MCU部署工具NuML Toolkit

    随着 AI 技术加速导入各类嵌入式系统如何将训练完成的 AI 模型顺利
    的头像 发表于 08-01 17:21 1875次阅读

    嵌入式AI技术漫谈:怎么为训练AI模型采集样本数据

    Q 需要为嵌入式AI模型提供多少样本数据? 我在向客户介绍如何使用AI方法设计一款客户产品时,客户理解,AI
    的头像 发表于 06-11 16:30 1077次阅读

    ETAS全新的嵌入式AI解决方案

    训练后的AI神经网络模型,自动化生成安全且高效的C代码,用于嵌入式系统” ,近日ETAS携全新的智能化工具Embedded
    的头像 发表于 05-07 11:43 1581次阅读
    ETAS全新的<b class='flag-5'>嵌入式</b><b class='flag-5'>AI</b>解决方案

    飞凌嵌入式「2025嵌入式及边缘AI技术论坛」议程公布

    4月22日,飞凌嵌入式“2025嵌入式及边缘AI技术论坛”将在深圳举行,论坛以“新生态,智未来”为主题,旨在汇聚行业智慧,探讨嵌入式技术与边缘AI
    的头像 发表于 04-02 15:12 1071次阅读
    飞凌<b class='flag-5'>嵌入式</b>「2025<b class='flag-5'>嵌入式</b>及边缘<b class='flag-5'>AI</b>技术论坛」议程公布

    从DeepSeekQwen,AI模型的移植与交互实战指南-飞凌嵌入式

    在不久前发布的《技术实战|OK3588-C开发板上部署DeepSeek-R1大模型的完整指南》一文,小编为大家介绍了DeepSeek-R1在飞凌嵌入式OK3588-C开发板上的移植
    的头像 发表于 03-28 08:06 2527次阅读
    从DeepSeek<b class='flag-5'>到</b>Qwen,<b class='flag-5'>AI</b>大<b class='flag-5'>模型</b>的移植与交互实战指南-飞凌<b class='flag-5'>嵌入式</b>

    Banana Pi 发布 BPI-AI2N &amp; BPI-AI2N Carrier,助力 AI 计算与嵌入式开发

    RZ/V2N——近期在嵌入式世界2025上新发布,为 AI 计算、嵌入式系统及工自动化提供强大支持。这款全新的计算平台旨在满足开发者和企业用户对高性能、低功耗和灵活扩展的需求。 [](
    发表于 03-19 17:54

    Python在嵌入式系统的应用场景

    你想把你的职业生涯提升到一个新的水平?Python在嵌入式系统中正在成为一股不可缺少的新力量。尽管传统上嵌入式开发更多地依赖于C和C++语言,Python的优势在于其简洁的语法、丰富的库和快速的开发周期,这使得它在某些
    的头像 发表于 03-19 14:10 1195次阅读

    AI来袭!嵌入式开发者该如何应对转型?

    设计和低功耗的编程方式,但现在,AI技术的涌入要求我们如何应对转型,如何将传统的嵌入式开发与新兴的AI技术融合,是每个嵌入式开发者必须思考的
    的头像 发表于 03-04 14:41 1378次阅读
    <b class='flag-5'>AI</b>来袭!<b class='flag-5'>嵌入式</b>开发者该如何应对转型?

    如何将python文件导入ROS系统

    本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何将 python 文件导入 ROS 系统
    的头像 发表于 02-11 11:08 1198次阅读
    <b class='flag-5'>如何将</b>python文件导入<b class='flag-5'>到</b>ROS<b class='flag-5'>系统</b><b class='flag-5'>中</b>

    嵌入式机器学习的应用特性与软件开发环境

    作者:DigiKey Editor 在许多嵌入式系统,必须采用嵌入式机器学习(Embedded Machine Learning)技术,这是指
    的头像 发表于 01-25 17:05 1211次阅读
    <b class='flag-5'>嵌入式</b>机器学习的应用特性与软件开发环境

    新手怎么学嵌入式?

    基本的概念。嵌入式系统是一种将计算机技术嵌入特定设备系统,它通常具有特定的功能和有限的资源
    发表于 12-12 10:51

    什么是嵌入式人工智能

    嵌入式人工智能是指人工智能技术应用于嵌入式系统的一种技术。嵌入式
    的头像 发表于 12-11 09:23 1520次阅读
    什么是<b class='flag-5'>嵌入式</b>人工智能

    嵌入式系统开发的测试方法 嵌入式系统开发与AI结合应用

    嵌入式系统开发的测试方法 嵌入式系统开发是一个复杂的过程,涉及硬件和软件的紧密结合。测试是确
    的头像 发表于 12-09 10:22 2046次阅读