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

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

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

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

jf_pJlTbmA9 ? 來源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2023-10-17 17:48 ? 次閱讀

相信不少在MCU平臺使用Tensorflow Lite Micro(Tensorflow Lite Micro專為嵌入式平臺推出的專用版TFlite),以下簡稱TFLm,推理引擎體驗過AI的小伙伴們,一定都遇到過這樣的情況:當(dāng)我們歷經(jīng)千辛萬苦訓(xùn)練出來一個模型之后,要如何將它導(dǎo)入工程里呢?

各抒己見

這時候有同學(xué)會說了:我有文件系統(tǒng)啊,模型放到sd卡中,文件操作讀進來分分鐘?。∵€有的同學(xué)會說了:我有xxd,當(dāng)然,xxd也是TFLM的御用工具,負(fù)責(zé)將一個文件以十六進制的形式顯示出來,使用過這個推理引擎的同學(xué)一定對下面這段注釋很是熟悉:

// xxd -i mobilenet_v1_0.25_128_quant.tflite > mobilenet_v1_0.25_128_quant_model.h

這之后,我們的模型就會被轉(zhuǎn)化成類似于下面這個樣子,不要懷疑,這就是我們的模型真正的樣子,并非眉清目秀,在程序中就可以通過mobilenet_model這個指針來訪問模型數(shù)據(jù):

const char mobilenet_model[] __ALIGNED(16) = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  0x18, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x14, 0x00,
  0x0e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x78, 0x5b, 0x07, 0x00,
  0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
  。。。。
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x97, 0x26, 0x08, 0x39
};
unsigned int mobilenet_model_len = 496912;

這時候,又有同學(xué)說了,你們這些方法都太弱了:你們有SD卡,有文件系統(tǒng),有xxd!這些我統(tǒng)統(tǒng)不需要,不用額外安裝工具,不用文件系統(tǒng)擴展,不用看著我這空蕩蕩的錢包,還要祭出小錢錢去買張SD卡。

