91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

如何在STM32和Arduino上實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)

易絡(luò)盟電子 ? 來源:易絡(luò)盟電子 ? 2026-01-19 10:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01前言

在大多數(shù)情況下,實(shí)用的機(jī)器學(xué)習(xí)算法需要大量計算資源(CPU 運(yùn)算周期和內(nèi)存占用)。不過,TensorFlow Lite 近期推出了一個實(shí)驗(yàn)版本,可在多款微控制器上運(yùn)行。倘若我們能構(gòu)建出適用于資源受限設(shè)備的模型,便能著手將嵌入式系統(tǒng)改造為小型機(jī)器學(xué)習(xí)(TinyML)設(shè)備。

TensorFlow Lite Micro(簡稱 TFLM)是一款開源的機(jī)器學(xué)習(xí)推理框架,專為在嵌入式系統(tǒng)上運(yùn)行深度學(xué)習(xí)模型而設(shè)計。由于嵌入式系統(tǒng)存在資源受限的問題,且碎片化現(xiàn)象導(dǎo)致跨平臺互操作性幾乎無法實(shí)現(xiàn),而 TFLM 恰好滿足了相關(guān)效率要求。該框架采用基于解釋器的設(shè)計方案,既能克服這些獨(dú)特挑戰(zhàn),又能提供良好的靈活性。

9b2ec918-f1ac-11f0-92de-92fbcf53809c.png

圖 1:一個包含兩層的簡易深度學(xué)習(xí)網(wǎng)絡(luò)

02開發(fā)

開發(fā) TFLM 應(yīng)用的第一步是在內(nèi)存中創(chuàng)建一個有效的神經(jīng)網(wǎng)絡(luò)模型對象。應(yīng)用開發(fā)者需通過客戶端 API 創(chuàng)建一個 “算子解析器”(operator resolver)對象。該 “算子解析器”(OpResolver)API 會控制與最終二進(jìn)制文件關(guān)聯(lián)的算子,并最大限度減小文件體積。

第二步是提供一塊連續(xù)的內(nèi)存 “區(qū)域”(arena),用于存儲解釋器所需的中間結(jié)果和其他各類變量。這一步是必不可少的,因?yàn)榍度胧皆O(shè)備默認(rèn)不支持動態(tài)內(nèi)存分配。

第三步是創(chuàng)建一個編譯示例,并將模型、算子解析器和內(nèi)存區(qū)域作為參數(shù)傳入。編譯器會在初始化階段,將運(yùn)行所需的所有內(nèi)存分配到該內(nèi)存區(qū)域中。我們避免進(jìn)行任何動態(tài)內(nèi)存分配,以防止棧碎片化導(dǎo)致長期運(yùn)行的應(yīng)用程序出現(xiàn)錯誤。觸發(fā)式應(yīng)用可在模型評估階段分配所需內(nèi)存,因此此時會調(diào)用算子初始化函數(shù),并將其占用的內(nèi)存轉(zhuǎn)移至解釋器中。應(yīng)用程序提供的算子解析器(OpResolver)會將序列化模型中列出的算子類型,映射到對應(yīng)的執(zhí)行函數(shù)。C 語言 API 調(diào)用負(fù)責(zé)管控解釋器與算子之間的所有通信,確保算子的實(shí)現(xiàn)具備模塊化特性,且獨(dú)立于解釋器的內(nèi)部細(xì)節(jié)。這種設(shè)計方案不僅能讓開發(fā)者輕松地將算子執(zhí)行器實(shí)現(xiàn)替換為優(yōu)化版本,還能更便捷地復(fù)用其他系統(tǒng)的算子執(zhí)行庫(例如,作為代碼生成項(xiàng)目的一部分)。

第四步是執(zhí)行階段。應(yīng)用程序先獲取指向代表模型輸入的內(nèi)存區(qū)域指針,然后為其填充數(shù)據(jù)(這些數(shù)據(jù)通常來源于傳感器或其他用戶提供的輸入)。輸入數(shù)據(jù)準(zhǔn)備就緒后,應(yīng)用程序調(diào)用解釋器來執(zhí)行模型計算。該過程包括:遍歷按拓?fù)浣Y(jié)構(gòu)排序的算子、利用內(nèi)存規(guī)劃階段計算得到的偏移量定位輸入與輸出數(shù)據(jù)、以及為每個算子調(diào)用對應(yīng)的評估執(zhí)行函數(shù)。

