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

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

3天内不再提示

一种基于MCU的神经网络模型在线更新方案之数据处理篇

jf_pJlTbmA9 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2023-10-17 18:06 次阅读

书接上文,我们横向比较了在应用TFLm引擎进行模型文件导入时候,所使用的三种常用方式:

SD卡存储结合文件系统,

xxd小工具进行文件的十六进制转换

以及使用汇编指令.incbin直接进行模型导入。

可以说各有所长,但是,当我们需要频繁地进行模型的替换、更新时,麻烦就出现了。xxd和.incbin的形式都需要重新编译目标工程,并下载到板子中。

当我们的程序体量较大时,即便不需要对全部工程进行编译(做到改啥编啥),但是,下载这一步,是无论如何不能跳过的,随着最终镜像大小的不同,所消耗的时间也会不同。而使用文件系统的方式,无形中增加了移植文件系统的工作量。

设计思路

为了克服这一问题,小编在上一篇的结尾提出了一个新的方案,直接把flash看作一大块空白存储区,并开辟一个固定区域存放模型文件。这样一来,我们只需要在程序中将模型的读取位置固定,无论模型是否更新,都能够读取最新的模型数据,进行后续处理。

而且小编也特意强调建议大家直接使用Nor Flash来实现这一操作。

以i.MX RT系列MCU为例说明这样做的优势。i.MX RT系列由于没有片上Flash芯片,都通过外扩Flash芯片存储代码。当我们将启动方式调整为XIP,即从flash启动时,芯片内部的BootROM会帮我们配置初始化好这个片上的Flash芯片,而由于Nor Flash的特性,支持随机的内存访问,也就是说,我们在程序内部,可以直接通过指针的形式进行访问,甚至可以直接调用memcpy函数进行数据的拷贝。

比起集成文件系统的方式,可以说方便至极。不过,也不是说Nand Flash就不适合,只是处理起来会稍稍麻烦一点,由于不支持随机的读操作,就要先拷贝到RAM区域再进行操作。

设计实现

言归正传,为了方便进行数据的管理,我们需要设计一套简单的管理逻辑,说的专业一点就是为我们的数据添加一个帧头,当然,既然大道至简,数据打包格式大致就是如下格式(可能有些简陋啊,大家见谅):

wKgaomUD4aSAdgkSAAAdTqdPumA019.png

当然为了能够在程序中使用,我们再定义一个对应的C语言形式来表达,这里要用到C语言中0长度数组的概念:

struct { uint32_t n, w, h , c; uint8_t data[0]; }

这样一来,我们就具象化了我们所设计的那个简单的数据打包协议。

下一步是如何将数据打包成我们要的样子,这里要借助于Python来编写一个简单的脚本处理,并假设最终会生成一个二进制文件,假设输入一个多维数组results,首先构建其帧头,默认维度不足4的数据,用1补齐,保证最终的帧头包含4个维度信息

def save_to_bin(bin_name, results): shape = list(results[0].shape) element_size = [1] * (3 - len(shape)) + shape element_len = len(results) # shape is [N, H, W, C] bin_values = np.asarray([element_len] + element_size, dtype=np.uint32).tobytes() bin_values += results.tobytes() with open(bin_name, "wb") as f: f.write(bin_values) f.close()

聊到这儿,可能有同学会问了,针对于tflite模型,我们往往只需要知道其首地址就好了,TFLm会处理那些长度信息,我还有必要构造帧头吗?这下给小编问的有点哑口无言。马上着手设计了第二种数据结构:

wKgZomUD4aWAZonDAAAT2Tuy7Vc709.png

是的,针对于模型数据这一特殊的存在,可以设计出更加精简的表达格式,而且,我们知道tflite模型本身实际上已经是二进制文件的形式了,也就是说,可以直接拿过来使用,无需再做任何操作,直接烧写到固定地址即可。

那我们上面所设计的数据结构就毫无用武之地了吗?当然不是!小编做这些当然都是有理由的啊。

大家想一想,运行神经网络模型的时候,光有模型就可以了吗?当然不,我们还缺少输入啊!如果你是摄像头输入,请跳过这节。而如果是离线测试呢?需要大量加载静态图到内存中,是不是和之前我们的分析就类似了。

每次更换测试数据,依旧需要重新下载链接,那么按照本文提供的方案,也为数据设置一块固定的区域,然后借助于上述save_to_bin代码,将数据打包成固定格式,是不是就可以在程序中利用那个结构体访问了呢?没错!小编早就设计好了。

下期预告

那么至此,小编就给大家介绍了数据的组织结果,以及如何编写PC端工具对数据进行打包处理,以变成“应用程序可以访问的样子”。

