0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一種基于MCU的神經(jīng)網(wǎng)絡(luò)模型在線更新方案之?dāng)?shù)據(jù)處理篇

jf_pJlTbmA9 ? 來(lái)源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2023-10-17 18:06 ? 次閱讀

書接上文,我們橫向比較了在應(yīng)用TFLm引擎進(jìn)行模型文件導(dǎo)入時(shí)候,所使用的三種常用方式:

SD卡存儲(chǔ)結(jié)合文件系統(tǒng),

xxd小工具進(jìn)行文件的十六進(jìn)制轉(zhuǎn)換

以及使用匯編指令.incbin直接進(jìn)行模型導(dǎo)入。

可以說(shuō)各有所長(zhǎng),但是,當(dāng)我們需要頻繁地進(jìn)行模型的替換、更新時(shí),麻煩就出現(xiàn)了。xxd和.incbin的形式都需要重新編譯目標(biāo)工程,并下載到板子中。

當(dāng)我們的程序體量較大時(shí),即便不需要對(duì)全部工程進(jìn)行編譯(做到改啥編啥),但是,下載這一步,是無(wú)論如何不能跳過(guò)的,隨著最終鏡像大小的不同,所消耗的時(shí)間也會(huì)不同。而使用文件系統(tǒng)的方式,無(wú)形中增加了移植文件系統(tǒng)的工作量。

設(shè)計(jì)思路

為了克服這一問(wèn)題,小編在上一篇的結(jié)尾提出了一個(gè)新的方案,直接把flash看作一大塊空白存儲(chǔ)區(qū),并開(kāi)辟一個(gè)固定區(qū)域存放模型文件。這樣一來(lái),我們只需要在程序中將模型的讀取位置固定,無(wú)論模型是否更新,都能夠讀取最新的模型數(shù)據(jù),進(jìn)行后續(xù)處理。

而且小編也特意強(qiáng)調(diào)建議大家直接使用Nor Flash來(lái)實(shí)現(xiàn)這一操作。

以i.MX RT系列MCU為例說(shuō)明這樣做的優(yōu)勢(shì)。i.MX RT系列由于沒(méi)有片上Flash芯片,都通過(guò)外擴(kuò)Flash芯片存儲(chǔ)代碼。當(dāng)我們將啟動(dòng)方式調(diào)整為XIP,即從flash啟動(dòng)時(shí),芯片內(nèi)部的BootROM會(huì)幫我們配置初始化好這個(gè)片上的Flash芯片,而由于Nor Flash的特性,支持隨機(jī)的內(nèi)存訪問(wèn),也就是說(shuō),我們?cè)诔绦騼?nèi)部,可以直接通過(guò)指針的形式進(jìn)行訪問(wèn),甚至可以直接調(diào)用memcpy函數(shù)進(jìn)行數(shù)據(jù)的拷貝。

比起集成文件系統(tǒng)的方式,可以說(shuō)方便至極。不過(guò),也不是說(shuō)Nand Flash就不適合,只是處理起來(lái)會(huì)稍稍麻煩一點(diǎn),由于不支持隨機(jī)的讀操作,就要先拷貝到RAM區(qū)域再進(jìn)行操作。

設(shè)計(jì)實(shí)現(xiàn)

言歸正傳,為了方便進(jìn)行數(shù)據(jù)的管理,我們需要設(shè)計(jì)一套簡(jiǎn)單的管理邏輯,說(shuō)的專業(yè)一點(diǎn)就是為我們的數(shù)據(jù)添加一個(gè)幀頭,當(dāng)然,既然大道至簡(jiǎn),數(shù)據(jù)打包格式大致就是如下格式(可能有些簡(jiǎn)陋啊,大家見(jiàn)諒):

wKgaomUD4aSAdgkSAAAdTqdPumA019.png

當(dāng)然為了能夠在程序中使用,我們?cè)俣x一個(gè)對(duì)應(yīng)的C語(yǔ)言形式來(lái)表達(dá),這里要用到C語(yǔ)言中0長(zhǎng)度數(shù)組的概念:

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

這樣一來(lái),我們就具象化了我們所設(shè)計(jì)的那個(gè)簡(jiǎn)單的數(shù)據(jù)打包協(xié)議。

下一步是如何將數(shù)據(jù)打包成我們要的樣子,這里要借助于Python來(lái)編寫一個(gè)簡(jiǎn)單的腳本處理,并假設(shè)最終會(huì)生成一個(gè)二進(jìn)制文件,假設(shè)輸入一個(gè)多維數(shù)組results,首先構(gòu)建其幀頭,默認(rèn)維度不足4的數(shù)據(jù),用1補(bǔ)齊,保證最終的幀頭包含4個(gè)維度信息

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()

聊到這兒,可能有同學(xué)會(huì)問(wèn)了,針對(duì)于tflite模型,我們往往只需要知道其首地址就好了,TFLm會(huì)處理那些長(zhǎng)度信息,我還有必要構(gòu)造幀頭嗎?這下給小編問(wèn)的有點(diǎn)啞口無(wú)言。馬上著手設(shè)計(jì)了第二種數(shù)據(jù)結(jié)構(gòu):

