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

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

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

如何在Raspberry Pi 3上構(gòu)建機器學(xué)習(xí)應(yīng)用程序

電子設(shè)計 ? 來源:郭婷 ? 作者:電子設(shè)計 ? 2019-01-17 08:24 ? 次閱讀

希望評估機器學(xué)習(xí)方法的開發(fā)人員發(fā)現(xiàn)了越來越多的專業(yè)硬件和開發(fā)平臺,這些平臺通常針對特定類別的機器學(xué)習(xí)架構(gòu)和應(yīng)用程序進行調(diào)整。雖然這些專業(yè)平臺對于許多機器學(xué)習(xí)應(yīng)用程序至關(guān)重要,但很少有新的機器學(xué)習(xí)人員可以做出有關(guān)選擇理想平臺的明智決策。

開發(fā)人員需要一個更易于訪問的平臺來獲得機器開發(fā)經(jīng)驗學(xué)習(xí)應(yīng)用程序并更深入地了解資源需求和最終的功能。

Digi-Key文章“使用隨時可用的硬件和軟件開始機器學(xué)習(xí)”中所述,開發(fā)任何用于監(jiān)督機器學(xué)習(xí)的模型包括三個關(guān)鍵步驟:

準(zhǔn)備培訓(xùn)模型的數(shù)據(jù)

模型實施

模型培訓(xùn)

數(shù)據(jù)準(zhǔn)備將熟悉的數(shù)據(jù)采集方法與標(biāo)記特定數(shù)據(jù)實例所需的額外步驟相結(jié)合,以便在培訓(xùn)過程中使用。對于最后兩個步驟,機器學(xué)習(xí)模型專家直到最近才需要使用相對較低級別的數(shù)學(xué)庫來實現(xiàn)模型算法中涉及的詳細計算。機器學(xué)習(xí)框架的可用性大大降低了模型實施和培訓(xùn)的復(fù)雜性。

今天,任何熟悉Python或其他支持語言的開發(fā)人員都可以使用這些框架快速開發(fā)能夠運行的機器學(xué)習(xí)模型。各種各樣的平臺。本文將介紹如何在Raspberry Pi 3上開發(fā)機器學(xué)習(xí)應(yīng)用程序之前的機器學(xué)習(xí)堆棧和培訓(xùn)過程。

機器學(xué)習(xí)堆棧

為了支持模型開發(fā),機器學(xué)習(xí)框架提供了一整套資源(圖1)。在典型堆棧的頂部,培訓(xùn)和推理庫提供定義,培訓(xùn)和運行模型的服務(wù)。這些模型反過來建立在內(nèi)核函數(shù)的優(yōu)化實現(xiàn)上,例如卷積和激活函數(shù),如ReLU,以及矩陣乘法等。這些優(yōu)化的數(shù)學(xué)函數(shù)適用于較低級別的驅(qū)動程序,這些驅(qū)動程序提供抽象層以與通用CPU連接,或者在可用時充分利用專用硬件(如圖形處理單元(GPU))。

如何在Raspberry Pi 3上構(gòu)建機器學(xué)習(xí)應(yīng)用程序

圖1:在典型的機器學(xué)習(xí)堆棧中,更高級別的庫提供了實現(xiàn)神經(jīng)網(wǎng)絡(luò)和其他機器學(xué)習(xí)算法的功能,借鑒了專業(yè)的數(shù)學(xué)庫實現(xiàn)針對底層硬件層中的CPU和GPU優(yōu)化的內(nèi)核函數(shù)。 (圖片來源:Google)

隨著提供這些堆棧的TensorFlow等機器學(xué)習(xí)框架的可用性,無論硬件目標(biāo)如何,在應(yīng)用程序中實現(xiàn)機器學(xué)習(xí)的開發(fā)過程大致相同。在不同硬件平臺上利用TensorFlow的能力允許開發(fā)人員開始在相對適度的硬件平臺上探索模型開發(fā),然后利用這些經(jīng)驗在更強大的硬件上開發(fā)機器學(xué)習(xí)應(yīng)用程序。

