【導(dǎo)讀】過(guò)去數(shù)十萬(wàn)年來(lái),人腦一直堪稱地球上最強(qiáng)大的計(jì)算機(jī)。我們的大腦是無(wú)與倫比的進(jìn)化杰作,它不僅具有邏輯和推理能力,更具有創(chuàng)造力和情感。時(shí)至如今,科學(xué)家依然熱衷于人腦的生物學(xué)研究,而工程師則始終致力于采用硅電子和軟件技術(shù)來(lái)復(fù)刻人腦的功能。
深度學(xué)習(xí)(DL)是一種機(jī)器學(xué)習(xí)(ML)技術(shù)。作為一項(xiàng)新興的人工智能(AI)技術(shù),深度學(xué)習(xí)在第二代英特爾NCS(NCS2)中居于核心地位。深度神經(jīng)網(wǎng)絡(luò)依靠ML算法和樣本訓(xùn)練數(shù)據(jù)來(lái)生成數(shù)學(xué)模型。要生成經(jīng)過(guò)訓(xùn)練的模型,需要非常大量的計(jì)算工作,只有專用于重度計(jì)算的硬件才能勝任,但訓(xùn)練完成后的模型卻可以運(yùn)行在樹(shù)莓派(Raspberry Pi)、NCS2等相對(duì)低成本的硬件上。通過(guò)推測(cè)技術(shù),這些模型在遇到新的現(xiàn)實(shí)世界輸入時(shí)便可以迅速作出預(yù)測(cè)。
例如,如果讓一個(gè)視覺(jué)模型處理成千上萬(wàn)的紅色和綠色蘋果圖片,就可以訓(xùn)練這個(gè)模型識(shí)別這兩種顏色的蘋果。然后,在NCS2上運(yùn)行訓(xùn)練過(guò)的模型,并將通過(guò)網(wǎng)絡(luò)攝像頭獲取的新圖像輸入到模型中,此時(shí)神經(jīng)網(wǎng)絡(luò)便可以對(duì)攝像頭視野中的蘋果進(jìn)行識(shí)別和分類。
物理計(jì)算:讓技術(shù)與現(xiàn)實(shí)更息息相關(guān)
就在不久前,創(chuàng)建人工大腦的想法還純粹是科幻小說(shuō)中的腦洞。如今,雖然我們距離真正的通用AI還有很長(zhǎng)的路要走,但技術(shù)正持續(xù)以疾速發(fā)展,這是不可否認(rèn)的。不過(guò),雖然追求技術(shù)成就本質(zhì)上就值得我們?yōu)橹冻?,但我們不能忘了生活中不可或缺的藝術(shù)和創(chuàng)造。物理計(jì)算可以在無(wú)形的數(shù)字技術(shù)與有形事物的更直觀本質(zhì)之間建立起一座橋梁,并且項(xiàng)目中的「黑科技」本身就有助于化解公眾接受新技術(shù)的障礙,而人工智能顯然就是一項(xiàng)可以從這種相關(guān)性中受益的創(chuàng)新。
在本文所述的項(xiàng)目中,我們將采用尖端的AI驅(qū)動(dòng)機(jī)器視覺(jué)新技術(shù),并將物理計(jì)算為人與技術(shù)間交互帶來(lái)的樂(lè)趣和新奇之處融會(huì)于其中。我們將使用兩個(gè)NCS2、一臺(tái)樹(shù)莓派、一臺(tái)攝像頭和數(shù)個(gè)伺服電機(jī)來(lái)構(gòu)建一臺(tái)面部表情識(shí)別設(shè)備,它可以觀察一個(gè)人的面部并確定其表情,然后根據(jù)特定種類的表情在現(xiàn)實(shí)世界中執(zhí)行某些動(dòng)作。
背景
如果您從沒(méi)有接觸過(guò)神經(jīng)網(wǎng)絡(luò)或從未使用Python編寫過(guò)程序,那么這個(gè)項(xiàng)目就非常適合用來(lái)了解這兩項(xiàng)技能,而且嘗試在一個(gè)項(xiàng)目中集成英特爾第二代神經(jīng)計(jì)算棒(NCS2),這本身也是一種不錯(cuò)的學(xué)習(xí)體驗(yàn)。在此過(guò)程中,當(dāng)您看到機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)等術(shù)語(yǔ)時(shí),與其說(shuō)它們寫在數(shù)據(jù)表或應(yīng)用筆記里面,更不如說(shuō)它們就好像從科幻小說(shuō)的書頁(yè)里飛出來(lái)一般。
圖1:人工智能是一個(gè)廣泛而深入的研究領(lǐng)域,本項(xiàng)目實(shí)現(xiàn)的是卷積神經(jīng)網(wǎng)絡(luò)(CNN)
本項(xiàng)目的核心是NCS2。這是一款USB 3.0設(shè)備,嵌入式系統(tǒng)開(kāi)發(fā)人員若要在自己的產(chǎn)品中實(shí)現(xiàn)基于視覺(jué)的智能,便可以通過(guò)這款設(shè)備獲得近乎即插即用的AI推理功能。NCS2基于Movidius Myriad X視覺(jué)處理單元(VPU)構(gòu)建,這是一款針對(duì)AI優(yōu)化的芯片,對(duì)基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的視覺(jué)計(jì)算可以起到加速作用。使用此技術(shù)可以進(jìn)行對(duì)象識(shí)別和分類(即識(shí)別攝像頭視野中是否存在人臉以及這張臉是否在微笑)。
如果您對(duì)這一切都感到陌生,無(wú)法理解一個(gè)想法如何最終變成一套使用NCS2并借助攝像頭來(lái)識(shí)別和分類物體,并且還真的能夠運(yùn)行起來(lái)的系統(tǒng),那么我們不妨花點(diǎn)時(shí)間來(lái)厘清其中涉及的工作流程。
1、訓(xùn)練神經(jīng)網(wǎng)絡(luò)(NN):神經(jīng)網(wǎng)絡(luò)的訓(xùn)練可以采用多種機(jī)器學(xué)習(xí)框架來(lái)進(jìn)行,包括Caffe、TensorFlow、Kaldi、MXNet和開(kāi)放神經(jīng)網(wǎng)絡(luò)交換(ONNX),其中部分框架可以在臺(tái)式計(jì)算機(jī)上運(yùn)行,還有一些能夠以容器的形式借助AWS或Google Compute Engine等云服務(wù)來(lái)運(yùn)行。對(duì)訓(xùn)練神經(jīng)網(wǎng)絡(luò)而言,算力(CPU和GPU)是最重要的因素;投入的算力越多,最終得出的模型就越快、越靠譜,因?yàn)橐屔窠?jīng)網(wǎng)絡(luò)檢測(cè)一種物體,就必須要用這種物體的圖片來(lái)訓(xùn)練它,而且至少需要用到數(shù)千張描繪簡(jiǎn)單物體的圖片,因而算法需要處理大量數(shù)據(jù),最終導(dǎo)致的結(jié)果就是訓(xùn)練神經(jīng)網(wǎng)絡(luò)需要極高的處理能力。如果使用監(jiān)督學(xué)習(xí)模式進(jìn)行訓(xùn)練,那么訓(xùn)練圖像的數(shù)據(jù)集必須事先進(jìn)行標(biāo)注,這也極有可能耗費(fèi)掉訓(xùn)練人員的大量時(shí)間。
2、下載模型:要讓我們的設(shè)備檢測(cè)出攝像頭拍攝到的物體,模型訓(xùn)練只是第一步,無(wú)論它執(zhí)行起來(lái)是多么的費(fèi)時(shí)。在本文所述的項(xiàng)目中,該模型將檢測(cè)人臉,并對(duì)人臉?biāo)憩F(xiàn)的情感進(jìn)行分類。英特爾NCS2可以和多種流行的框架一起使用,這些框架包括.caffemodel(Caffe)、.pb(TensorFlow)、.params(MXNet)、.onnx(ONNX)和.nnet(Kaldi)。
不過(guò)在這里要告訴大家一個(gè)好消息:一些大神已經(jīng)分享了他們以往訓(xùn)練并生成的模型,并通過(guò)網(wǎng)絡(luò)提供下載;但就和采用其它預(yù)先構(gòu)建的軟件一樣,由于每個(gè)用戶的具體情況各不相同,最終的效果便會(huì)因人而異,也許并不一定如預(yù)期那樣理想。不過(guò),在許多情況下,直接使用預(yù)先訓(xùn)練好的庫(kù)就已經(jīng)足夠。在本文所述的項(xiàng)目中,我們將會(huì)用到人臉檢測(cè)模型,并對(duì)檢測(cè)到的人臉?biāo)龀龅谋砬檫M(jìn)行分類。
3、為推測(cè)硬件準(zhǔn)備模型:獲取到經(jīng)過(guò)訓(xùn)練的模型后,下一步就是通過(guò)一定的準(zhǔn)備工作讓它運(yùn)行在選定的終端設(shè)備上。英特爾的OpenVINO
工具套件正是為此準(zhǔn)備的。該套件提供的模型優(yōu)化器(Model Optimizer)可讀取Caffe、TensorFlow等神經(jīng)網(wǎng)絡(luò)框架產(chǎn)生的數(shù)據(jù),然后輸出中間表示(Intermediate Representation, IR)數(shù)據(jù),其中包含一個(gè).xml文件和一個(gè).bin文件,前者包含了描述神經(jīng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的代碼,后者包含了二進(jìn)制的權(quán)值和閾值數(shù)據(jù);換言之,.xml文件描述了神經(jīng)網(wǎng)絡(luò)內(nèi)部如何互聯(lián),.bin文件則表明了分配給每條路徑的值(權(quán)重)。
4、推測(cè):目前為止,我們還沒(méi)有用上英特爾NCS2。正如前面說(shuō)的那樣,訓(xùn)練模型需要由非?!父叽笊稀沟挠?jì)算硬件來(lái)做。至于「推測(cè)」,說(shuō)白了就是把新的輸入內(nèi)容交給神經(jīng)網(wǎng)絡(luò)來(lái)辨識(shí)、分類和處理,這就是NCS2發(fā)揮作用的地方了。OpenVINO將會(huì)讀取IR內(nèi)容,對(duì)神經(jīng)網(wǎng)絡(luò)執(zhí)行準(zhǔn)備工作,然后將之加載到選定的終端設(shè)備(本例中為NCS2)上,并設(shè)置所需的配置參數(shù)。隨后,NCS2上搭載的推理引擎(Inference Engine, IE)將執(zhí)行該深度學(xué)習(xí)模型,并在提供輸入數(shù)據(jù)時(shí)對(duì)其進(jìn)行推測(cè)。它還提供了一組便于使用的庫(kù),以便將IE的輸出集成到定制的應(yīng)用程序中。
5、使用API開(kāi)發(fā)增值功能:數(shù)十年來(lái),嵌入式系統(tǒng)的固件開(kāi)發(fā)一直由C編程語(yǔ)言主導(dǎo),但近年來(lái)Python在應(yīng)用程序開(kāi)發(fā)方面越來(lái)越受到關(guān)注。隨著MicroPython和CircuitPython分支的創(chuàng)建,Python也開(kāi)始涉足嵌入式開(kāi)發(fā)領(lǐng)域。在本文所述的項(xiàng)目中,我們將采用英特爾的Python API與推理引擎進(jìn)行交互。對(duì)于希望繼續(xù)使用C/C++的人士,英特爾還提供了一個(gè)C++庫(kù)。借助這套Python API,與推理引擎的交互問(wèn)題便可轉(zhuǎn)化為簡(jiǎn)潔的函數(shù)調(diào)用。
物料
本項(xiàng)目將使用4GB版本的樹(shù)莓派4單板機(jī)作為系統(tǒng)核心,此外還包括以下關(guān)鍵組件:
圖2:樹(shù)莓派4依舊保持了小巧的尺寸,但硬件進(jìn)行了大幅度升級(jí)
1、兩個(gè)英特爾NCS2
2、一個(gè)OV5647攝像頭(也可采用USB攝像頭)
3、三個(gè)伺服電機(jī)
物料清單(BOM)
本項(xiàng)目的物料清單如表1所示。或者,您可以單擊此處訪問(wèn)mouser.com加載預(yù)定義的購(gòu)物車,一次性買齊這些部件。本文撰寫時(shí),以下物料清單不含運(yùn)費(fèi)和稅費(fèi)的總價(jià)約為370美元。
表1:AI+物理計(jì)算項(xiàng)目物料清單
工具和其他資源
以下所列是完成本項(xiàng)目推薦使用的工具:
● 基于Windows,運(yùn)行OpenVINO工具套件的計(jì)算機(jī)
● 帶有HDMI端口的電腦顯示器或電視機(jī)
● 無(wú)線或有線Internet連接
● USB 3.0集線器
● USB鍵盤
● USB鼠標(biāo)
● USB攝像頭(可選項(xiàng),不使用OV5647攝像頭時(shí)需要使用)
● 剝線鉗
● 數(shù)字萬(wàn)用表
● 尖嘴鉗
系統(tǒng)概覽
圖3:構(gòu)思想法時(shí),隨筆畫是一種不錯(cuò)的做法
該系統(tǒng)由五個(gè)主要部件構(gòu)成:
1、樹(shù)莓派:新款樹(shù)莓派可謂單板機(jī)(SBC)中的實(shí)力派,它搭載了一顆主頻1.5GHz的Broadcom BCM2711四核Cortex-A72 64位SoC,這里我們采用的是帶4GB LPDDR4-2400 SDRAM的型號(hào)。該產(chǎn)品采用已成為現(xiàn)行標(biāo)準(zhǔn)的40引腳GPIO接頭與伺服電機(jī)進(jìn)行交互。同時(shí),樹(shù)莓派還將用于運(yùn)行Python腳本、攝像頭和HDMI監(jiān)視器的主機(jī),并與兩個(gè)NCS2設(shè)備配合工作。
2、神經(jīng)計(jì)算棒:NCS2設(shè)備上將運(yùn)行兩個(gè)神經(jīng)網(wǎng)絡(luò),其中一個(gè)神經(jīng)網(wǎng)絡(luò)負(fù)責(zé)對(duì)攝像頭獲取的視頻流進(jìn)行分析,檢測(cè)視頻幀中是否出現(xiàn)人臉;另一個(gè)神經(jīng)網(wǎng)絡(luò)則負(fù)責(zé)推測(cè)這個(gè)人的臉上流露出怎樣的表情。
3、攝像頭:攝像頭會(huì)將圖像流輸入到NCS設(shè)備進(jìn)行分析。本項(xiàng)目中可以使用USB攝像頭,也可以使用Raspberry Pi OV5647攝像頭。運(yùn)行Python腳本時(shí),可以借助一個(gè)命令行標(biāo)志來(lái)設(shè)置使用的攝像頭。
4、伺服電機(jī):三個(gè)伺服器將與機(jī)械滑塊一同使用,以便與現(xiàn)實(shí)世界互動(dòng)。具體而言,本項(xiàng)目將根據(jù)用戶對(duì)攝像頭呈現(xiàn)的表情向用戶展示不同顏色的花朵:黃色表示快樂(lè),藍(lán)色表示悲傷,紅色則表示憤怒。
5、HDMI監(jiān)視器:HDMI監(jiān)視器將用于向用戶顯示終端和攝像頭的輸出內(nèi)容。
構(gòu)建電子元件
圖4:硬件之間的連接非常簡(jiǎn)單明了
本項(xiàng)目組裝非常簡(jiǎn)單明了,唯一需要提出的建議是等到樹(shù)莓派完全啟動(dòng)后再將NCS2插入U(xiǎn)SB中;如果在初次啟動(dòng)前插入NCS2,樹(shù)莓派可能會(huì)無(wú)法啟動(dòng),雖然我們并不清楚問(wèn)題是不是出在這里。后續(xù)的啟動(dòng)沒(méi)有問(wèn)題,并且也不會(huì)再重現(xiàn)該問(wèn)題。
1、將micro-HDMI轉(zhuǎn)HDMI適配器插入樹(shù)莓派。
2、將HDMI數(shù)據(jù)線插入電腦顯示器或電視機(jī)的HDMI端口。
3、將刷入最新版Raspbian的MicroSD存儲(chǔ)卡插入到樹(shù)莓派。有關(guān)如何將Raspbian操作系統(tǒng)安裝到MicroSD存儲(chǔ)卡上的說(shuō)明,請(qǐng)單擊此處。
4、將USB鍵盤和鼠標(biāo)插入U(xiǎn)SB 2.0端口,也就是帶黑色塑料連接器的USB端口,而不是帶藍(lán)色塑料連接器的USB 3.0端口。
5、安裝攝像頭。
(1) 如果使用OV5647攝像機(jī),請(qǐng)輕輕打開(kāi)連接器,插入排線,然后合上連接器。
(2) 如果使用USB攝像頭,請(qǐng)將其插入樹(shù)莓派的USB 3.0端口。
6、將USB-C電源的一端插入交流電源插座。
7、將USB-C電源的另一端插入樹(shù)莓派的USB電源插孔。
8、啟動(dòng)樹(shù)莓派并完成初始設(shè)置,然后關(guān)閉樹(shù)莓派。初始設(shè)置步驟至此完成。
圖5:樹(shù)莓派的PIO接頭引腳分布
完成初始設(shè)置后,下一步就是安裝伺服電機(jī)。我們將在樹(shù)莓派上安裝三個(gè)伺服電機(jī)。
9、使用連接線將樹(shù)莓派的GND引腳連接到迷你試驗(yàn)板的GND(藍(lán)色)電極。
10、使用連接線將樹(shù)莓派的5V引腳連接到迷你試驗(yàn)板的電源(紅色)電極。
11、將每個(gè)伺服電機(jī)的GND電纜連接到試驗(yàn)板的GND電極。
12、將每個(gè)伺服電機(jī)的Vcc電纜連接到試驗(yàn)板的電源電極。
13、將第一個(gè)伺服電機(jī)的控制信號(hào)連接到樹(shù)莓派的GPIO12引腳。此為「快樂(lè)」伺服電機(jī)。
14、將第一個(gè)伺服電機(jī)的控制信號(hào)連接到樹(shù)莓派的GPIO13引腳。此為「悲傷」伺服電機(jī)。
15、將第一個(gè)伺服電機(jī)的控制信號(hào)連接到樹(shù)莓派的GPIO18引腳。此為「憤怒」伺服電機(jī)。
現(xiàn)在,伺服電機(jī)接線完成,接下來(lái)要進(jìn)行最后的組裝步驟,就是實(shí)現(xiàn)與兩個(gè)NCS設(shè)備共同工作。
1、將兩個(gè)英特爾神經(jīng)計(jì)算棒插入U(xiǎn)SB 3.0集線器。暫時(shí)先不要把集線器插入到樹(shù)莓派。
2、再次啟動(dòng)樹(shù)莓派并登錄。
3、安裝運(yùn)行NCS設(shè)備所需的軟件(參見(jiàn)本文的“軟件”一節(jié)),然后再次重新啟動(dòng)樹(shù)莓派??吹街甘竞?,將USB 3.0集線器插入樹(shù)莓派的USB 3.0端口。
出處:貿(mào)澤電子公眾號(hào)
微信號(hào):mouserelectronics