最后,當(dāng)所有算子評估執(zhí)行完成后,解釋器會將控制權(quán)交還給應(yīng)用程序。大多數(shù)微控制器MCU)都是單線程架構(gòu),依靠中斷來處理緊急任務(wù),這種方式是完全可行的。不過,應(yīng)用程序仍可在單線程上運(yùn)行,且特定于平臺的算子仍能在多個處理器之間分配計算任務(wù)。當(dāng)解釋器調(diào)用完成后,應(yīng)用程序可向解釋器查詢包含模型計算輸出結(jié)果的數(shù)組所在位置,隨后即可使用該輸出結(jié)果。

9b98f09a-f1ac-11f0-92de-92fbcf53809c.png

圖 2:實(shí)現(xiàn)模塊概述

03部署

使用 Keras 或 TensorFlow 構(gòu)建的模型,需要先轉(zhuǎn)換為 TensorFlow Lite 格式并導(dǎo)出,才能部署到微控制器上運(yùn)行。我們可以借助 TensorFlow Lite Converter 的 Python API 來完成這項(xiàng)轉(zhuǎn)換工作。該 API 會接收我們的 Keras 模型,并將其以 FlatBuffer 格式寫入磁盤 ——FlatBuffer 是一種專為提升空間利用率而設(shè)計的特殊文件格式。由于我們要部署的目標(biāo)設(shè)備是內(nèi)存受限的微控制器,這種高效的文件格式將會大有用處。

要將模型部署到 STM32 微控制器和 Arduino 平臺,我們可以使用 EloquentTinyML 庫來實(shí)現(xiàn)無縫部署。這是一款專為在微控制器上運(yùn)行 TinyML 模型而設(shè)計的庫,能夠讓開發(fā)者無需應(yīng)對復(fù)雜的編譯流程,也無需排查晦澀難懂的報錯信息。

你首先必須安裝該庫的最新版本(如果 0.0.5 版本不可用,可選擇 0.0.4 版本),安裝方式既可以通過庫管理器(Library Manager)完成,也可以直接從 Github 平臺下載安裝。

04示例代碼

以下是用于在 STM32 和 Arduino 微控制器上運(yùn)行并部署數(shù)字識別 TinyML 模型的示例代碼。

向上滑動閱覽

#include


// copy the printed code from tinymlgen into this file
#include"digits_model.h"


#defineNUMBER_OF_INPUTS 64
#defineNUMBER_OF_OUTPUTS 10
#defineTENSOR_ARENA_SIZE 8*1024


Eloquent::TfLite ml;


voidsetup(){
Serial.begin(115200);
ml.begin(digits_model);
}