預(yù)計專業(yè)的高性能人工智能AI芯片最終將為開發(fā)人員提供實現(xiàn)復(fù)雜機器學(xué)習(xí)算法的能力。在此之前,開發(fā)人員可以開始評估機器學(xué)習(xí)并使用通用平臺創(chuàng)建真正的機器學(xué)習(xí)應(yīng)用程序,包括Raspberry Pi Foundation的Raspberry Pi 3,或任何基于通用處理器(如Arm ?)的現(xiàn)成開發(fā)板。 Cortex ? -A系列MCU或Arm Cortex-M系列MCU。

Raspberry Pi 3作為機器學(xué)習(xí)應(yīng)用程序的開發(fā)平臺提供了一些直接的優(yōu)勢。其Arm Cortex-A53四核處理器提供了顯著的性能,而核心的NEON單指令,多數(shù)據(jù)(SIMD)擴展能夠執(zhí)行一定程度的多媒體和機器學(xué)習(xí)類型處理。但是,開發(fā)人員可以使用任意數(shù)量的兼容硬件附件輕松擴展基礎(chǔ)Raspberry Pi 3硬件平臺。

例如,要創(chuàng)建下面描述的機器學(xué)習(xí)圖像識別系統(tǒng),開發(fā)人員可以添加相機,如800萬像素Raspberry Pi相機模塊v2或其低光Pi NoIR相機(圖2)。

圖2:低 - 諸如Raspberry Pi 3之類的成本板為機器學(xué)習(xí)開發(fā)提供了一個有用的平臺,支持諸如用于開發(fā)圖像分類應(yīng)用程序的相機模塊之類的附加組件。 (圖片來源:Raspberry Pi Foundation)

在軟件方面,Raspberry Pi社區(qū)創(chuàng)建了一個同樣豐富的生態(tài)系統(tǒng),開發(fā)人員可以在其中找到包含完整的預(yù)編譯二進制輪文件的分發(fā)版,以便在Raspberry上安裝TensorFlow皮。 TensorFlow在Raspberry Pi車輪存儲庫piwheels.org上為Python 3.4和3.5提供了這些車輪文件?;蛘撸捎贒ocker現(xiàn)在正式支持Arm架構(gòu),開發(fā)人員可以使用dockerhub.com中的合適容器。

實現(xiàn)機器學(xué)習(xí)模型

使用這種軟件,Raspberry Pi 3和相機模塊的組合,開發(fā)人員可以使用Arm的示例代碼構(gòu)建一個簡單的機器學(xué)習(xí)手勢識別應(yīng)用程序。此應(yīng)用程序僅用于檢測用戶何時做出特定手勢:在這種情況下,以一種慶祝手勢向空中舉手。

首先,使用Python腳本(記錄。 py)記錄幾次執(zhí)行相同手勢的人的短視頻片段。由于此應(yīng)用程序應(yīng)盡可能簡單,因此下一步將使用TensorFlow中嵌入的Keras機器學(xué)習(xí)應(yīng)用程序編程接口(API)開始培訓(xùn)。在此示例中,訓(xùn)練過程在另一個Python腳本(train.py)中定義,該腳本包括Keras模型定義和訓(xùn)練序列(清單1)。

復(fù)制 def main():. 。 。 model_file = argv [1] recording_files = argv [2:] feature_extractor = PiNet()。 。 。 for i,filename in enumerate(recording_files):stdout.write('%s'%filename)stdout.flush()with open(filename,'rb')as f:x = load(f)features = [feature_extractor.features (f)對于f in x] label = np.zeros((len(recording_files),))label [i] = 1.#在該列的文件欄中創(chuàng)建一個帶有1的標(biāo)簽xs + = features#添加從此文件加載的幀的功能ys + = [label] * len(x)#為文件中的每個幀添加標(biāo)簽class_count [i] = len(x)print(“創(chuàng)建網(wǎng)絡(luò)以對%s進行分類“%','。join(recording_files))classifier = make_classifier(xs [0] .shape,len(recording_files))print(”訓(xùn)練網(wǎng)絡(luò)將高級功能映射到%d類別“%len(recording_files)) classifier.fit([np.array(xs)],[np.array(ys)],epochs = 20,shuffle = True)print(“現(xiàn)在我們保存這個模型,以便我們可以隨時部署它”)分類器。 save(model_file)def make_classifier(input_shape,num_classes):“”“制作一個非常簡單的分類器圖層:GaussianNoise:添加隨機噪聲到pre發(fā)泄我們的分類器記住具體的例子。展平:輸入可能來自具有形狀(x,y,深度)的層;將其壓平至1D。密集:每個類提供一個輸出,按比例縮放為1(softmax)“”##定義一個簡單的神經(jīng)網(wǎng)絡(luò)net_input = keras.layers.Input(input_shape)noise = keras.layers.GaussianNoise(0.3)(net_input)flat = keras .layers.Flatten()(noise)net_output = keras.layers.Dense(num_classes,activation ='softmax')(flat)net = keras.models.Model([net_input],[net_output])#在使用前編譯模型損失應(yīng)該與輸出激活函數(shù)匹配,例如#binary_crossentropy用于sigmoid,categorical_crossentropy用于softmax,mse用于線性。#Adam是一個可靠的默認優(yōu)化器,我們可以將學(xué)習(xí)速率保留為默認值.net.compile(optimizer = keras。 optimizers.Adam(),loss ='categorical_crossentropy',metrics = ['accuracy'])return net