wKgZomUD4aWAZonDAAAT2Tuy7Vc709.png

是的,針對(duì)于模型數(shù)據(jù)這一特殊的存在,可以設(shè)計(jì)出更加精簡(jiǎn)的表達(dá)格式,而且,我們知道tflite模型本身實(shí)際上已經(jīng)是二進(jìn)制文件的形式了,也就是說(shuō),可以直接拿過(guò)來(lái)使用,無(wú)需再做任何操作,直接燒寫到固定地址即可。

那我們上面所設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)就毫無(wú)用武之地了嗎?當(dāng)然不是!小編做這些當(dāng)然都是有理由的啊。

大家想一想,運(yùn)行神經(jīng)網(wǎng)絡(luò)模型的時(shí)候,光有模型就可以了嗎?當(dāng)然不,我們還缺少輸入??!如果你是攝像頭輸入,請(qǐng)?zhí)^(guò)這節(jié)。而如果是離線測(cè)試呢?需要大量加載靜態(tài)圖到內(nèi)存中,是不是和之前我們的分析就類似了。

每次更換測(cè)試數(shù)據(jù),依舊需要重新下載鏈接,那么按照本文提供的方案,也為數(shù)據(jù)設(shè)置一塊固定的區(qū)域,然后借助于上述save_to_bin代碼,將數(shù)據(jù)打包成固定格式,是不是就可以在程序中利用那個(gè)結(jié)構(gòu)體訪問(wèn)了呢?沒(méi)錯(cuò)!小編早就設(shè)計(jì)好了。

下期預(yù)告

那么至此,小編就給大家介紹了數(shù)據(jù)的組織結(jié)果,以及如何編寫PC端工具對(duì)數(shù)據(jù)進(jìn)行打包處理,以變成“應(yīng)用程序可以訪問(wèn)的樣子”。

當(dāng)然,考慮到模型文件在使用上的特殊性,也為其設(shè)計(jì)了特殊的存儲(chǔ)格式,即直接刪去了幀頭,只保留了數(shù)據(jù)部分。而對(duì)于圖像輸入等,需要明確知道其輸入維度的數(shù)據(jù),就需要保留幀頭信息了。

在這里再次做個(gè)廣告:下一篇我們以i.MX RT1060系列芯片為例,進(jìn)行MCU實(shí)戰(zhàn)部分,包括如何進(jìn)行C代碼的的編寫獲取數(shù)據(jù),Keil的散列加載文件的編寫以實(shí)現(xiàn)數(shù)據(jù)的運(yùn)行時(shí)加載,完成將數(shù)據(jù)拷從Flash拷貝到sdram等,敬請(qǐng)期待!

