在當(dāng)今技術(shù)飛速發(fā)展的環(huán)境中,邊緣機(jī)器學(xué)習(xí)(邊緣ML)正在成為一股變革力量,重塑我們實(shí)時處理和分析數(shù)據(jù)的方式。這種創(chuàng)新技術(shù)直接在邊緣設(shè)備上部署ML模型,帶來了新一波響應(yīng)式智能應(yīng)用。
傳統(tǒng)的ML模型依賴集中式云服務(wù)器進(jìn)行大量數(shù)據(jù)處理,而邊緣ML將計(jì)算負(fù)擔(dān)轉(zhuǎn)移到本地邊緣設(shè)備上,從而實(shí)現(xiàn)即時決策,而無需一直依賴遠(yuǎn)程服務(wù)器。這種轉(zhuǎn)變解決了傳統(tǒng)方法在延遲、隱私和帶寬方面固有的挑戰(zhàn)。
邊緣ML的一大關(guān)鍵優(yōu)勢是能夠提供實(shí)時分析。通過直接在邊緣設(shè)備上執(zhí)行推理,應(yīng)用可以對動態(tài)條件做出快速反應(yīng),使其成為時間關(guān)鍵型場景的理想選擇。無論是自動駕駛汽車做出快速決策、智能監(jiān)控?cái)z像頭執(zhí)行區(qū)域監(jiān)控,還是醫(yī)療保健設(shè)備提供及時診斷,邊緣ML所減少的延遲都代表著重大進(jìn)步。
本文將指導(dǎo)您使用NXP Semiconductors FRDM-MCXN947開發(fā)板開展邊緣ML實(shí)際應(yīng)用,并介紹用于生成ML模型的NXP eIQ??Portal。該開發(fā)板搭載的NXP MCX N947微控制器采用eIQ Neutron神經(jīng)處理單元(NPU),設(shè)計(jì)用于縮短推理時間,同時還能延長邊緣ML產(chǎn)品的電池續(xù)航時間。從智慧城市和工業(yè)物聯(lián)網(wǎng)(IIoT)到醫(yī)療保健和消費(fèi)電子產(chǎn)品,邊緣ML的潛在應(yīng)用多種多樣,影響深遠(yuǎn)。
《Jump into Machine Learning with NXP》(實(shí)操項(xiàng)目解鎖NXP產(chǎn)品在邊緣機(jī)器學(xué)習(xí)中的潛力)一文對硬件和軟件設(shè)置進(jìn)行了更詳細(xì)的介紹。
項(xiàng)目材料與資源
項(xiàng)目物料清單(BOM)
- NXP FRDM-MCXN947
項(xiàng)目代碼/軟件
其他資源
- MCUXpresso IDE終端窗口、Tera Term或其他終端模擬器軟件
- Python編程語言
- OpenCV
其他硬件
- Windows PC
- USB Type-C轉(zhuǎn)USB Type-A電纜或Type-C電纜(取決于PC提供的USB端口類型)
帳戶
- NXP帳戶(可免費(fèi)創(chuàng)建)
項(xiàng)目技術(shù)概況
FRDM-MCXN947開發(fā)板(圖1)采用MCX N947微控制器,該MCU有兩個高性能Arm??Cortex?-M33內(nèi)核,每個內(nèi)核的運(yùn)行速度高達(dá)150MHz。該MCU配備2MB閃存、可選的全ECC RAM、DSP協(xié)處理器和集成式eIQ Neutron NPU。NPU可顯著提高M(jìn)L吞吐量,與單核CPU相比,性能最多可提升30倍,因而可大幅縮短設(shè)備的工作時間,降低總體功耗。
圖1:采用MCX N947 MCU的NXP FRDM-MCXN947開發(fā)板。(圖源:貿(mào)澤電子)
多核架構(gòu)通過在模擬和數(shù)字外設(shè)之間智能分配工作負(fù)載,提高了系統(tǒng)性能和效率。此開發(fā)板配備了MCUXpresso Developer Experience支持,經(jīng)過優(yōu)化且使用方便,可以加快嵌入式系統(tǒng)的開發(fā)速度。
MCX N94x系列專為工業(yè)應(yīng)用而設(shè)計(jì),具有更豐富的模擬和電機(jī)控制外設(shè)。
軟件概述
本節(jié)將介紹運(yùn)行本項(xiàng)目示例所需的軟件。有關(guān)安裝說明,請參閱《Jump into Machine Learning with NXP》一文。
MCUXpresso IDE
MCUXpresso集成開發(fā)環(huán)境(IDE)為開發(fā)人員提供基于Eclipse的用戶友好開發(fā)環(huán)境,專為搭載Arm Cortex-M內(nèi)核的NXP MCU量身定制,包括通用跨界MCU和支持無線功能的MCU。此IDE提供各種高級編輯、編譯和調(diào)試功能,包括MCU特定調(diào)試視圖、代碼跟蹤和剖析、多核調(diào)試以及集成的配置工具(圖2)。
圖2:NXP MCUXpresso IDE。(圖源:貿(mào)澤電子)
SDK Builder
MCUXpresso SDK Builder(圖3)通過提供開源驅(qū)動程序、中間件和參考示例應(yīng)用來加快軟件開發(fā)速度。通過SDK Builder,您可以定制并下載與所選處理器或評估板相匹配的軟件開發(fā)套件(SDK),從而簡化開發(fā)流程。我們將在后面創(chuàng)建并安裝SDK。
圖3:NXP MCUXpresso SDK Builder網(wǎng)站。(圖源:貿(mào)澤電子)
eIQ Portal
eIQ Toolkit(圖4)通過直觀的圖形用戶界面(即eIQ Portal)和工作流工具,以及eIQ ML軟件開發(fā)環(huán)境中的命令行主機(jī)工具選項(xiàng),助力ML的開發(fā)。NXP的eIQ Toolkit是與Au-Zone Technologies獨(dú)家合作開發(fā)的,它為開發(fā)人員提供圖形級分析功能和運(yùn)行時洞察力,可優(yōu)化EdgeVerse?處理器上的神經(jīng)網(wǎng)絡(luò)架構(gòu)。它還提供轉(zhuǎn)換模型以便利用eIQ Neutron NPU所需的工具。
圖4:NXP eIQ Portal。(圖源:貿(mào)澤電子)
eIQ工具包為導(dǎo)入數(shù)據(jù)集提供了簡便方法,并配有全面的用戶指南,幫助您了解各種選項(xiàng)。
項(xiàng)目開發(fā)
本節(jié)將介紹如何開始構(gòu)建項(xiàng)目。首先,打開eIQ Portal。
eIQ模型導(dǎo)入與訓(xùn)練
打開eIQ Portal后,單擊Create Project(創(chuàng)建項(xiàng)目)并選擇Import Dataset(導(dǎo)入數(shù)據(jù)集)。這時會出現(xiàn)幾個選項(xiàng)(如用于檢測任務(wù)的VOC數(shù)據(jù)集、用于分類任務(wù)的結(jié)構(gòu)化文件夾、TensorFlow數(shù)據(jù)集),供您加載TensorFlow網(wǎng)站上提供的各種數(shù)據(jù)集(圖5)。
圖5:eIQ Portal數(shù)據(jù)集導(dǎo)入界面。(圖源:貿(mào)澤電子)
導(dǎo)入數(shù)據(jù)集后,您可以捕獲并添加其他映像,或使用增強(qiáng)工具修改現(xiàn)有映像。確認(rèn)無誤后,單擊Portal窗口底部的Select Model(選擇模型)框。
Model Selection(模型選擇)部分(圖6)包含三個選項(xiàng)——Classification(分類)、Segmentation(分割)和Detection(檢測),每個選項(xiàng)都附有說明,以便用戶根據(jù)訓(xùn)練時間和數(shù)據(jù)集大小等因素權(quán)衡利弊。在本文中,我們將使用訓(xùn)練速度更快,更適合測試數(shù)據(jù)集的Classification模型。如果有更高要求的話,可以隨后再使用更復(fù)雜、需要更長訓(xùn)練時間和更大數(shù)據(jù)集的模型,如Detection。
圖6:eIQ Portal的Model Selection窗口。(圖源:貿(mào)澤電子)
接下來,選擇模型性能選項(xiàng)(圖7),包括Performance(性能)、Balanced(平衡)和Accuracy(精度),每個選項(xiàng)的權(quán)重都根據(jù)性能類型和設(shè)計(jì)要求確定。在本例中,我們選擇Balanced。
圖7:eIQ Portal的模型性能選擇界面。(圖源:貿(mào)澤電子)
然后,確定使用何種設(shè)備來推理模型(圖8)。MCX N微控制器包含eIQ Neutron NPU,非常適合ML應(yīng)用。
圖8:eIQ Portal的設(shè)備選擇界面。(圖源:貿(mào)澤電子)
一切就緒后,就可以開始訓(xùn)練模型了。雖然有多個選項(xiàng)可以對訓(xùn)練過程進(jìn)行修改(圖9),但本項(xiàng)目中我們使用默認(rèn)設(shè)置。訓(xùn)練完成后(可能需要幾分鐘),您可以選擇調(diào)整設(shè)置并重新訓(xùn)練,或者繼續(xù)訓(xùn)練,或者進(jìn)入到對訓(xùn)練進(jìn)行驗(yàn)證的步驟。
圖9:eIQ Portal模型訓(xùn)練界面。(圖源:貿(mào)澤電子)
驗(yàn)證過程(圖10)提供了多個可調(diào)參數(shù)。因?yàn)槲覀冞x擇了NPU作為推理目標(biāo),所以必須進(jìn)行量化。評估本步驟和之前步驟中的不同選項(xiàng),以確定哪些參數(shù)最符合您的具體要求。
圖10:eIQ Portal模型驗(yàn)證界面。(圖源:貿(mào)澤電子)
部署模型
模型訓(xùn)練和驗(yàn)證完成后,我們需要將其導(dǎo)出并轉(zhuǎn)換為與NPU兼容的格式。本節(jié)將介紹轉(zhuǎn)換步驟。
導(dǎo)出模型
完成驗(yàn)證后,eIQ Portal會提供部署或?qū)С瞿P偷倪x項(xiàng);本項(xiàng)目中,我們需要導(dǎo)出模型。在左側(cè)菜單中,確保打開Export Quantized Model(導(dǎo)出量化模型)設(shè)置,然后單擊Export Model(導(dǎo)出模型)(圖11)。選擇要導(dǎo)出到的位置,然后等待導(dǎo)出完成。
圖11:導(dǎo)出訓(xùn)練后的模型。(圖源:貿(mào)澤電子)
轉(zhuǎn)換模型
成功導(dǎo)出模型后,將鼠標(biāo)懸停在頂部菜單中的Workspaces(工作區(qū))上,然后選擇Home(主頁)。在eIQ Portal主頁上,單擊Model Tool(模型工具)。在下一個窗口中,單擊Open Model(打開模型)。瀏覽到導(dǎo)出模型保存的位置,選擇該文件,然后單擊Open(打開),進(jìn)入模型工具顯示界面(圖12)。
圖12:導(dǎo)出模型顯示在模型工具顯示界面中。(圖源:貿(mào)澤電子)
單擊窗口左上角的三條橫線圖標(biāo)打開菜單,然后單擊Convert(轉(zhuǎn)換)。在新窗口中,選擇TensorFlow Lite for Neutron (.tflite),打開Conversion Options(轉(zhuǎn)換選項(xiàng))窗口(圖13)。將Neutron target(Neutron目標(biāo))設(shè)為mcxn94x,然后單擊Convert(轉(zhuǎn)換)。選擇要將轉(zhuǎn)換后的模型保存到的位置。
圖13:eIQ模型工具的轉(zhuǎn)換選項(xiàng)。(圖源:貿(mào)澤電子)
將模型集成到MCXN94x NPU中
此時,軟件模型已完成訓(xùn)練、驗(yàn)證、導(dǎo)出和轉(zhuǎn)換,我們將使用MCUXpresso IDE將其集成到代碼中,以便在MCX N94x上運(yùn)行。如果尚未安裝IDE,請參閱《Jump into Machine Learning with NXP》一文,了解安裝說明。此外,還可以參閱該文章中的“Building and Installing the SDK”(創(chuàng)建并安裝SDK)說明,以確保正確安裝FRDM-MCXN947開發(fā)套件。
安裝好MCUXpresso IDE和FRDM-MCXN947工具包后,下一步是導(dǎo)入示例項(xiàng)目。在MCUXpresso的Quickstart面板中,單擊Import SDK example(s)...(導(dǎo)入SDK示例)啟動SDK Import Wizard(SDK導(dǎo)入向?qū)В?/p>
1.在選擇板和設(shè)備的頁面中,選擇frdmmcxn947板,然后單擊Next(下一步)。
2.在Import projects(導(dǎo)入項(xiàng)目)窗口(圖14)中,瀏覽到eiq_examples,然后選擇tflm_cifar10。
3.單擊Next。
圖14:MCUXpresso的SDK Import Wizard。(圖源:貿(mào)澤電子)
新建的示例程序?qū)⒊霈F(xiàn)在IDE左上角的Project Explorer(項(xiàng)目資源管理器)中。
1.在Project Explorer中,瀏覽至Source文件夾并展開顯示子文件夾,然后右鍵單擊Model
2.單擊New(新建),然后選擇File from Template(從模板創(chuàng)建文件)。
3.在New File(新建文件)窗口(圖15)中,在File name:(文件名)字段輸入新文件的名稱,然后選擇Configure(配置)。
圖15:從模板創(chuàng)建新文件。(圖源:貿(mào)澤電子)
4.在Preferences (Filtered)(首選項(xiàng) (篩選))窗口(圖16)中,選擇Assembly Source File(程序集源文件),然后單擊Apply and Close(應(yīng)用并關(guān)閉)。
圖16:模板首選項(xiàng)。(圖源:貿(mào)澤電子)
創(chuàng)建文件后,在Project Explorer中添加以下代碼行(圖17)。請將custom_model_converted_V1.tflite替換為您使用的文件名。
.section .rodata
.align 16
.global custom_model_data
.global custom_model_data_end
custom_model_data:
.incbin "/source/model/custom_model_converted_V1.tflite"
custom_model_data_end:
然后,瀏覽至轉(zhuǎn)換后的tflite文件所在位置并復(fù)制模型。在MCUXpresso IDE中,將模型文件粘貼到Model文件夾中。
圖17:新建的程序集源文件,包含修改后的代碼。(圖源:貿(mào)澤電子)
接下來,更新model.cpp,使圖18中突出顯示的部分與custom_model_data[]匹配。同時,更新修改model_cifarnet_ops_npu.cpp,確保自定義模型使用的所有運(yùn)算符都更新/添加到s_microOpResolver中(圖19)。
圖18:編輯model.cpp文件。(圖源:貿(mào)澤電子)
圖19:編輯model_cifarnet_ops_npu.cpp文件。(圖源:貿(mào)澤電子)
測試模型
接下來,我們要準(zhǔn)備測試數(shù)據(jù),然后對模型進(jìn)行測試。下面的Python腳本可以輕松轉(zhuǎn)換圖像,并將其導(dǎo)出到C數(shù)組中,以便在示例代碼中使用。在本示例中,我們將使用Python腳本,把船的圖像替換為鳥的圖像。
img = cv2.imread('bird.jpg')
img = cv2.resize(img, (128,128))
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
with open('bird.h', 'w') as fout:
print('#define STATIC_IMAGE_NAME "bird"', file=fout)
print('static const uint8_t bird [] = {', file=fout)
img.tofile(fout, ',', '0x%02x')
print('};n', file=fout)
將轉(zhuǎn)換后的“.h”文件復(fù)制到項(xiàng)目中的image文件夾,該文件夾與model文件夾位于同一位置。然后,修改image_load.c文件以指向新的圖像數(shù)組(圖20)。
圖20:修改后的image_load.c文件。(圖源:貿(mào)澤電子)
打開終端界面(如Putty),按如下所示配置串行設(shè)置:
- 波特率:115200
- 數(shù)據(jù)位:8
- 奇偶校驗(yàn)位:無
- 停止位:1
- 流控制:無
接下來,在MCUXpresso IDE中選擇Debug(調(diào)試),以構(gòu)建并運(yùn)行更新后的項(xiàng)目代碼。如果構(gòu)建過程和代碼運(yùn)行成功,終端窗口將出現(xiàn)圖21所示的輸出。
圖21:終端窗口輸出。(圖源:貿(mào)澤電子)
該序列可用于評估不同的圖像,以驗(yàn)證模型的準(zhǔn)確性。
結(jié)語
邊緣ML的變革性潛能在于其提供實(shí)時見解的能力。如本項(xiàng)目所示,在邊緣設(shè)備上進(jìn)行直接推理,可使應(yīng)用對不斷變化的條件迅速做出反應(yīng),這在時間緊迫的情況下尤為有利。
作者簡介
Joseph Downing于2011年加入貿(mào)澤電子,擔(dān)任技術(shù)支持專員,后轉(zhuǎn)為技術(shù)內(nèi)容專員。此外,Joseph還曾就職于Intel、Radisys和Planar等電子行業(yè)公司,擁有20多年的工作經(jīng)驗(yàn)。作為一名狂熱的創(chuàng)客,Joseph幫助管理并向應(yīng)用與技術(shù)專欄(Mouser.com網(wǎng)站上)以及貿(mào)易展會提供技術(shù)項(xiàng)目和材料。