清單1:在Arm示例應(yīng)用程序庫的這個片段中,培訓(xùn)過程結(jié)合了一個預(yù)先訓(xùn)練好的模型,該應(yīng)用程序需要簡單的分類器。(代碼來源:Arm)

盡管這個模型很簡單,它實際上非常復(fù)雜,使用了一種稱為轉(zhuǎn)移學(xué)習(xí)的技術(shù)。轉(zhuǎn)移學(xué)習(xí)使用經(jīng)過驗證的模型,該模型使用一個數(shù)據(jù)集作為培訓(xùn)針對不同但相關(guān)問題集的模型的起點。在這種情況下,該應(yīng)用程序使用來自Google的MobileNet模型集的優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型。

由Google開發(fā)的MobileNet模型是CNN在標(biāo)記的事實標(biāo)準(zhǔn)ImageNet數(shù)據(jù)集的子集上進行訓(xùn)練圖片。 MobileNet模型的顯著特點是它們被配置為支持移動設(shè)備或通用板(如Raspberry Pi)所需的減少的資源需求。這種資源減少的成本降低了準(zhǔn)確性。雖然這些模型提供的精確度遠遠低于關(guān)鍵任務(wù)應(yīng)用程序的要求,但MobileNet模型可以證明對于更寬松的要求和轉(zhuǎn)移學(xué)習(xí)中的基本模型非常有用。

對于此應(yīng)用程序,train.py腳本使用MobileNet模型創(chuàng)建一個特征提取器,其中最終分類層已被刪除:

feature_extractor = PiNet()

PiNet函數(shù)只讀取代碼庫中包含的修改后的MobileNet模型。

然后,應(yīng)用程序使用該修改后的模型為此訓(xùn)練數(shù)據(jù)集創(chuàng)建要素集(要素):

features = [feature_extractor.features(f)for f in x]

其中x是一個數(shù)組,包含在初始數(shù)據(jù)收集步驟中由record.py生成的幀。

最后,train.py腳本使用Keras fit方法訓(xùn)練模型和save方法以保存最終模型以供推理使用:

classifier.fit ([np.array(xs)],[np.array(ys)],epochs = 20,shuffle = True)

classifier.save(model_file)

要使用生成的模型文件進行推理,請調(diào)用另一個腳本run.py.此腳本中的關(guān)鍵設(shè)計模式是無限循環(huán),它采用每個幀,計算要素(extractor.features),使用相同的分類器進行推理(classifier.predict),并生成標(biāo)簽的預(yù)測(np.argmax)。預(yù)測只是目標(biāo)手勢是否已經(jīng)發(fā)生(清單2)。

復(fù)制 而True:raw_frame = camera.next_frame()#使用MobileNet獲取此幀的功能z = extractor.features(raw_frame)#使用這些功能,我們可以預(yù)測a 'normal'/'yeah'class(0或1)#Keras期望一組輸入并產(chǎn)生一個輸出數(shù)組classes = classifier.predict(np.array([z]))[0]#smooth the outputs - this添加延遲但減少中斷平滑=平滑* SMOOTH_FACTOR +類*(1.0 - SMOOTH_FACTOR)選擇= np.argmax(平滑)#所選類是概率最高的類#顯示類概率和選定的類摘要='類%d [%s]'%(已選中,''。join('%02.0f %%'%(99 * p)為平滑的p))stderr.write(' r'+ summary)