当然,考虑到模型文件在使用上的特殊性,也为其设计了特殊的存储格式,即直接删去了帧头,只保留了数据部分。而对于图像输入等,需要明确知道其输入维度的数据,就需要保留帧头信息了。

在这里再次做个广告:下一篇我们以i.MX RT1060系列芯片为例,进行MCU实战部分,包括如何进行C代码的的编写获取数据,Keil的散列加载文件的编写以实现数据的运行时加载,完成将数据拷从Flash拷贝到sdram等,敬请期待!

来源:恩智浦MCU加油站
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理

审核编辑 黄宇

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

    关注

    146

    文章

    16017

    浏览量

    343624
  • 神经网络
    +关注

    关注

    42

    文章

    4572

    浏览量

    98748
  • 数据处理
    +关注

    关注

    0

    文章

    509

    浏览量

    28247
  • 模型
    +关注

    关注

    1

    文章

    2704

    浏览量

    47686
收藏 人收藏

    评论

    相关推荐

    KerasML~P:基于Keras中建立的回归预测的神经网络模型

    KerasML~P:基于Keras中建立的回归预测的神经网络模型(根据200个数据样本预测新的5+1个样本)——回归预测
    发表于 12-20 10:43

    【PYNQ-Z2试用体验】神经网络基础知识

    学习和认知科学领域,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。
    发表于 03-03 22:10

    【案例分享】ART神经网络与SOM神经网络

    神经网络在学习新知识的同时要保持对之前学习的知识的记忆,而不是狗熊掰棒子SOM神经网络一种竞争学习型的无监督神经网络,它能将高维输入数据
    发表于 07-21 04:30

    怎么设计ARM与神经网络处理器的通信方案

    FPGA的嵌入式应用。某人工神经网络的FPGA处理器能够对数据进行运算处理,为了实现集数据通信、操作控制和
    发表于 09-20 06:15

    一种基于GAP技术的网络保护设备设计新方案

    本文提出了基于GAP技术的网络保护设备设计新方案,阐述了主要模块的实现方法。
    发表于 04-29 06:45

    怎么解决人工神经网络并行数据处理的问题

    本文提出了个基于FPGA 的信息处理的实例:个简单的人工神经网络应用Verilog 语言描述,该数据流采用模块化的程序设计,并考虑了模块
    发表于 05-06 07:22

    如何用ARM和FPGA搭建神经网络处理器通信方案

    某人工神经网络的FPGA处理器能够对数据进行运算处理,为了实现集数据通信、操作控制和数据处理
    发表于 05-21 06:35

    如何构建神经网络

    原文链接:http://tecdat.cn/?p=5725 神经网络一种基于现有数据创建预测的计算系统。如何构建神经网络神经网络包括:输
    发表于 07-12 08:02

    轻量化神经网络的相关资料下载

    视觉任务中,并取得了巨大成功。然而,由于存储空间和功耗的限制,神经网络模型在嵌入式设备上的存储与计算仍然是个巨大的挑战。前面几篇介绍了如何在嵌入式AI芯片上部署神经网络:【嵌入式AI
    发表于 12-14 07:35

    图像预处理和改进神经网络推理的简要介绍

    为提升识别准确率,采用改进神经网络,通过Mnist数据集进行训练。整体处理过程分为两步:图像预处理和改进神经网络推理。图像预
    发表于 12-23 08:07

    隐藏技术: 一种基于前沿神经网络理论的新型人工智能处理

    隐藏技术: 一种基于前沿神经网络理论的新型人工智能处理器 Copy东京理工大学的研究人员开发了一种名为“ Hiddenite”的新型加速器芯片,该芯片可以在计算稀疏“隐藏
    发表于 03-17 19:15

    卷积神经网络模型发展及应用

    十余年来快速发展的崭新领域,越来越受到研究者的关注。卷积神经网络(CNN)模型是深度学习模型中最重要的一种经典结构,其性能在近年来深度学习任务上逐步提高。由于可以自动学习样本
    发表于 08-02 10:39

    分享一种用于神经网络处理的新8位浮点交换格式

    速度增长,需要新的硬件和软件创新来继续平衡内存,计算效率和带宽。神经网络 (NN) 的训练对于 AI 能力的持续提升至关重要,今天标志着这演变的激动人心的步,Arm、英特尔和 NVIDIA 联合
    发表于 09-15 15:15

    一种基于高效采样算法的时序图神经网络系统介绍

    数据一种非结构化的数据,但能够蕴含很多结构化数据中无法蕴含的信息。图数据无处不在,世界上大部分数据
    发表于 09-28 10:34

    一种基于MCU神经网络模型灵活更新方案之先行篇

    一种基于MCU神经网络模型灵活更新方案之先行篇
    的头像 发表于 10-17 17:48 361次阅读