來(lái)源:恩智浦MCU加油站
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系小編進(jìn)行處理

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16800

    瀏覽量

    349345
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4724

    瀏覽量

    100311
  • 數(shù)據(jù)處理
    +關(guān)注

    關(guān)注

    0

    文章

    555

    瀏覽量

    28483
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3059

    瀏覽量

    48575
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    怎么設(shè)計(jì)ARM與神經(jīng)網(wǎng)絡(luò)處理器的通信方案?

    FPGA的嵌入式應(yīng)用。某人工神經(jīng)網(wǎng)絡(luò)的FPGA處理器能夠?qū)?b class='flag-5'>數(shù)據(jù)進(jìn)行運(yùn)算處理,為了實(shí)現(xiàn)集數(shù)據(jù)通信、操作控制和
    發(fā)表于 09-20 06:15

    怎么解決人工神經(jīng)網(wǎng)絡(luò)并行數(shù)據(jù)處理的問(wèn)題

    本文提出了個(gè)基于FPGA 的信息處理的實(shí)例:個(gè)簡(jiǎn)單的人工神經(jīng)網(wǎng)絡(luò)應(yīng)用Verilog 語(yǔ)言描述,該數(shù)據(jù)流采用模塊化的程序設(shè)計(jì),并考慮了模塊
    發(fā)表于 05-06 07:22

    如何用ARM和FPGA搭建神經(jīng)網(wǎng)絡(luò)處理器通信方案?

    某人工神經(jīng)網(wǎng)絡(luò)的FPGA處理器能夠?qū)?b class='flag-5'>數(shù)據(jù)進(jìn)行運(yùn)算處理,為了實(shí)現(xiàn)集數(shù)據(jù)通信、操作控制和數(shù)據(jù)處理
    發(fā)表于 05-21 06:35

    如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?

    原文鏈接:http://tecdat.cn/?p=5725 神經(jīng)網(wǎng)絡(luò)一種基于現(xiàn)有數(shù)據(jù)創(chuàng)建預(yù)測(cè)的計(jì)算系統(tǒng)。如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)包括:輸
    發(fā)表于 07-12 08:02

    輕量化神經(jīng)網(wǎng)絡(luò)的相關(guān)資料下載

    視覺(jué)任務(wù)中,并取得了巨大成功。然而,由于存儲(chǔ)空間和功耗的限制,神經(jīng)網(wǎng)絡(luò)模型在嵌入式設(shè)備上的存儲(chǔ)與計(jì)算仍然是個(gè)巨大的挑戰(zhàn)。前面幾篇介紹了如何在嵌入式AI芯片上部署神經(jīng)網(wǎng)絡(luò):【嵌入式AI
    發(fā)表于 12-14 07:35

    隱藏技術(shù): 一種基于前沿神經(jīng)網(wǎng)絡(luò)理論的新型人工智能處理

    隱藏技術(shù): 一種基于前沿神經(jīng)網(wǎng)絡(luò)理論的新型人工智能處理器 Copy東京理工大學(xué)的研究人員開(kāi)發(fā)了一種名為“ Hiddenite”的新型加速器芯片,該芯片可以在計(jì)算稀疏“隱藏
    發(fā)表于 03-17 19:15

    卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用

    十余年來(lái)快速發(fā)展的嶄新領(lǐng)域,越來(lái)越受到研究者的關(guān)注。卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型是深度學(xué)習(xí)模型中最重要的一種經(jīng)典結(jié)構(gòu),其性能在近年來(lái)深度學(xué)習(xí)任務(wù)上逐步提高。由于可以自動(dòng)學(xué)習(xí)樣本
    發(fā)表于 08-02 10:39

    一種基于高效采樣算法的時(shí)序圖神經(jīng)網(wǎng)絡(luò)系統(tǒng)介紹

    數(shù)據(jù)一種非結(jié)構(gòu)化的數(shù)據(jù),但能夠蘊(yùn)含很多結(jié)構(gòu)化數(shù)據(jù)中無(wú)法蘊(yùn)含的信息。圖數(shù)據(jù)無(wú)處不在,世界上大部分數(shù)據(jù)
    發(fā)表于 09-28 10:34

    卷積神經(jīng)網(wǎng)絡(luò)模型有哪些?卷積神經(jīng)網(wǎng)絡(luò)包括哪幾層內(nèi)容?

    、視頻等信號(hào)數(shù)據(jù)處理和分析。卷積神經(jīng)網(wǎng)絡(luò)就是一種處理具有類似網(wǎng)格結(jié)構(gòu)的數(shù)據(jù)
    的頭像 發(fā)表于 08-21 16:41 ?1841次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)模型搭建

    份詳實(shí)、細(xì)致的指導(dǎo)。 、什么是卷積神經(jīng)網(wǎng)絡(luò) 在講述如何搭建卷積神經(jīng)網(wǎng)絡(luò)之前,我們需要先了解下什么是卷積神經(jīng)網(wǎng)絡(luò)。 卷積
    的頭像 發(fā)表于 08-21 17:11 ?884次閱讀

    構(gòu)建神經(jīng)網(wǎng)絡(luò)模型的常用方法 神經(jīng)網(wǎng)絡(luò)模型的常用算法介紹

    神經(jīng)網(wǎng)絡(luò)模型一種通過(guò)模擬生物神經(jīng)元間相互作用的方式實(shí)現(xiàn)信息處理和學(xué)習(xí)的計(jì)算機(jī)模型。它能夠?qū)斎?/div>
    發(fā)表于 08-28 18:25 ?991次閱讀

    一種基于MCU神經(jīng)網(wǎng)絡(luò)模型靈活更新方案先行

    一種基于MCU神經(jīng)網(wǎng)絡(luò)模型靈活更新方案先行
    的頭像 發(fā)表于 10-17 17:48 ?515次閱讀

    人工神經(jīng)網(wǎng)絡(luò)模型一種什么模型

    人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks,簡(jiǎn)稱ANNs)是一種受生物神經(jīng)網(wǎng)絡(luò)啟發(fā)而產(chǎn)生的數(shù)學(xué)模型,用于模擬人腦處理
    的頭像 發(fā)表于 07-04 16:57 ?587次閱讀

    rnn是什么神經(jīng)網(wǎng)絡(luò)模型

    RNN(Recurrent Neural Network,循環(huán)神經(jīng)網(wǎng)絡(luò))是一種具有循環(huán)結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)模型,它能夠處理序列
    的頭像 發(fā)表于 07-05 09:50 ?459次閱讀

    基于MCU神經(jīng)網(wǎng)絡(luò)模型設(shè)計(jì)

    力不從心。神經(jīng)網(wǎng)絡(luò)作為一種強(qiáng)大的機(jī)器學(xué)習(xí)模型,能夠提供高效的數(shù)據(jù)處理和分析能力,但其計(jì)算復(fù)雜度和資源需求往往超出了普通MCU的能力范圍。因此
    的頭像 發(fā)表于 07-12 18:21 ?937次閱讀