清單2:Arm示例run.py腳本中的這個片段演示了推理的基本設(shè)計模式,使用相同的預(yù)訓(xùn)練模型提取特征和相同的分類器來執(zhí)行推理。 (代碼源:Arm)

多分類模型

開發(fā)一個應(yīng)用程序來檢測一類輸入,例如單個手勢,這在機器學(xué)習(xí)開發(fā)中是值得的,但機器學(xué)習(xí)應(yīng)用程序通常用于多類分類。另一個Arm示例應(yīng)用程序演示了執(zhí)行此操作所需的步驟,并提供了完成多分類模型開發(fā)通常所需步驟的更完整示例。例如,除了捕獲期望的手勢之外,單個手勢應(yīng)用程序不需要重要的數(shù)據(jù)準(zhǔn)備。相比之下,多分類應(yīng)用程序涉及大量數(shù)據(jù)捕獲和相關(guān)的開發(fā)步驟,以使用Arm提供的Python腳本使用目標(biāo)類(手勢)標(biāo)記捕獲的視頻。在這種情況下,開發(fā)者捕獲不同動作的短視頻剪輯,例如進入或離開房間,指向燈(打開或關(guān)閉),以及制作不同的手勢以開始或停止音樂播放。使用classify.py腳本,查看圖像并輸入相應(yīng)的標(biāo)簽(與每個操作對應(yīng)的整數(shù))。標(biāo)記完成后,保留約10%的標(biāo)記數(shù)據(jù),用于測試模型,如下所述。

使用訓(xùn)練數(shù)據(jù)和保留的測試集,下一步是創(chuàng)建模型本身。與在單個手勢應(yīng)用程序中大量使用預(yù)訓(xùn)練模型不同,此應(yīng)用程序構(gòu)建完整的CNN模型。在這種情況下,使用一系列Keras語句,使用構(gòu)建2D卷積層(Conv2D)的Keras函數(shù)逐層構(gòu)建模型,添加激活層(激活),池化層(MaxPooling2D)等(列表) 3)。

復(fù)制 def main():如果len(argv)!= 3或argv [1] ==' - help':print(“ “”用法:train.py TRAIN_DIR VAL_DIR ...訓(xùn)練一個轉(zhuǎn)換網(wǎng)后保存TRAIN_DIR/model.h5以區(qū)分其子目錄中的圖像?!啊薄埃〆xit(1)train_data_dir = argv [1] val_data_dir = argv [2 ] nb_train_samples = len(glob('%s/*/* .png'%train_data_dir))nb_classes = len(glob('%s/*/'%train_data_dir))batch_size = 100 model = Sequential()model.add( Conv2D(32,(3,3),input_shape =(128,128,3)))model.add(Activation('elu'))model.add(MaxPooling2D(pool_size =(2,2)))model.add (Conv2D(32,(3,3)))model.add(Activation('elu'))model.add(MaxPooling2D(pool_size =(2,2)))model.add(Conv2D(64,(3,3) )))model.add(Activation('elu'))model.add(MaxPooling2D(pool_size =(2,2))) model.add(Flatten())model.add(Dense(64))model.add(Activation('elu'))model.add(Dropout(0.5))model.add(Dense(nb_classes))model.add(激活('softmax'))model.compile(loss ='categorical_crossentropy',optimizer ='adam',metrics = ['accuracy'])

清單3:Arm多分類示例應(yīng)用程序說明了使用Keras函數(shù)逐層構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)。 (代碼源:Arm)

該模型還引入了dropout層的概念(清單3中的Dropout),它提供了一種稱為正則化的模型優(yōu)化形式。在模型訓(xùn)練算法中,正則化因子降低了模型追逐每個特征的趨勢,這可能導(dǎo)致模型中的過度擬合。 Dropout通過將一組隨機神經(jīng)元從處理鏈中刪除而執(zhí)行同樣的功能(圖3)。