voidloop(){
// a random sample from the MNIST dataset (precisely the last one)
floatx_test[64] = {0.,0.,0.625,0.875,0.5 ,0.0625,0.,0.,
0.,0.125,1.,0.875,0.375,0.0625,0.,0.,
0.,0.,0.9375,0.9375,0.5 ,0.9375,0.,0.,
0.,0.,0.3125,1.,1.,0.625,0.,0.,
0.,0.,0.75 ,0.9375,0.9375,0.75 ,0.,0.,
0.,0.25 ,1.,0.375,0.25 ,1.,0.375,0.,
0.,0.5 ,1.,0.625,0.5 ,1.,0.5 ,0.,
0.,0.0625,0.5 ,0.75 ,0.875,0.75 ,0.0625,0.};
// the output vector for the model predictions
floaty_pred[10] = {0};
// the actual class of the sample
inty_test =8;


// let's see how long it takes to classify the sample
uint32_tstart =micros();


ml.predict(x_test, y_pred);


uint32_ttimeit =micros() - start;


Serial.print("It took ");
Serial.print(timeit);
Serial.println(" micros to run inference");


// let's print the raw predictions for all the classes
// these values are not directly interpretable as probabilities!
Serial.print("Test output is: ");
Serial.println(y_test);
Serial.print("Predicted proba are: ");


for(inti =0; i 
 

歡迎您點(diǎn)擊“閱讀原文”訪問e絡(luò)盟官網(wǎng)。如有任何業(yè)務(wù)、訂購相關(guān)問題,歡迎撥打全國客服熱線:4008205857咨詢e絡(luò)盟相關(guān)產(chǎn)品。

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

    關(guān)注

    48

    文章

    8385

    瀏覽量

    164645
  • STM32
    +關(guān)注

    關(guān)注

    2310

    文章

    11162

    瀏覽量

    373515
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6526

    瀏覽量

    196957
  • 卷積神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    4

    文章

    372

    瀏覽量

    12878

原文標(biāo)題:如何在 STM32 和 Arduino 上實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)

文章出處:【微信號:易絡(luò)盟電子,微信公眾號:易絡(luò)盟電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    【PYNQ-Z2申請】基于PYNQ的卷積神經(jīng)網(wǎng)絡(luò)加速

    項(xiàng)目名稱:基于PYNQ的卷積神經(jīng)網(wǎng)絡(luò)加速試用計劃:申請理由:本人研究生在讀,想要利用PYNQ深入探索卷積神經(jīng)網(wǎng)絡(luò)的硬件加速,在PYNQ
    發(fā)表于 12-19 11:37

    基于賽靈思FPGA的卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)設(shè)計

    FPGA 實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò) (CNN)。CNN 是一類深度神經(jīng)網(wǎng)絡(luò),在處理大規(guī)模圖像識別任務(wù)以及與機(jī)器學(xué)習(xí)類似的其他問題方面已大獲成功。
    發(fā)表于 06-19 07:24

    卷積神經(jīng)網(wǎng)絡(luò)如何使用

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)究竟是什么,鑒于神經(jīng)網(wǎng)絡(luò)在工程經(jīng)歷了曲折的歷史,您為什么還會在意它呢? 對于這些非常中肯的問題,我們似乎可以給出相對簡明的答案。
    發(fā)表于 07-17 07:21

    什么是圖卷積神經(jīng)網(wǎng)絡(luò)

    卷積神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 08-20 12:05

    卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)是什么

    卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)
    發(fā)表于 05-05 18:12

    可分離卷積神經(jīng)網(wǎng)絡(luò)在 Cortex-M 處理器實(shí)現(xiàn)關(guān)鍵詞識別

    我們可以對神經(jīng)網(wǎng)絡(luò)架構(gòu)進(jìn)行優(yōu)化,使之適配微控制器的內(nèi)存和計算限制范圍,并且不會影響精度。我們將在本文中解釋和探討深度可分離卷積神經(jīng)網(wǎng)絡(luò)在 Cortex-M 處理器
    發(fā)表于 07-26 09:46

    卷積神經(jīng)網(wǎng)絡(luò)一維卷積的處理過程

    以前的神經(jīng)網(wǎng)絡(luò)幾乎都是部署在云端(服務(wù)器),設(shè)備端采集到數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送給服務(wù)器做inference(推理),結(jié)果再通過網(wǎng)絡(luò)返回給設(shè)備端。如今越來越多的
    發(fā)表于 12-23 06:16

    卷積神經(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ò)原理:卷積神經(jīng)網(wǎng)絡(luò)模型和卷積神經(jīng)網(wǎng)絡(luò)算法

    卷積神經(jīng)網(wǎng)絡(luò)原理:卷積神經(jīng)網(wǎng)絡(luò)模型和卷積神經(jīng)網(wǎng)絡(luò)算法 卷積
    的頭像 發(fā)表于 08-17 16:30 ?2364次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)概述 卷積神經(jīng)網(wǎng)絡(luò)的特點(diǎn) cnn卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)

    卷積神經(jīng)網(wǎng)絡(luò)概述 卷積神經(jīng)網(wǎng)絡(luò)的特點(diǎn) cnn卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)?
    的頭像 發(fā)表于 08-21 16:41 ?4537次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本原理 卷積神經(jīng)網(wǎng)絡(luò)發(fā)展 卷積神經(jīng)網(wǎng)絡(luò)三大特點(diǎn)

    卷積神經(jīng)網(wǎng)絡(luò)的基本原理 卷積神經(jīng)網(wǎng)絡(luò)發(fā)展歷程 卷積神經(jīng)網(wǎng)絡(luò)三大特點(diǎn)?
    的頭像 發(fā)表于 08-21 16:49 ?3741次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)層級結(jié)構(gòu) 卷積神經(jīng)網(wǎng)絡(luò)卷積層講解

    像分類、目標(biāo)檢測、人臉識別等。卷積神經(jīng)網(wǎng)絡(luò)的核心是卷積層和池化層,它們構(gòu)成了網(wǎng)絡(luò)的主干,實(shí)現(xiàn)了對圖像特征的提取和抽象。 一、
    的頭像 發(fā)表于 08-21 16:49 ?1.1w次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的介紹 什么是卷積神經(jīng)網(wǎng)絡(luò)算法

    卷積神經(jīng)網(wǎng)絡(luò)的介紹 什么是卷積神經(jīng)網(wǎng)絡(luò)算法 卷積神經(jīng)網(wǎng)絡(luò)涉及的關(guān)鍵技術(shù)
    的頭像 發(fā)表于 08-21 16:49 ?3178次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的原理與實(shí)現(xiàn)

    1.卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。 卷積神經(jīng)網(wǎng)絡(luò)是一種前饋
    的頭像 發(fā)表于 07-02 16:47 ?1890次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)原理

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-03 10:49 ?2079次閱讀