嗯,我只需要編譯器+裸板即可!要的就是簡潔(也想高調(diào),可是小錢錢不允許?。?/p>

不賣關(guān)子了,我們有.incbin。這個小東西是一個匯編指令,用來包含某一個文件到匯編文件中,文件的內(nèi)容將會按字節(jié)逐一添加到當(dāng)前elf(鏡像文件)節(jié)中。不會做任何方式的解釋,保證數(shù)據(jù)的完整和一致性。即原封不動的添加進來,不過要注意,以下代碼要保存在以.s尾綴的匯編文件中:

.global mobilenet_model   // 導(dǎo)出全局符號
.global mobilenet_model _end
.section .rodata   // 存儲位置

. mobilenet_model :
   .incbin “mobilenet_v1_0.25_128_quant.tflite”
. mobilenet_model_end :

這樣一來,同樣可以使用mobilenet_model這個模型指針來進行模型的訪問。

很難說,上面三位同學(xué)的方法哪一種更好一點,可能第三位同學(xué)提出的方法,是對于外部依賴最少的,只需要利用編譯器對于匯編指令的支持即可。既不需要費力的移植文件系統(tǒng),也不用花費小錢錢購買SD卡,也不用求求xxd工具幫我們做事。

當(dāng)然,小編在這里也站一下隊,明確一下立場!我投.incbin一票,當(dāng)然了,這個也是小編一直在用的方式。更換模型,只需要修改一下導(dǎo)入路徑即可,可以說香的不行了!

新的挑戰(zhàn)

不好,,,好像有點跑題變成夸夸群了,回到主題。

小伙伴既然已經(jīng)回答了小編提出的問題:導(dǎo)入模型的N種方法,小編就再追問大家一個問題:如果頻繁更新模型要怎么辦呢?

當(dāng)然,使用文件系統(tǒng)的小伙伴可能這時候會心一笑了:哈哈,我就知道有這么一出,讓我猜到了吧,比靈活性,沒人能和我比!

的確,無論是使用.incbin還是xxd的方式,每更新一次模型都要對整個模型重新編譯下載。而使用文件系統(tǒng)的方式,只需要將模型拖到SD即可,不過根據(jù)程序設(shè)計,是否需要保證模型名字保持一致才能夠正確loading。。。這個就不是本篇要討論的了。

柳暗花明

相信看到這里的小伙伴們心里已經(jīng)有數(shù)了,小編一定是已經(jīng)找到了另一種替代方案,既能實現(xiàn)模型的更新,又不用重新對模型進行編譯。是的,小編也就不再賣關(guān)子了,這就揭開廬山真面目。

小編這里要提出的方法,有點類似于引入文件系統(tǒng)的概念,只不過,是一個手動管理的“丐版”文件系統(tǒng)。

一句話概括就是:在非易失性器件上,說普通話就是Nor Flash上開辟一塊固定的區(qū)域來存儲模型,之后我們只需要將最新的模型也同樣下載到這一區(qū)域即可,這樣一來,我們在主程序中,只需要維護這一區(qū)域,將其作為模型的數(shù)據(jù)起始地址,就可以達(dá)到實時更新模型的目的了。

是不是感覺小編的這個想法,思路是如此的清晰!而且,還免去了移植文件系統(tǒng)的繁瑣過程,最重要的是,保住了錢包里的小錢錢,不用買SD卡了。

這里特別強調(diào)是Nor Flash,作為可以隨機讀的器件,可以方便地進行隨機訪問,使用起來或者說在程序的編寫上會更加的便捷。當(dāng)然,使用NAND flash也未曾不可,有興趣的伙伴可以自行整理。

留下懸念

當(dāng)然,可能有小伙伴要質(zhì)疑:那你這個可以實現(xiàn)存儲多個模型嗎?小編很負(fù)責(zé)任地告訴大家,只要膽子大,宇宙都能給你裝下!只不過,在存放數(shù)據(jù)的時候,需要額外存儲一些幀頭信息,告知程序一共有多少組模型存儲其中。

小編將在下期為大家介紹如何設(shè)計合適的存儲結(jié)果以存放我們的flash數(shù)據(jù),并編寫一個PC端小程序,負(fù)責(zé)進行數(shù)據(jù)的轉(zhuǎn)換,敬請期待!

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

審核編輯 黃宇

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

    關(guān)注

    146

    文章

    16800

    瀏覽量

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

    關(guān)注

    42

    文章

    4724

    瀏覽量

    100311
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    29368

    瀏覽量

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

    關(guān)注

    1

    文章

    3059

    瀏覽量

    48575
收藏 人收藏

    評論

    相關(guān)推薦

    【PYNQ-Z2試用體驗】神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識

    學(xué)習(xí)和認(rèn)知科學(xué)領(lǐng)域,是一種模仿生物神經(jīng)網(wǎng)絡(luò)(動物的中樞神經(jīng)系統(tǒng),特別是大腦)的結(jié)構(gòu)和功能的數(shù)學(xué)模型或計算模型,用于對函數(shù)進行估計或近似。
    發(fā)表于 03-03 22:10

    一種基于GAP技術(shù)的網(wǎng)絡(luò)保護設(shè)備設(shè)計新方案

    本文提出了基于GAP技術(shù)的網(wǎng)絡(luò)保護設(shè)備設(shè)計新方案,闡述了主要模塊的實現(xiàn)方法。
    發(fā)表于 04-29 06:45

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

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

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

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

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

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

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

    成為了非常重要的問題。 基于以上問題,本文提出了一種基于高效采樣算法的時序圖神經(jīng)網(wǎng)絡(luò)系統(tǒng) 。首先我們介紹用于時序圖神經(jīng)網(wǎng)絡(luò)采樣的高效采樣方法。采樣常常被用于深度學(xué)習(xí)中以降低模型的訓(xùn)練時
    發(fā)表于 09-28 10:34

    一種基于人工神經(jīng)網(wǎng)絡(luò)的秘密共享方案

    本文首先分析了人工神經(jīng)網(wǎng)絡(luò)和秘密共享的相通之處,闡明了用人工神經(jīng)網(wǎng)絡(luò)來實現(xiàn)秘密共享是可能的;其次給出了一種基于人工神經(jīng)網(wǎng)絡(luò)的秘密共享的門限方案
    發(fā)表于 08-15 09:54 ?15次下載

    一種攜帶歷史元素的循環(huán)神經(jīng)網(wǎng)絡(luò)推薦模型

    動態(tài)推薦系統(tǒng)通過學(xué)習(xí)動態(tài)變化的興趣特征來考慮推薦系統(tǒng)中的動態(tài)因素,實現(xiàn)推薦任務(wù)隨著時間變化而實時更新。該文提出一種攜帶歷史元素的循環(huán)神經(jīng)網(wǎng)絡(luò)( ecurrent Neural Net works
    發(fā)表于 03-31 09:31 ?5次下載
    <b class='flag-5'>一種</b>攜帶歷史元素的循環(huán)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>推薦<b class='flag-5'>模型</b>

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

    、視頻等信號數(shù)據(jù)的處理和分析。卷積神經(jīng)網(wǎng)絡(luò)就是一種處理具有類似網(wǎng)格結(jié)構(gòu)的數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò),其中每個單元只處理與直接相連的神經(jīng)元的信息。本文將
    的頭像 發(fā)表于 08-21 16:41 ?1841次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)模型 卷積神經(jīng)網(wǎng)絡(luò)預(yù)測模型 生成卷積神經(jīng)網(wǎng)絡(luò)模型

    cnn卷積神經(jīng)網(wǎng)絡(luò)模型 卷積神經(jīng)網(wǎng)絡(luò)預(yù)測模型 生成卷積神經(jīng)網(wǎng)絡(luò)模型? 卷積
    的頭像 發(fā)表于 08-21 17:11 ?1129次閱讀

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

    卷積神經(jīng)網(wǎng)絡(luò)模型搭建 卷積神經(jīng)網(wǎng)絡(luò)模型一種深度學(xué)習(xí)算法。它已經(jīng)成為了計算機視覺和自然語言處理等各種領(lǐng)域的主流算法,具有很大的應(yīng)用前景。本篇
    的頭像 發(fā)表于 08-21 17:11 ?884次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)模型的優(yōu)缺點

    卷積神經(jīng)網(wǎng)絡(luò)模型的優(yōu)缺點? 卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種從圖像、視頻、聲音和系列
    的頭像 發(fā)表于 08-21 17:15 ?4066次閱讀

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

    一種基于MCU神經(jīng)網(wǎng)絡(luò)模型在線更新方案數(shù)據(jù)處理
    的頭像 發(fā)表于 10-17 18:06 ?506次閱讀
    <b class='flag-5'>一種</b>基于<b class='flag-5'>MCU</b>的<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b><b class='flag-5'>模型</b>在線<b class='flag-5'>更新方案</b><b class='flag-5'>之</b>數(shù)據(jù)處理<b class='flag-5'>篇</b>

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

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

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

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