如何在Raspberry Pi 3上構(gòu)建機器學(xué)習(xí)應(yīng)用程序

圖3:Dropout通過隨機禁用神經(jīng)元在深層神經(jīng)網(wǎng)絡(luò)中提供正則化,有效地將完全連接的神經(jīng)網(wǎng)絡(luò)(頂部)轉(zhuǎn)換為密度較低的版本(底部) 。 (圖片來源:多倫多大學(xué))

掌握完成的模型后,使用TensorFlow和其他框架內(nèi)置的傳統(tǒng)培訓(xùn)方法。對于非常復(fù)雜的模型,實際的培訓(xùn)過程可能需要數(shù)小時,數(shù)天甚至數(shù)周。雖然開發(fā)人員通常使用GPU來加速培訓(xùn),但是像之前的應(yīng)用程序一樣,使用傳輸學(xué)習(xí)可以幫助減少培訓(xùn)時間。但是,在此多分類應(yīng)用程序中使用完整模型會轉(zhuǎn)化為更長的訓(xùn)練時間。 Arm指出,這個應(yīng)用程序的培訓(xùn)時間在Raspberry Pi上可能很重要。相反,Arm建議開發(fā)人員在自己的工作站上安裝TensorFlow,在工作站上進行培訓(xùn),然后將訓(xùn)練好的模型復(fù)制回Raspberry Pi。

使用模型時,推理過程大部分遵循相同的系列先前為單個手勢應(yīng)用程序顯示的調(diào)用。當(dāng)然,對于這個應(yīng)用程序,推理過程使用清單3中描述的自定義模型,而不是清單1中描述的單個手勢預(yù)訓(xùn)練模型和淺層分類器。除了這個明顯的差異之外,多分類模型開發(fā)還增加了一個額外的步驟用于在生產(chǎn)使用之前測試模型。

在此測試階段,運行模型就像生產(chǎn)推理一樣,但不使用一些新的輸入數(shù)據(jù),而是使用培訓(xùn)中保留的10%標(biāo)記數(shù)據(jù)。由于已經(jīng)知道每個測試圖像推斷的正確答案,因此測試腳本可以記錄實際的準(zhǔn)確度結(jié)果,以便與完成培訓(xùn)時獲得的準(zhǔn)確度結(jié)果進行比較。

除了作為硬度量標(biāo)準(zhǔn)的基本優(yōu)勢之外,測試階段和模型響應(yīng)測試數(shù)據(jù)的方式可以提供關(guān)于可能需要采取哪些步驟來改進模型的提示。因為該測試數(shù)據(jù)包括在訓(xùn)練中使用的相同類型的數(shù)據(jù),所以訓(xùn)練的模型應(yīng)該產(chǎn)生具有在訓(xùn)練期間實現(xiàn)的相同精度水平的預(yù)測。對于過度擬合的模型,減少輸入特征的數(shù)量并應(yīng)用更強大的正則化方法。對于有欠配合的模型,請做相反的事情;添加更多功能并減少正規(guī)化量。

基于MCU的應(yīng)用程序

TensorFlow和其他框架均提供一致的模型開發(fā)方法,可應(yīng)用于各種目標(biāo)硬件平臺。然而,它們絕不是唯一的方法。在基于Arm的平臺上開發(fā)機器學(xué)習(xí)應(yīng)用程序時,開發(fā)人員可以轉(zhuǎn)向公司自己的庫。

Arm Compute Library開發(fā)用于支持Arm Cortex-A系列MCU,提供了一整套實現(xiàn)CNN的功能。和其他機器學(xué)習(xí)算法。對于Arm Cortex-M系列MCU,Arm Cortex微控制器軟件接口標(biāo)準(zhǔn)(CMSIS)包括神經(jīng)網(wǎng)絡(luò)(NN)庫。正如CMSIS-DSP擴展用于DSP應(yīng)用的CMSIS一樣,CMSIS-NN提供機器學(xué)習(xí)功能,用于在基于Arm Cortex-M的平臺上實現(xiàn)流行的NN架構(gòu)。例如,使用CMSIS-NN庫在STMicroelectronics NUCLEO-F746ZG開發(fā)板上實現(xiàn)CNN,該開發(fā)板是基于STMicroelectronics Arm Cortex-M7的STM32F746ZG MCU構(gòu)建的。

