導读(dú):十(shí)年(nián)前(qián),微软(ruǎn)創始人(rén)比爾·蓋茨在(zài)其文(wén)章(zhāng)《A Robot in Every Home》里(lǐ)提(tí)出(chū)他(tā)对(duì)未来(lái)的(de)憧憬:機(jī)器人(rén)将会(huì)像个(gè)人(rén)電(diàn)腦一(yī)樣(yàng)進(jìn)入(rù)每个(gè)家(jiā)庭,为(wèi)人(rén)類(lèi)服(fú)务。随着人(rén)工智能(néng)以(yǐ)及(jí)智能(néng)硬(yìng)件(jiàn)在(zài)过(guò)去(qù)幾(jǐ)年(nián)的(de)飛速發(fà)展(zhǎn),到(dào)了(le)2016年(nián)的(de)今天(tiān),笔(bǐ)者(zhě)堅信(xìn)各(gè)項技術(shù)已臻成(chéng)熟,智能(néng)機(jī)器人(rén)很快(kuài)進(jìn)入(rù)商業化(huà)时(shí)代(dài),蓋茨的(de)願景也(yě)极(jí)有(yǒu)可(kě)能(néng)在(zài)5到(dào)10年(nián)內(nèi)实現(xiàn)。
要(yào)想(xiǎng)機(jī)器人(rén)有(yǒu)智能(néng),必先(xiān)賦予其感(gǎn)知能(néng)力。感(gǎn)知計(jì)算,特(tè)别是(shì)視覺以(yǐ)及(jí)深度(dù)学習,通(tòng)常計(jì)算量(liàng)比較大,对(duì)性(xìng)能(néng)要(yào)求高(gāo)。但是(shì)機(jī)器人(rén)受電(diàn)池容量(liàng)限制,可(kě)分(fēn)配給(gěi)計(jì)算的(de)能(néng)源比較低。除此(cǐ)之外(wài),由(yóu)于(yú)感(gǎn)知算法不(bù)斷發(fà)展(zhǎn),我(wǒ)们(men)還(huán)需要(yào)不(bù)斷更(gèng)新機(jī)器人(rén)的(de)感(gǎn)知处理器。與(yǔ)其它(tā)处理器相比,FPGA具有(yǒu)低能(néng)耗、高(gāo)性(xìng)能(néng)以(yǐ)及(jí)可(kě)編程等特(tè)性(xìng),十(shí)分(fēn)适合感(gǎn)知計(jì)算。本(běn)文(wén)首先(xiān)解(jiě)析FPGA的(de)特(tè)性(xìng),然後(hòu)介紹FPGA对(duì)感(gǎn)知算法的(de)加速以(yǐ)及(jí)节(jié)能(néng),最(zuì)後(hòu)談一(yī)談機(jī)器人(rén)操作系(xì)統对(duì)FPGA的(de)支持(chí)。
FPGA:高(gāo)性(xìng)能(néng)、低能(néng)耗、可(kě)編程
與(yǔ)其它(tā)計(jì)算载體(tǐ)如(rú)CPU與(yǔ)GPU相比,FPGA具有(yǒu)高(gāo)性(xìng)能(néng)、低能(néng)耗以(yǐ)及(jí)可(kě)硬(yìng)件(jiàn)編程的(de)特(tè)點(diǎn)。图(tú)1介紹了(le)FPGA的(de)硬(yìng)件(jiàn)架構,每个(gè)FPGA主(zhǔ)要(yào)由(yóu)三(sān)个(gè)部(bù)分(fēn)組成(chéng):輸入(rù)輸出(chū)邏輯,主(zhǔ)要(yào)用(yòng)于(yú)FPGA與(yǔ)外(wài)部(bù)其他(tā)部(bù)件(jiàn),比如(rú)傳感(gǎn)器的(de)通(tòng)信(xìn);計(jì)算邏輯部(bù)件(jiàn),主(zhǔ)要(yào)用(yòng)于(yú)建造計(jì)算模块(kuài);以(yǐ)及(jí)可(kě)編程連(lián)接网(wǎng)絡,主(zhǔ)要(yào)用(yòng)于(yú)連(lián)接不(bù)同(tóng)的(de)計(jì)算邏輯部(bù)件(jiàn)去(qù)組成(chéng)一(yī)个(gè)計(jì)算器。在(zài)編程时(shí),我(wǒ)们(men)可(kě)以(yǐ)把計(jì)算邏輯映射到(dào)硬(yìng)件(jiàn)上(shàng),通(tòng)过(guò)調整网(wǎng)絡連(lián)接把不(bù)同(tóng)的(de)邏輯部(bù)件(jiàn)連(lián)通(tòng)在(zài)一(yī)起去(qù)完成(chéng)一(yī)个(gè)計(jì)算任务。比如(rú)要(yào)完成(chéng)一(yī)个(gè)图(tú)像特(tè)征提(tí)取(qǔ)的(de)任务,我(wǒ)们(men)会(huì)連(lián)接FPGA的(de)輸入(rù)邏輯與(yǔ)照相機(jī)的(de)輸出(chū)邏輯,讓图(tú)片(piàn)可(kě)以(yǐ)進(jìn)入(rù)FPGA。然後(hòu),連(lián)接FPGA的(de)輸入(rù)邏輯與(yǔ)多(duō)个(gè)計(jì)算邏輯部(bù)件(jiàn),讓这(zhè)些計(jì)算邏輯部(bù)件(jiàn)并行提(tí)取(qǔ)每个(gè)图(tú)片(piàn)區(qū)域的(de)特(tè)征點(diǎn)。最(zuì)後(hòu),我(wǒ)们(men)可(kě)以(yǐ)連(lián)接計(jì)算邏輯部(bù)件(jiàn)與(yǔ)FPGA的(de)輸出(chū)邏輯,把特(tè)征點(diǎn)彙總(zǒng)後(hòu)輸出(chū)。由(yóu)此(cǐ)可(kě)見(jiàn),FPGA通(tòng)常把算法的(de)數據(jù)流以(yǐ)及(jí)執行指令写死在(zài)硬(yìng)件(jiàn)邏輯中(zhōng),從而(ér)避免了(le)CPU的(de)Instruction Fetch與(yǔ)Instruction Decode 工作。
虽然FPGA的(de)頻率一(yī)般比CPU低,但是(shì)可(kě)以(yǐ)用(yòng)FPGA实現(xiàn)并行度(dù)很大的(de)硬(yìng)件(jiàn)計(jì)算器。比如(rú)一(yī)般CPU每次(cì)只(zhī)能(néng)处理4到(dào)8个(gè)指令,在(zài)FPGA上(shàng)使用(yòng)數據(jù)并行的(de)方(fāng)法可(kě)以(yǐ)每次(cì)处理256个(gè)或(huò)者(zhě)更(gèng)多(duō)的(de)指令,讓FPGA可(kě)以(yǐ)处理比CPU多(duō)很多(duō)的(de)數據(jù)量(liàng)。另(lìng)外(wài),如(rú)上(shàng)所(suǒ)述,在(zài)FPGA中(zhōng)一(yī)般不(bù)需要(yào)Instruction Fetch與(yǔ)Instruction Decode,減少(shǎo)了(le)这(zhè)些流水(shuǐ)線(xiàn)工序後(hòu)也(yě)节(jié)省(shěng)了(le)不(bù)少(shǎo)計(jì)算时(shí)間(jiān)。
为(wèi)了(le)讓读(dú)者(zhě)对(duì)FPGA加速有(yǒu)更(gèng)好(hǎo)的(de)了(le)解(jiě),我(wǒ)们(men)總(zǒng)結了(le)微软(ruǎn)研究院(yuàn)2010年(nián)对(duì)BLAS算法的(de)FPGA加速研究。BLAS是(shì)矩阵(zhèn)運算的(de)底层庫,被(bèi)廣泛運用(yòng)到(dào)高(gāo)性(xìng)能(néng)計(jì)算、機(jī)器学習等領域。在(zài)这(zhè)个(gè)研究中(zhōng),微软(ruǎn)的(de)研究人(rén)員分(fēn)析了(le)CPU、GPU以(yǐ)及(jí)FPGA对(duì)BLAS的(de)加速以(yǐ)及(jí)能(néng)耗。图(tú)2对(duì)比了(le)FPGA以(yǐ)及(jí)CPU、GPU執行GaxPy算法每次(cì)叠代(dài)的(de)时(shí)間(jiān),相对(duì)于(yú)CPU,GPU與(yǔ)FPGA都达(dá)到(dào)了(le)60%的(de)加速。图(tú)中(zhōng)顯示的(de)是(shì)小矩阵(zhèn)運算,随着矩阵(zhèn)的(de)增大,GPU與(yǔ)FPGA相对(duì)與(yǔ)CPU的(de)加速比会(huì)越来(lái)越明(míng)顯。
FPGA相对(duì)于(yú)CPU與(yǔ)GPU有(yǒu)明(míng)顯的(de)能(néng)耗优勢,主(zhǔ)要(yào)有(yǒu)两(liǎng)个(gè)原因(yīn)。首先(xiān),在(zài)FPGA中(zhōng)沒(méi)有(yǒu)Instruction Fetch與(yǔ)Instruction Decode,在(zài)Intel的(de)CPU里(lǐ)面(miàn),由(yóu)于(yú)使用(yòng)的(de)是(shì)CISC架構,僅僅Decoder就(jiù)占整个(gè)芯片(piàn)能(néng)耗的(de)50%;在(zài)GPU里(lǐ)面(miàn),Fetch與(yǔ)Decode也(yě)消耗了(le)10%~20%的(de)能(néng)源。其次(cì),FPGA的(de)主(zhǔ)頻比CPU與(yǔ)GPU低很多(duō),通(tòng)常CPU與(yǔ)GPU都在(zài)1GHz到(dào)3GHz之間(jiān),而(ér)FPGA的(de)主(zhǔ)頻一(yī)般在(zài)500MHz以(yǐ)下(xià)。如(rú)此(cǐ)大的(de)頻率差使得FPGA消耗的(de)能(néng)源遠(yuǎn)低于(yú)CPU與(yǔ)GPU。
图(tú)3对(duì)比了(le)FPGA以(yǐ)及(jí)CPU、GPU執行GaxPy算法每次(cì)叠代(dài)的(de)能(néng)源消耗。可(kě)以(yǐ)發(fà)現(xiàn)CPU與(yǔ)GPU的(de)能(néng)耗是(shì)相仿的(de),而(ér)FPGA的(de)能(néng)耗只(zhī)是(shì)CPU與(yǔ)GPU的(de)8%左(zuǒ)右(yòu)。由(yóu)此(cǐ)可(kě)見(jiàn),FPGA計(jì)算比CPU快(kuài)60%,而(ér)能(néng)耗只(zhī)是(shì)CPU的(de)1/12,有(yǒu)相當大的(de)优勢,特(tè)别在(zài)能(néng)源受限的(de)情(qíng)況下(xià),使用(yòng)FPGA会(huì)使電(diàn)池壽命延长不(bù)少(shǎo)。
由(yóu)于(yú)FPGA是(shì)可(kě)硬(yìng)件(jiàn)編程的(de),相对(duì)于(yú)ASIC而(ér)言,使用(yòng)FPGA可(kě)以(yǐ)对(duì)硬(yìng)件(jiàn)邏輯進(jìn)行叠代(dài)更(gèng)新。但是(shì)FPGA也(yě)会(huì)被(bèi)诟病,因(yīn)为(wèi)把算法写到(dào)FPGA硬(yìng)件(jiàn)并不(bù)是(shì)一(yī)个(gè)容易的(de)过(guò)程,相比在(zài)CPU與(yǔ)GPU上(shàng)編程技術(shù)門(mén)檻高(gāo)许多(duō),開(kāi)發(fà)周期(qī)也(yě)会(huì)长很多(duō)。
在(zài)傳統的(de)FPGA開(kāi)發(fà)流程中(zhōng),我(wǒ)们(men)需要(yào)把C/C++写成(chéng)的(de)算法逐行翻譯成(chéng)基于(yú)Verilog的(de)硬(yìng)件(jiàn)語(yǔ)言,然後(hòu)再編譯Verilog,把邏輯写入(rù)硬(yìng)件(jiàn)。随着近(jìn)幾(jǐ)年(nián)FPGA技術(shù)的(de)發(fà)展(zhǎn),從C直(zhí)接編譯到(dào)FPGA的(de)技術(shù)已經(jīng)逐漸成(chéng)熟,并已在(zài)百(bǎi)度(dù)廣泛被(bèi)使用(yòng)。在(zài)C-to-FPGA開(kāi)發(fà)流程中(zhōng),我(wǒ)们(men)可(kě)以(yǐ)在(zài)CC++的(de)代(dài)碼中(zhōng)加Pragma,指出(chū)哪个(gè)計(jì)算Kernel應(yìng)該被(bèi)加速,然後(hòu)C-to-FPGA引擎会(huì)自(zì)動(dòng)把代(dài)碼編譯成(chéng)硬(yìng)件(jiàn)。在(zài)我(wǒ)们(men)的(de)經(jīng)验(yàn)中(zhōng),使用(yòng)傳統開(kāi)發(fà)流程,完成(chéng)一(yī)个(gè)項目大約需要(yào)半年(nián)时(shí)間(jiān),而(ér)使用(yòng)了(le)C-to-FPGA開(kāi)發(fà)流程後(hòu),一(yī)个(gè)項目大約两(liǎng)周便可(kě)完成(chéng),效率提(tí)升(shēng)了(le)10倍以(yǐ)上(shàng)。
感(gǎn)知計(jì)算在(zài)FPGA上(shàng)的(de)加速
接下(xià)来(lái)主(zhǔ)要(yào)介紹機(jī)器人(rén)感(gǎn)知計(jì)算在(zài)FPGA上(shàng)的(de)加速,特(tè)别是(shì)特(tè)征提(tí)取(qǔ)與(yǔ)位置追蹤的(de)計(jì)算(可(kě)以(yǐ)認为(wèi)是(shì)機(jī)器人(rén)的(de)眼(yǎn)睛),以(yǐ)及(jí)深度(dù)学習計(jì)算(可(kě)以(yǐ)認为(wèi)是(shì)機(jī)器人(rén)的(de)大腦)。當機(jī)器人(rén)有(yǒu)了(le)眼(yǎn)睛以(yǐ)及(jí)大腦後(hòu),就(jiù)可(kě)以(yǐ)在(zài)空間(jiān)中(zhōng)移動(dòng)并定(dìng)位自(zì)己,在(zài)移動(dòng)过(guò)程中(zhōng)識别所(suǒ)見(jiàn)到(dào)的(de)物(wù)體(tǐ)。
特(tè)征提(tí)取(qǔ)與(yǔ)位置追蹤
特(tè)征提(tí)取(qǔ)與(yǔ)位置追蹤的(de)主(zhǔ)要(yào)算法包(bāo)括SIFT、SURF和(hé)SLAM。SIFT是(shì)一(yī)種(zhǒng)檢测局(jú)部(bù)特(tè)征的(de)算法,通(tòng)过(guò)求一(yī)幅图(tú)中(zhōng)的(de)特(tè)征點(diǎn)及(jí)其有(yǒu)關(guān)規模和(hé)方(fāng)向(xiàng)的(de)描述得到(dào)特(tè)征并進(jìn)行图(tú)像特(tè)征點(diǎn)匹(pǐ)配。SIFT特(tè)征匹(pǐ)配算法可(kě)以(yǐ)处理两(liǎng)幅图(tú)像之間(jiān)發(fà)生(shēng)平移、旋轉(zhuǎn)、仿射變(biàn)換情(qíng)況下(xià)的(de)匹(pǐ)配問(wèn)題(tí),具有(yǒu)很強(qiáng)的(de)匹(pǐ)配能(néng)力。SIFT算法有(yǒu)三(sān)大工序:1、提(tí)取(qǔ)關(guān)鍵點(diǎn);2、对(duì)關(guān)鍵點(diǎn)附加詳细(xì)的(de)信(xìn)息(局(jú)部(bù)特(tè)征)也(yě)就(jiù)是(shì)所(suǒ)謂的(de)描述器;3、通(tòng)过(guò)两(liǎng)方(fāng)特(tè)征點(diǎn)(附带(dài)上(shàng)特(tè)征向(xiàng)量(liàng)的(de)關(guān)鍵點(diǎn))的(de)两(liǎng)两(liǎng)比較找(zhǎo)出(chū)相互匹(pǐ)配的(de)若干(gàn)对(duì)特(tè)征點(diǎn),也(yě)就(jiù)建立了(le)景物(wù)間(jiān)的(de)对(duì)應(yìng)關(guān)系(xì)。SURF算法是(shì)对(duì)SIFT算法的(de)一(yī)種(zhǒng)改進(jìn),主(zhǔ)要(yào)是(shì)通(tòng)过(guò)積分(fēn)图(tú)像Haar求導提(tí)高(gāo)SIFT算法的(de)執行效率。
SLAM即同(tóng)时(shí)定(dìng)位與(yǔ)地(dì)图(tú)重(zhòng)建,目的(de)就(jiù)是(shì)在(zài)機(jī)器人(rén)運動(dòng)的(de)同(tóng)时(shí)建立途經(jīng)的(de)地(dì)图(tú),并同(tóng)时(shí)敲定(dìng)機(jī)器人(rén)在(zài)地(dì)图(tú)中(zhōng)的(de)位置。使用(yòng)該技術(shù)後(hòu),機(jī)器人(rén)可(kě)以(yǐ)在(zài)不(bù)借(jiè)助外(wài)部(bù)信(xìn)号(hào)(WIFI、Beacon、GPS)的(de)情(qíng)況下(xià)進(jìn)行定(dìng)位,在(zài)室(shì)內(nèi)定(dìng)位场景中(zhōng)特(tè)别有(yǒu)用(yòng)。定(dìng)位的(de)方(fāng)法主(zhǔ)要(yào)是(shì)利用(yòng)卡(kǎ)曼濾波(bō)器对(duì)不(bù)同(tóng)的(de)傳感(gǎn)器信(xìn)息(图(tú)片(piàn)、陀螺儀)進(jìn)行融合,從而(ér)推斷機(jī)器人(rén)當前(qián)的(de)位置。
为(wèi)了(le)讓读(dú)者(zhě)了(le)解(jiě)FPGA对(duì)特(tè)征提(tí)取(qǔ)與(yǔ)位置追蹤的(de)加速以(yǐ)及(jí)节(jié)能(néng),下(xià)面(miàn)我(wǒ)们(men)關(guān)注加州大学洛杉矶分(fēn)校(xiào)的(de)一(yī)个(gè)關(guān)于(yú)在(zài)FPGA上(shàng)加速特(tè)征提(tí)取(qǔ)與(yǔ)SLAM算法的(de)研究。图(tú)5展(zhǎn)示了(le)FPGA相对(duì)CPU在(zài)執行SIFT feature-matching、SURF feature-matching以(yǐ)及(jí)SLAM算法的(de)加速比。使用(yòng)FPGA後(hòu),SIFT與(yǔ)SURF的(de)feature-matching分(fēn)别取(qǔ)得了(le)30倍與(yǔ)9倍的(de)加速,而(ér)SLAM的(de)算法也(yě)取(qǔ)得了(le)15倍的(de)加速比。假設照片(piàn)以(yǐ)30FPS的(de)速度(dù)進(jìn)入(rù)計(jì)算器,那(nà)麼(me)感(gǎn)知與(yǔ)定(dìng)位的(de)算法需要(yào)在(zài)33毫(háo)秒(miǎo)內(nèi)完成(chéng)对(duì)一(yī)张(zhāng)图(tú)片(piàn)的(de)处理,也(yě)就(jiù)是(shì)说(shuō)在(zài)33毫(háo)秒(miǎo)內(nèi)做完一(yī)次(cì)特(tè)征提(tí)取(qǔ)與(yǔ)SLAM計(jì)算,这(zhè)对(duì)CPU会(huì)造成(chéng)很大的(de)壓力。用(yòng)了(le)FPGA以(yǐ)後(hòu),整个(gè)处理流程提(tí)速了(le)10倍以(yǐ)上(shàng),讓高(gāo)幀率的(de)數據(jù)处理變(biàn)得可(kě)能(néng)。
使用(yòng)FPGA後(hòu),SIFT與(yǔ)SURF分(fēn)别取(qǔ)得了(le)1.5倍與(yǔ)1.9倍的(de)节(jié)能(néng)比,而(ér)SLAM的(de)算法取(qǔ)得了(le)14倍的(de)节(jié)能(néng)比。根(gēn)據(jù)我(wǒ)们(men)的(de)經(jīng)验(yàn),如(rú)果(guǒ)機(jī)器人(rén)将手(shǒu)機(jī)電(diàn)池用(yòng)于(yú)一(yī)个(gè)多(duō)核的(de)Mobile CPU去(qù)跑这(zhè)一(yī)套(tào)感(gǎn)知算法,電(diàn)池将会(huì)在(zài)40分(fēn)鐘(zhōng)左(zuǒ)右(yòu)耗光(guāng)。但是(shì)如(rú)果(guǒ)使用(yòng)FPGA進(jìn)行計(jì)算,手(shǒu)機(jī)電(diàn)池就(jiù)足以(yǐ)支撐6小时(shí)以(yǐ)上(shàng),即可(kě)以(yǐ)达(dá)到(dào)10倍左(zuǒ)右(yòu)的(de)總(zǒng)體(tǐ)节(jié)能(néng)(因(yīn)为(wèi)SLAM的(de)計(jì)算量(liàng)比特(tè)征提(tí)取(qǔ)高(gāo)很多(duō))。
根(gēn)據(jù)數據(jù)總(zǒng)結一(yī)下(xià),如(rú)果(guǒ)使用(yòng)FPGA進(jìn)行視覺感(gǎn)知定(dìng)位的(de)運算,不(bù)僅可(kě)以(yǐ)提(tí)高(gāo)感(gǎn)知幀率,讓感(gǎn)知更(gèng)加精準,還(huán)可(kě)以(yǐ)节(jié)能(néng),讓計(jì)算持(chí)續多(duō)个(gè)小时(shí)。當感(gǎn)知算法确定(dìng),而(ér)且对(duì)芯片(piàn)的(de)需求达(dá)到(dào)一(yī)定(dìng)的(de)量(liàng)後(hòu),我(wǒ)们(men)還(huán)可(kě)以(yǐ)把FPGA芯片(piàn)設計(jì)成(chéng)ASIC,進(jìn)一(yī)步的(de)提(tí)高(gāo)性(xìng)能(néng)以(yǐ)及(jí)降低能(néng)耗。
深度(dù)学習
深度(dù)神經(jīng)网(wǎng)絡是(shì)一(yī)種(zhǒng)具備至(zhì)少(shǎo)一(yī)个(gè)隐层的(de)神經(jīng)网(wǎng)絡。與(yǔ)淺层神經(jīng)网(wǎng)絡類(lèi)似,深度(dù)神經(jīng)网(wǎng)絡也(yě)能(néng)够为(wèi)複雜非(fēi)線(xiàn)性(xìng)系(xì)統提(tí)供建模,但多(duō)出(chū)的(de)层次(cì)为(wèi)模型提(tí)供了(le)更(gèng)高(gāo)的(de)抽象(xiàng)层次(cì),因(yīn)而(ér)提(tí)高(gāo)了(le)模型的(de)能(néng)力。在(zài)过(guò)去(qù)幾(jǐ)年(nián),卷(juǎn)積深度(dù)神經(jīng)网(wǎng)絡(CNN)在(zài)計(jì)算機(jī)視覺領域以(yǐ)及(jí)自(zì)動(dòng)語(yǔ)音(yīn)識别領域取(qǔ)得了(le)很大的(de)進(jìn)步。在(zài)視覺方(fāng)面(miàn),Google、Microsoft與(yǔ)Facebook不(bù)斷在(zài)ImageNet比赛上(shàng)刷新識别率紀录(lù)。在(zài)語(yǔ)音(yīn)識别方(fāng)面(miàn),百(bǎi)度(dù)的(de)DeepSpeech2系(xì)統相比之前(qián)的(de)系(xì)統在(zài)词彙識别率上(shàng)有(yǒu)顯著提(tí)高(gāo),把词彙識别錯誤率降到(dào)了(le)7%左(zuǒ)右(yòu)。
为(wèi)了(le)讓读(dú)者(zhě)了(le)解(jiě)FPGA对(duì)深度(dù)学習的(de)加速以(yǐ)及(jí)节(jié)能(néng),我(wǒ)们(men)下(xià)面(miàn)關(guān)注北(běi)京(jīng)大学與(yǔ)加州大学的(de)一(yī)个(gè)關(guān)于(yú)FPGA加速CNN算法的(de)合作研究。图(tú)7展(zhǎn)示了(le)FPGA與(yǔ)CPU在(zài)執行CNN时(shí)的(de)耗时(shí)对(duì)比。在(zài)運行一(yī)次(cì)叠代(dài)时(shí),使用(yòng)CPU耗时(shí)375毫(háo)秒(miǎo),而(ér)使用(yòng)FPGA只(zhī)耗时(shí)21毫(háo)秒(miǎo),取(qǔ)得了(le)18倍左(zuǒ)右(yòu)的(de)加速比。假設如(rú)果(guǒ)这(zhè)个(gè)CNN運算是(shì)有(yǒu)实时(shí)要(yào)求,比如(rú)需要(yào)跟上(shàng)相機(jī)幀率(33毫(háo)秒(miǎo)/幀),那(nà)麼(me)CPU就(jiù)不(bù)可(kě)以(yǐ)达(dá)到(dào)計(jì)算要(yào)求,但是(shì)通(tòng)过(guò)FPGA加速後(hòu),CNN計(jì)算就(jiù)可(kě)以(yǐ)跟上(shàng)相機(jī)幀率,对(duì)每一(yī)幀進(jìn)行分(fēn)析。
在(zài)執行一(yī)次(cì)CNN運算,使用(yòng)CPU耗能(néng)36焦,而(ér)使用(yòng)FPGA只(zhī)耗能(néng)10焦,取(qǔ)得了(le)3.5倍左(zuǒ)右(yòu)的(de)节(jié)能(néng)比。與(yǔ)SLAM計(jì)算相似,通(tòng)过(guò)用(yòng)FPGA加速與(yǔ)节(jié)能(néng),讓深度(dù)学習实时(shí)計(jì)算更(gèng)容易在(zài)移動(dòng)端運行。
上(shàng)文(wén)介紹了(le)FPGA对(duì)感(gǎn)知算法的(de)加速以(yǐ)及(jí)节(jié)能(néng),可(kě)以(yǐ)看(kàn)出(chū)FPGA在(zài)感(gǎn)知計(jì)算上(shàng)相对(duì)CPU與(yǔ)GPU有(yǒu)巨大优勢。本(běn)节(jié)介紹FPGA在(zài)當今機(jī)器人(rén)行業被(bèi)使用(yòng)的(de)狀況,特(tè)别是(shì)FPGA在(zài)ROS機(jī)器人(rén)操作系(xì)統中(zhōng)被(bèi)使用(yòng)的(de)情(qíng)況。
機(jī)器人(rén)操作系(xì)統(ROS),是(shì)專为(wèi)機(jī)器人(rén)软(ruǎn)件(jiàn)開(kāi)發(fà)所(suǒ)設計(jì)出(chū)来(lái)的(de)一(yī)套(tào)操作系(xì)統架構。它(tā)提(tí)供類(lèi)似于(yú)操作系(xì)統的(de)服(fú)务,包(bāo)括硬(yìng)件(jiàn)抽象(xiàng)描述、底层驅動(dòng)程序管(guǎn)理、共(gòng)用(yòng)功能(néng)的(de)執行、程序間(jiān)消息傳遞、程序發(fà)行包(bāo)管(guǎn)理,它(tā)也(yě)提(tí)供一(yī)些工具和(hé)庫用(yòng)于(yú)獲取(qǔ)、建立、編写和(hé)執行多(duō)機(jī)融合的(de)程序。ROS的(de)首要(yào)設計(jì)目标(biāo)是(shì)在(zài)機(jī)器人(rén)研發(fà)領域提(tí)高(gāo)代(dài)碼複用(yòng)率。ROS是(shì)一(yī)種(zhǒng)分(fēn)布(bù)式处理框架(又名Nodes)。
这(zhè)使可(kě)執行文(wén)件(jiàn)能(néng)被(bèi)單独設計(jì),并且在(zài)運行时(shí)松散(sàn)耦合。这(zhè)些过(guò)程可(kě)以(yǐ)封(fēng)裝(zhuāng)到(dào)數據(jù)包(bāo)(Packages)和(hé)堆(duī)棧(Stacks)中(zhōng),以(yǐ)便于(yú)共(gòng)享和(hé)分(fēn)發(fà)。ROS還(huán)支持(chí)代(dài)碼庫的(de)聯合系(xì)統,使得協作亦能(néng)被(bèi)分(fēn)發(fà)。ROS目前(qián)被(bèi)廣泛應(yìng)用(yòng)到(dào)多(duō)種(zhǒng)機(jī)器人(rén)中(zhōng),逐漸變(biàn)成(chéng)機(jī)器人(rén)的(de)标(biāo)準操作系(xì)統。在(zài)2015年(nián)的(de)DARPA Robotics Challenge比赛中(zhōng),有(yǒu)过(guò)半數的(de)參赛機(jī)器人(rén)使用(yòng)了(le)ROS。
随着FPGA技術(shù)的(de)發(fà)展(zhǎn),越来(lái)越多(duō)的(de)機(jī)器人(rén)使用(yòng)上(shàng)了(le)FPGA,在(zài)ROS社區(qū)中(zhōng)也(yě)有(yǒu)越来(lái)越多(duō)的(de)聲音(yīn)要(yào)求ROS兼容FPGA。一(yī)个(gè)例子是(shì)美國(guó)Sandia國(guó)家(jiā)实验(yàn)室(shì)的(de)機(jī)器人(rén)手(shǒu)臂Sandia Hand。如(rú)图(tú)9所(suǒ)示,Sandia Hand使用(yòng)FPGA預处理照相機(jī)以(yǐ)及(jí)機(jī)器人(rén)手(shǒu)掌返回(huí)的(de)信(xìn)息,然後(hòu)把預处理的(de)結果(guǒ)傳遞ROS的(de)其它(tā)計(jì)算Node。
为(wèi)了(le)使ROS與(yǔ)FPGA之間(jiān)可(kě)以(yǐ)連(lián)接,Sandia Hand使用(yòng)了(le)Rosbridge機(jī)制。Rosbridge通(tòng)过(guò)JSON API来(lái)連(lián)接ROS與(yǔ)非(fēi)ROS的(de)程序。比如(rú)一(yī)个(gè)ROS的(de)程序可(kě)以(yǐ)通(tòng)过(guò)JSON API連(lián)接一(yī)个(gè)非(fēi)ROS的(de)网(wǎng)絡前(qián)端。在(zài)Sandia Hand的(de)設計(jì)中(zhōng),一(yī)个(gè)ROS Node通(tòng)过(guò)JSON API連(lián)接到(dào)FPGA計(jì)算器,FPGA傳遞數據(jù)以(yǐ)及(jí)發(fà)起計(jì)算指令,然後(hòu)從FPGA取(qǔ)回(huí)計(jì)算結果(guǒ)。
Rosbridge为(wèi)ROS與(yǔ)FPGA的(de)聯通(tòng)提(tí)供了(le)一(yī)種(zhǒng)沟(gōu)通(tòng)機(jī)制,但是(shì)在(zài)这(zhè)種(zhǒng)機(jī)制中(zhōng),ROS Node并不(bù)能(néng)運行在(zài)FPGA上(shàng),而(ér)且通(tòng)过(guò)JSON API的(de)連(lián)接機(jī)制也(yě)带(dài)来(lái)了(le)一(yī)定(dìng)的(de)性(xìng)能(néng)損耗。为(wèi)了(le)讓FPGA與(yǔ)ROS更(gèng)好(hǎo)的(de)耦合,最(zuì)近(jìn)日(rì)本(běn)的(de)研究人(rén)員提(tí)出(chū)了(le)ROS-Compliant FPGA的(de)設計(jì),讓ROS Node可(kě)以(yǐ)直(zhí)接運行在(zài)FPGA上(shàng)。如(rú)图(tú)10所(suǒ)示,在(zài)这(zhè)个(gè)設計(jì)中(zhōng),FPGA了(le)实現(xiàn)一(yī)个(gè)輸入(rù)的(de)接口(kǒu),这(zhè)个(gè)接口(kǒu)可(kě)以(yǐ)直(zhí)接訂閱ROS的(de)topic,使數據(jù)可(kě)以(yǐ)无縫連(lián)接流入(rù)FPGA計(jì)算單元(yuán)中(zhōng)。另(lìng)外(wài),FPGA上(shàng)也(yě)实現(xiàn)了(le)一(yī)个(gè)輸出(chū)接口(kǒu), 讓FPGA上(shàng)的(de)ROS Node可(kě)以(yǐ)直(zhí)接發(fà)表(biǎo)數據(jù),讓訂閱这(zhè)个(gè)topic的(de)其他(tā)ROS Node可(kě)以(yǐ)直(zhí)接使用(yòng)FPGA産出(chū)的(de)數據(jù)。在(zài)这(zhè)个(gè)設計(jì)中(zhōng),開(kāi)發(fà)者(zhě)只(zhī)要(yào)把自(zì)己開(kāi)發(fà)的(de)FPGA計(jì)算器插入(rù)到(dào)ROS-compliant的(de)FPGA框架中(zhōng),便可(kě)以(yǐ)无縫連(lián)接其他(tā)ROS Node。
最(zuì)近(jìn)跟ROS的(de)運營機(jī)構Open Source Robotics Foundation沟(gōu)通(tòng)中(zhōng)發(fà)現(xiàn),越来(lái)越多(duō)的(de)機(jī)器人(rén)開(kāi)發(fà)者(zhě)使用(yòng)FPGA作为(wèi)傳感(gǎn)器的(de)計(jì)算單元(yuán)以(yǐ)及(jí)控制器,对(duì)FPGA融入(rù)ROS的(de)需求越来(lái)越多(duō)。相信(xìn)ROS很快(kuài)将会(huì)拿出(chū)一(yī)个(gè)與(yǔ)FPGA緊密耦合的(de)解(jiě)決方(fāng)案(àn)。
展(zhǎn)望未来(lái)
FPGA具有(yǒu)低能(néng)耗、高(gāo)性(xìng)能(néng)以(yǐ)及(jí)可(kě)編程等特(tè)性(xìng),十(shí)分(fēn)适合感(gǎn)知計(jì)算。特(tè)别是(shì)在(zài)能(néng)源受限的(de)情(qíng)況下(xià),FPGA相对(duì)于(yú)CPU與(yǔ)GPU有(yǒu)明(míng)顯的(de)性(xìng)能(néng)與(yǔ)能(néng)耗优勢。除此(cǐ)之外(wài),由(yóu)于(yú)感(gǎn)知算法不(bù)斷發(fà)展(zhǎn),我(wǒ)们(men)需要(yào)不(bù)斷更(gèng)新機(jī)器人(rén)的(de)感(gǎn)知处理器。相比ASIC,FPGA又具有(yǒu)硬(yìng)件(jiàn)可(kě)升(shēng)級可(kě)叠代(dài)的(de)优勢。由(yóu)于(yú)这(zhè)些原因(yīn),笔(bǐ)者(zhě)堅信(xìn)FPGA在(zài)機(jī)器人(rén)时(shí)代(dài)将会(huì)是(shì)最(zuì)重(zhòng)要(yào)的(de)芯片(piàn)之一(yī)。由(yóu)于(yú)FPGA的(de)低能(néng)耗特(tè)性(xìng),FPGA很适合用(yòng)于(yú)傳感(gǎn)器的(de)數據(jù)預处理工作。可(kě)以(yǐ)預見(jiàn),FPGA與(yǔ)傳感(gǎn)器的(de)緊密結合将会(huì)很快(kuài)普及(jí)。而(ér)後(hòu)随着視覺、語(yǔ)音(yīn)、深度(dù)学習的(de)算法在(zài)FPGA上(shàng)的(de)不(bù)斷优化(huà),FPGA将逐漸取(qǔ)代(dài)GPU與(yǔ)CPU成(chéng)为(wèi)機(jī)器人(rén)上(shàng)的(de)主(zhǔ)要(yào)芯片(piàn)。