用CMSIS實現(xiàn)神經(jīng)網(wǎng)絡(luò)-NN,開發(fā)人員可以從TensorFlow或其他框架導(dǎo)入現(xiàn)有模型?;蛘?,他們可以通過一系列CMSIS-NN函數(shù)調(diào)用本地實現(xiàn)CNN。例如,為了實現(xiàn)能夠處理行業(yè)標(biāo)準(zhǔn)CIFAR-10標(biāo)記圖像數(shù)據(jù)集的CNN,開發(fā)人員將逐層構(gòu)建模型,類似于之前針對Keras所示的方法。在這種情況下,CNN層實現(xiàn)為一系列CMSIS-NN函數(shù)調(diào)用。最終的softmax層產(chǎn)生CIFAR-10所需的10個輸出神經(jīng)元(清單4)。

復(fù)制 int main(){。 。 。//conv1 img_buffer2 - > img_buffer1 arm_convolve_HWC_q7_RGB(img_buffer2,CONV1_IM_DIM,CONV1_IM_CH,conv1_wt,CONV1_OUT_CH,CONV1_KER_DIM,CONV1_PADDING,CONV1_STRIDE,conv1_bias,CONV1_BIAS_LSHIFT,CONV1_OUT_RSHIFT,img_buffer1,CONV1_OUT_DIM,(q15_t *)col_buffer,NULL); arm_relu_q7(img_buffer1,CONV1_OUT_DIM * CONV1_OUT_DIM * CONV1_OUT_CH);//pool1 img_buffer1 - > img_buffer2 arm_maxpool_q7_HWC(img_buffer1,CONV1_OUT_DIM,CONV1_OUT_CH,POOL1_KER_DIM,POOL1_PADDING,POOL1_STRIDE,POOL1_OUT_DIM,NULL,img_buffer2);//CONV2 img_buffer2 - > img_buffer1 arm_convolve_HWC_q7_fast(img_buffer2,CONV2_IM_DIM,CONV2_IM_CH,conv2_wt,CONV2_OUT_CH,CONV2_KER_DIM,CONV2_PADDING,CONV2_STRIDE,conv2_bias,CONV2_BIAS_LSHIFT,CONV2_OUT_RSHIFT,img_buffer1,CONV2_OUT_DIM,(q15_t *)col_buffer,NULL); arm_relu_q7(img_buffer1,CONV2_OUT_DIM * CONV2_OUT_DIM * CONV2_OUT_CH);//POOL2 img_buffer1 - > img_buffer2 arm_maxpool_q7_HWC(img_buffer1,CONV2_OUT_DIM,CONV2_OUT_CH,POOL2_KER_DIM,POOL2_PADDING,POOL2_STRIDE,POOL2_OUT_DIM,col_buffer,img_buffer2);//conv3 img_buffer2 - > img_buffer1 arm_convolve_HWC_q7_fast(img_buffer2,CONV3_IM_DIM,CONV3_IM_CH,conv3_wt,CONV3_OUT_CH,CONV3_KER_DIM,CONV3_PADDING ,CONV3_STRIDE,conv3_bias,CONV3_BIAS_LSHIFT,CONV3_OUT_RSHIFT,img_buffer1,CONV3_OUT_DIM,(q15_t *)col_buffer,NULL); arm_relu_q7(img_buffer1,CONV3_OUT_DIM * CONV3_OUT_DIM * CONV3_OUT_CH);//pool3 img_buffer-> img_buffer2 arm_maxpool_q7_HWC(img_buffer1,CONV3_OUT_DIM,CONV3_OUT_CH,POOL3_KER_DIM,POOL3_PADDING,POOL3_STRIDE,POOL3_OUT_DIM,col_buffer,img_buffer2); arm_fully_connected_q7_opt(img_buffer2,ip1_wt,IP1_DIM,IP1_OUT,IP1_BIAS_LSHIFT,IP1_OUT_RSHIFT,ip1_bias,output_data,(q15_t *)img_buffer1); arm_softmax_q7(output_data,10,output_data); for(int i = 0; i <10; i ++){printf(“%d:%d n”,i,output_data [i]); } return 0;}

清單4:在Arm示例CIFAR-10應(yīng)用程序的這個片段中,主例程說明了用于構(gòu)建CIFAR10目標(biāo)卷積神經(jīng)網(wǎng)絡(luò)的一系列調(diào)用。 Arm Cortex微控制器軟件接口標(biāo)準(zhǔn)(CMSIS)神經(jīng)網(wǎng)絡(luò)(NN)庫。 (代碼來源:Arm)

通用平臺缺乏資源來提供基于GPU的系統(tǒng)可能的推理性能。結(jié)果,這些平臺通常不能可靠地支持以維持無閃爍外觀所需的通常幀速率操作的任何類型的“實時”視頻推斷。即便如此,上述CMSIS-NN CIFAR-10模型可以實現(xiàn)大約每秒10的推理速度,這可能足夠快以支持需要有限更新速率的相對簡單的應(yīng)用程序。

持續(xù)發(fā)展簡化的模型,如MobileNet和TensorFlow Lite和Facebook的Caffe2Go等框架,為物聯(lián)網(wǎng)和其他連接應(yīng)用的資源受限設(shè)備實現(xiàn)機器學(xué)習(xí)提供了更多選擇。

結(jié)論

機器學(xué)習(xí)應(yīng)用程序遵循典型的數(shù)據(jù)準(zhǔn)備和培訓(xùn)開發(fā)模式,在不同的目標(biāo)平臺上保持概念上的一致性。因此,開發(fā)人員可以使用低成本開發(fā)板快速獲得實現(xiàn)機器學(xué)習(xí)算法的經(jīng)驗。

隨著機器學(xué)習(xí)庫和針對這些板優(yōu)化的框架的可用性,開發(fā)人員可以使用諸如Raspberry之類的板Pi 3或STMicroelectronics NUCLEO-F746ZG實現(xiàn)了有效的機器學(xué)習(xí)推理引擎,能夠為具有適度要求的應(yīng)用提供有用的結(jié)果。

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

    關(guān)注

    68

    文章

    10707

    瀏覽量

    209472
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    27

    文章

    4597

    瀏覽量

    128174
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3198

    瀏覽量

    57367
  • 機器學(xué)習(xí)
    +關(guān)注

    關(guān)注

    66

    文章

    8306

    瀏覽量

    131866
收藏 人收藏

    評論

    相關(guān)推薦

    何在Raspberry Pi安裝TensorFlow

     在本教程中,我們將學(xué)習(xí)何在 Raspberry Pi 安裝 TensorFlow,并將展示一些在預(yù)訓(xùn)練神經(jīng)網(wǎng)絡(luò)上進行簡單圖像分類的示例
    發(fā)表于 09-01 16:35 ?2089次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b>安裝TensorFlow

    何在Raspbian設(shè)置沒有顯示器和鍵盤的Raspberry Pi

    在本教程中,我們將了解如何在新安裝的 Raspbian 設(shè)置沒有顯示器和鍵盤的 Raspberry Pi。
    發(fā)表于 09-22 16:31 ?1541次閱讀
    如<b class='flag-5'>何在</b>Raspbian<b class='flag-5'>上</b>設(shè)置沒有顯示器和鍵盤的<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>

    如何使用Raspberry Pi3和藍牙構(gòu)建遙控汽車

    今天我們將使用Raspberry Pi 3和藍牙構(gòu)建遙控汽車,在這里我們將使用智能手機作為遙控器來控制汽車。
    的頭像 發(fā)表于 11-21 17:14 ?2305次閱讀
    如何使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi3</b>和藍牙<b class='flag-5'>構(gòu)建</b>遙控汽車

    Raspberry Pi 33 b +的Android Pie 9.0

    Android Pie 9.0。在這個視頻中,我將向您展示如何在最新的Android版本的raspberry pi 3安裝android
    發(fā)表于 09-29 14:28

    使用計算庫在Raspberry PI和HiKey 960分析AlexNet

    的 AlexNet 樣板應(yīng)用。 Arm 機器學(xué)習(xí)(ML) 平臺, 啟用新的應(yīng)用程序和能力。 您必須監(jiān)測軟件的性能, 以確保算法和應(yīng)用程序能提供極好的用戶經(jīng)驗。 您可以使用 Arm 精簡
    發(fā)表于 08-29 08:05

    raspberry pi官網(wǎng)

    Raspberry Pi 宣布推出新的鏡像實用程序 Raspberry Pi Imager,以提供一種更簡單的方法,將操作系統(tǒng)輕松鏡像到 m
    的頭像 發(fā)表于 03-07 10:16 ?5802次閱讀

    Eyer1951正在使用帶有節(jié)拍檢測應(yīng)用程序Raspberry Pi 3 B +

    Eyer1951正在使用帶有節(jié)拍檢測應(yīng)用程序Raspberry Pi 3 B +,該應(yīng)用程序稱為DBNBeatTracker。Eyer19
    的頭像 發(fā)表于 10-28 15:45 ?1471次閱讀

    Raspberry Pi安裝Android的方法

    Raspberry Pi 中使用的流行操作系統(tǒng)是 Raspbian,它是一個基于 linux 的 Raspberry Pi 官方操作系統(tǒng),我們使用它
    的頭像 發(fā)表于 09-05 15:10 ?1.8w次閱讀
    在<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b>安裝Android的方法

    使用Raspberry Pi的OpenCV庫構(gòu)建人臉識別系統(tǒng)

    在本教程中,我們將學(xué)習(xí)如何使用 Raspberry Pi 的 OpenCV 庫構(gòu)建我們自己的人臉識別系統(tǒng)。將此系統(tǒng)安裝在便攜式
    發(fā)表于 09-07 15:48 ?1109次閱讀
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b>的OpenCV庫<b class='flag-5'>構(gòu)建</b>人臉識別系統(tǒng)

    何在Raspberry Pi 3安裝OpenCV4庫

    今天我們將學(xué)習(xí)何在 Raspberry Pi 3 安裝 OpenCV4 庫,以便我們可以將其
    的頭像 發(fā)表于 09-08 16:09 ?1513次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>3</b><b class='flag-5'>上</b>安裝OpenCV4庫

    Raspberry Pi Zero便攜終端的構(gòu)建

    電子發(fā)燒友網(wǎng)站提供《Raspberry Pi Zero便攜終端的構(gòu)建.zip》資料免費下載
    發(fā)表于 01-05 10:43 ?0次下載
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Zero便攜終端的<b class='flag-5'>構(gòu)建</b>

    基于Raspberry PI應(yīng)用程序的典型場景家庭自動化

    電子發(fā)燒友網(wǎng)站提供《基于Raspberry PI應(yīng)用程序的典型場景家庭自動化.zip》資料免費下載
    發(fā)表于 06-13 11:05 ?0次下載
    基于<b class='flag-5'>Raspberry</b> <b class='flag-5'>PI</b>的<b class='flag-5'>應(yīng)用程序</b>的典型場景家庭自動化

    何在Raspberry Pi零2W阻止帶有Pi孔的廣告

    電子發(fā)燒友網(wǎng)站提供《如何在Raspberry Pi零2W阻止帶有Pi孔的廣告.zip》資料免費下載
    發(fā)表于 06-14 10:38 ?0次下載
    如<b class='flag-5'>何在</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>零2W<b class='flag-5'>上</b>阻止帶有<b class='flag-5'>Pi</b>孔的廣告

    使用Raspberry Pi進行機器學(xué)習(xí)智能庫存跟蹤

    電子發(fā)燒友網(wǎng)站提供《使用Raspberry Pi進行機器學(xué)習(xí)智能庫存跟蹤.zip》資料免費下載
    發(fā)表于 06-26 11:02 ?0次下載
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>進行<b class='flag-5'>機器</b><b class='flag-5'>學(xué)習(xí)</b>智能庫存跟蹤

    使用Raspberry Pi來托管服務(wù)應(yīng)用程序以及運行客戶端程序

    電子發(fā)燒友網(wǎng)站提供《使用Raspberry Pi來托管服務(wù)應(yīng)用程序以及運行客戶端程序.zip》資料免費下載
    發(fā)表于 07-04 10:12 ?0次下載
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>來托管服務(wù)<b class='flag-5'>應(yīng)用程序</b>以及運行客戶端<b class='flag-5'>程序</b>