要想機(jī)器人有智能,必先賦予其感知能力。感知計(jì)算,特別是視覺(jué)以及深度學(xué)習(xí),通常計(jì)算量比較大,對(duì)性能要求高。但是機(jī)器人受電池容量限制,可分配給計(jì)算的能源比較低。除此之外,由于感知算法不斷發(fā)展,我們還需要不斷更新機(jī)器人的感知處理器。與其它處理器相比,FPGA具有低能耗、高性能以及可編程等特性,十分適合感知計(jì)算。本文首先解析FPGA的特性,然后介紹FPGA對(duì)感知算法的加速以及節(jié)能,最后談一談機(jī)器人操作系統(tǒng)對(duì)FPGA的支持。
FPGA:高性能、低能耗、可編程
與其它計(jì)算載體如CPU與GPU相比,F(xiàn)PGA具有高性能、低能耗以及可硬件編程的特點(diǎn)。圖1介紹了FPGA的硬件架構(gòu),每個(gè)FPGA主要由三個(gè)部分組成:輸入輸出邏輯,主要用于FPGA與外部其他部件,比如傳感器的通信;計(jì)算邏輯部件,主要用于建造計(jì)算模塊;以及可編程連接網(wǎng)絡(luò),主要用于連接不同的計(jì)算邏輯部件去組成一個(gè)計(jì)算器。在編程時(shí),我們可以把計(jì)算邏輯映射到硬件上,通過(guò)調(diào)整網(wǎng)絡(luò)連接把不同的邏輯部件連通在一起去完成一個(gè)計(jì)算任務(wù)。比如要完成一個(gè)圖像特征提取的任務(wù),我們會(huì)連接FPGA的輸入邏輯與照相機(jī)的輸出邏輯,讓圖片可以進(jìn)入FPGA。然后,連接FPGA的輸入邏輯與多個(gè)計(jì)算邏輯部件,讓這些計(jì)算邏輯部件并行提取每個(gè)圖片區(qū)域的特征點(diǎn)。最后,我們可以連接計(jì)算邏輯部件與FPGA的輸出邏輯,把特征點(diǎn)匯總后輸出。由此可見(jiàn),F(xiàn)PGA通常把算法的數(shù)據(jù)流以及執(zhí)行指令寫(xiě)死在硬件邏輯中,從而避免了CPU的Instruction Fetch與Instruction Decode 工作。
圖1 FPGA硬件架構(gòu)
高性能
雖然FPGA的頻率一般比CPU低,但是可以用FPGA實(shí)現(xiàn)并行度很大的硬件計(jì)算器。比如一般CPU每次只能處理4到8個(gè)指令,在FPGA上使用數(shù)據(jù)并行的方法可以每次處理256個(gè)或者更多的指令,讓FPGA可以處理比CPU多很多的數(shù)據(jù)量。另外,如上所述,在FPGA中一般不需要Instruction Fetch與Instruction Decode, 減少了這些流水線工序后也節(jié)省了不少計(jì)算時(shí)間。
為了讓讀者對(duì)FPGA加速有更好的了解,我們總結(jié)了微軟研究院2010年對(duì)BLAS算法的FPGA加速研究。BLAS是矩陣運(yùn)算的底層庫(kù),被廣泛運(yùn)用到高性能計(jì)算、機(jī)器學(xué)習(xí)等領(lǐng)域。在這個(gè)研究中,微軟的研究人員分析了CPU、GPU以及FPGA對(duì)BLAS的加速以及能耗。圖2對(duì)比了FPGA以及CPU、GPU執(zhí)行GaxPy算法每次迭代的時(shí)間,相對(duì)于CPU,GPU與FPGA都達(dá)到了60%的加速。圖中顯示的是小矩陣運(yùn)算,隨著矩陣的增大,GPU與FPGA相對(duì)與CPU的加速比會(huì)越來(lái)越明顯。
圖2 GaxPy 算法性能對(duì)比 (單位:微秒)
低能耗
FPGA相對(duì)于CPU與GPU有明顯的能耗優(yōu)勢(shì),主要有兩個(gè)原因。首先,在FPGA中沒(méi)有Instruction Fetch與Instruction Decode,在Intel的CPU里面,由于使用的是CISC架構(gòu),僅僅Decoder就占整個(gè)芯片能耗的50%;在GPU里面,F(xiàn)etch與Decode也消耗了10%~20%的能源。其次,F(xiàn)PGA的主頻比CPU與GPU低很多,通常CPU與GPU都在1GHz到3GHz之間,而FPGA的主頻一般在500MHz以下。如此大的頻率差使得FPGA消耗的能源遠(yuǎn)低于CPU與GPU。
圖3對(duì)比了FPGA以及CPU、GPU執(zhí)行GaxPy算法每次迭代的能源消耗??梢园l(fā)現(xiàn)CPU與GPU的能耗是相仿的,而FPGA的能耗只是CPU與GPU的8%左右。由此可見(jiàn),F(xiàn)PGA計(jì)算比CPU快60%,而能耗只是CPU的1/12,有相當(dāng)大的優(yōu)勢(shì),特別在能源受限的情況下,使用FPGA會(huì)使電池壽命延長(zhǎng)不少。
圖3 GaxPy 算法能耗對(duì)比(單位:毫焦)
可硬件編程
由于FPGA是可硬件編程的,相對(duì)于ASIC而言,使用FPGA可以對(duì)硬件邏輯進(jìn)行迭代更新。但是FPGA也會(huì)被詬病,因?yàn)榘阉惴▽?xiě)到FPGA硬件并不是一個(gè)容易的過(guò)程,相比在CPU與GPU上編程技術(shù)門(mén)檻高許多,開(kāi)發(fā)周期也會(huì)長(zhǎng)很多。
圖4 傳統(tǒng)FPGA開(kāi)發(fā)流程與C-to-FPGA開(kāi)發(fā)流程
圖4顯示了傳統(tǒng)FPGA開(kāi)發(fā)流程與C-to-FPGA開(kāi)發(fā)流程的對(duì)比。在傳統(tǒng)的FPGA開(kāi)發(fā)流程中,我們需要把C/C++寫(xiě)成的算法逐行翻譯成基于Verilog的硬件語(yǔ)言,然后再編譯Verilog,把邏輯寫(xiě)入硬件。隨著近幾年FPGA技術(shù)的發(fā)展,從C直接編譯到FPGA的技術(shù)已經(jīng)逐漸成熟,并已在百度廣泛被使用。在C-to-FPGA開(kāi)發(fā)流程中,我們可以在CC++的代碼中加Pragma, 指出哪個(gè)計(jì)算Kernel應(yīng)該被加速,然后C-to-FPGA引擎會(huì)自動(dòng)把代碼編譯成硬件。在我們的經(jīng)驗(yàn)中,使用傳統(tǒng)開(kāi)發(fā)流程,完成一個(gè)項(xiàng)目大約需要半年時(shí)間,而使用了C-to-FPGA開(kāi)發(fā)流程后,一個(gè)項(xiàng)目大約兩周便可完成,效率提升了10倍以上。
感知計(jì)算在FPGA上的加速
接下來(lái)主要介紹機(jī)器人感知計(jì)算在FPGA上的加速,特別是特征提取與位置追蹤的計(jì)算(可以認(rèn)為是機(jī)器人的眼睛),以及深度學(xué)習(xí)計(jì)算(可以認(rèn)為是機(jī)器人的大腦)。當(dāng)機(jī)器人有了眼睛以及大腦后,就可以在空間中移動(dòng)并定位自己,在移動(dòng)過(guò)程中識(shí)別所見(jiàn)到的物體。
特征提取與位置追蹤
特征提取與位置追蹤的主要算法包括SIFT、SURF和SLAM。SIFT是一種檢測(cè)局部特征的算法,通過(guò)求一幅圖中的特征點(diǎn)及其有關(guān)規(guī)模和方向的描述得到特征并進(jìn)行圖像特征點(diǎn)匹配。SIFT特征匹配算法可以處理兩幅圖像之間發(fā)生平移、旋轉(zhuǎn)、仿射變換情況下的匹配問(wèn)題,具有很強(qiáng)的匹配能力。SIFT算法有三大工序:1. 提取關(guān)鍵點(diǎn);2. 對(duì)關(guān)鍵點(diǎn)附加詳細(xì)的信息(局部特征)也就是所謂的描述器;3. 通過(guò)兩方特征點(diǎn)(附帶上特征向量的關(guān)鍵點(diǎn))的兩兩比較找出相互匹配的若干對(duì)特征點(diǎn),也就建立了景物間的對(duì)應(yīng)關(guān)系。SURF算法是對(duì)SIFT算法的一種改進(jìn),主要是通過(guò)積分圖像Haar求導(dǎo)提高SIFT算法的執(zhí)行效率。SLAM即同時(shí)定位與地圖重建,目的就是在機(jī)器人運(yùn)動(dòng)的同時(shí)建立途經(jīng)的地圖,并同時(shí)敲定機(jī)器人在地圖中的位置。使用該技術(shù)后,機(jī)器人可以在不借助外部信號(hào)(WIFI、Beacon、GPS)的情況下進(jìn)行定位,在室內(nèi)定位場(chǎng)景中特別有用。定位的方法主要是利用卡曼濾波器對(duì)不同的傳感器信息(圖片、陀螺儀)進(jìn)行融合,從而推斷機(jī)器人當(dāng)前的位置。
為了讓讀者了解FPGA對(duì)特征提取與位置追蹤的加速以及節(jié)能,下面我們關(guān)注加州大學(xué)洛杉磯分校的一個(gè)關(guān)于在FPGA上加速特征提取與SLAM算法的研究。圖5展示了FPGA相對(duì)CPU在執(zhí)行SIFT feature-matching、SURF feature-matching以及SLAM算法的加速比。使用FPGA后,SIFT與SURF的feature-matching分別取得了30倍與9倍的加速,而SLAM的算法也取得了15倍的加速比。假設(shè)照片以30FPS的速度進(jìn)入計(jì)算器,那么感知與定位的算法需要在33毫秒內(nèi)完成對(duì)一張圖片的處理,也就是說(shuō)在33毫秒內(nèi)做完一次特征提取與SLAM計(jì)算,這對(duì)CPU會(huì)造成很大的壓力。用了FPGA以后,整個(gè)處理流程提速了10倍以上,讓高幀率的數(shù)據(jù)處理變得可能。
圖5 感知算法性能對(duì)比 (單位:加速比)
圖6展示了FPGA相對(duì)CPU在執(zhí)行SIFT、SURF以及SLAM算法的節(jié)能比。使用FPGA后,SIFT與SURF分別取得了1.5倍與1.9倍的節(jié)能比,而SLAM的算法取得了14倍的節(jié)能比。根據(jù)我們的經(jīng)驗(yàn),如果機(jī)器人將手機(jī)電池用于一個(gè)多核的Mobile CPU去跑這一套感知算法,電池將會(huì)在40分鐘左右耗光。但是如果使用FPGA進(jìn)行計(jì)算,手機(jī)電池就足以支撐6小時(shí)以上,即可以達(dá)到10倍左右的總體節(jié)能 (因?yàn)镾LAM的計(jì)算量比特征提取高很多)。
圖6 感知算法能耗對(duì)比 (單位:節(jié)能比)
根據(jù)數(shù)據(jù)總結(jié)一下,如果使用FPGA進(jìn)行視覺(jué)感知定位的運(yùn)算,不僅可以提高感知幀率,讓感知更加精準(zhǔn),還可以節(jié)能,讓計(jì)算持續(xù)多個(gè)小時(shí)。當(dāng)感知算法確定,而且對(duì)芯片的需求達(dá)到一定的量后,我們還可以把FPGA芯片設(shè)計(jì)成ASIC,進(jìn)一步的提高性能以及降低能耗。
深度學(xué)習(xí)
深度神經(jīng)網(wǎng)絡(luò)是一種具備至少一個(gè)隱層的神經(jīng)網(wǎng)絡(luò)。與淺層神經(jīng)網(wǎng)絡(luò)類(lèi)似,深度神經(jīng)網(wǎng)絡(luò)也能夠?yàn)閺?fù)雜非線性系統(tǒng)提供建模,但多出的層次為模型提供了更高的抽象層次,因而提高了模型的能力。在過(guò)去幾年,卷積深度神經(jīng)網(wǎng)絡(luò)(CNN)在計(jì)算機(jī)視覺(jué)領(lǐng)域以及自動(dòng)語(yǔ)音識(shí)別領(lǐng)域取得了很大的進(jìn)步。在視覺(jué)方面,Google、Microsoft與Facebook不斷在ImageNet比賽上刷新識(shí)別率紀(jì)錄。在語(yǔ)音識(shí)別方面,百度的DeepSpeech 2系統(tǒng)相比之前的系統(tǒng)在詞匯識(shí)別率上有顯著提高,把詞匯識(shí)別錯(cuò)誤率降到了7%左右。
為了讓讀者了解FPGA對(duì)深度學(xué)習(xí)的加速以及節(jié)能,我們下面關(guān)注北京大學(xué)與加州大學(xué)的一個(gè)關(guān)于FPGA加速CNN算法的合作研究。圖7展示了FPGA與CPU在執(zhí)行CNN時(shí)的耗時(shí)對(duì)比。在運(yùn)行一次迭代時(shí),使用CPU耗時(shí)375毫秒,而使用FPGA只耗時(shí)21毫秒,取得了18倍左右的加速比。假設(shè)如果這個(gè)CNN運(yùn)算是有實(shí)時(shí)要求,比如需要跟上相機(jī)幀率(33毫秒/幀),那么CPU就不可以達(dá)到計(jì)算要求,但是通過(guò)FPGA加速后,CNN計(jì)算就可以跟上相機(jī)幀率,對(duì)每一幀進(jìn)行分析。
圖7 CNN性能對(duì)比 (單位:毫秒)
圖8展示了FPGA與CPU在執(zhí)行CNN時(shí)的耗能對(duì)比。在執(zhí)行一次CNN運(yùn)算,使用CPU耗能36焦,而使用FPGA只耗能10焦,取得了3.5倍左右的節(jié)能比。與SLAM計(jì)算相似,通過(guò)用FPGA加速與節(jié)能,讓深度學(xué)習(xí)實(shí)時(shí)計(jì)算更容易在移動(dòng)端運(yùn)行。
圖8 CNN能耗對(duì)比 (單位:焦)
FPGA與ROS機(jī)器人操作系統(tǒng)的結(jié)合
上文介紹了FPGA對(duì)感知算法的加速以及節(jié)能,可以看出FPGA在感知計(jì)算上相對(duì)CPU與GPU有巨大優(yōu)勢(shì)。本節(jié)介紹FPGA在當(dāng)今機(jī)器人行業(yè)被使用的狀況,特別是FPGA在ROS機(jī)器人操作系統(tǒng)中被使用的情況。
機(jī)器人操作系統(tǒng)(ROS),是專(zhuān)為機(jī)器人軟件開(kāi)發(fā)所設(shè)計(jì)出來(lái)的一套操作系統(tǒng)架構(gòu)。它提供類(lèi)似于操作系統(tǒng)的服務(wù),包括硬件抽象描述、底層驅(qū)動(dòng)程序管理、共用功能的執(zhí)行、程序間消息傳遞、程序發(fā)行包管理,它也提供一些工具和庫(kù)用于獲取、建立、編寫(xiě)和執(zhí)行多機(jī)融合的程序。ROS的首要設(shè)計(jì)目標(biāo)是在機(jī)器人研發(fā)領(lǐng)域提高代碼復(fù)用率。ROS是一種分布式處理框架(又名Nodes)。這使可執(zhí)行文件能被單獨(dú)設(shè)計(jì),并且在運(yùn)行時(shí)松散耦合。這些過(guò)程可以封裝到數(shù)據(jù)包(Packages)和堆棧(Stacks)中,以便于共享和分發(fā)。ROS還支持代碼庫(kù)的聯(lián)合系統(tǒng),使得協(xié)作亦能被分發(fā)。ROS目前被廣泛應(yīng)用到多種機(jī)器人中,逐漸變成機(jī)器人的標(biāo)準(zhǔn)操作系統(tǒng)。在2015年的DARPA Robotics Challenge比賽中,有過(guò)半數(shù)的參賽機(jī)器人使用了ROS。
隨著FPGA技術(shù)的發(fā)展,越來(lái)越多的機(jī)器人使用上了FPGA,在ROS社區(qū)中也有越來(lái)越多的聲音要求ROS兼容FPGA。一個(gè)例子是美國(guó)Sandia國(guó)家實(shí)驗(yàn)室的機(jī)器人手臂Sandia Hand。如圖9所示,Sandia Hand使用FPGA預(yù)處理照相機(jī)以及機(jī)器人手掌返回的信息,然后把預(yù)處理的結(jié)果傳遞ROS的其它計(jì)算Node。
圖9 ROS在Sandia Hand中對(duì)FPGA的支持
為了使ROS與FPGA之間可以連接,Sandia Hand使用了Rosbridge機(jī)制。 Rosbridge通過(guò)JSON API來(lái)連接ROS與非ROS的程序。比如一個(gè)ROS的程序可以通過(guò)JSON API連接一個(gè)非ROS的網(wǎng)絡(luò)前端。在Sandia Hand的設(shè)計(jì)中,一個(gè)ROS Node通過(guò)JSON API連接到FPGA計(jì)算器,F(xiàn)PGA傳遞數(shù)據(jù)以及發(fā)起計(jì)算指令,然后從FPGA取回計(jì)算結(jié)果。
Rosbridge為ROS與FPGA的聯(lián)通提供了一種溝通機(jī)制,但是在這種機(jī)制中,ROS Node并不能運(yùn)行在FPGA上,而且通過(guò)JSON API的連接機(jī)制也帶來(lái)了一定的性能損耗。為了讓FPGA與ROS更好的耦合,最近日本的研究人員提出了ROS-Compliant FPGA的設(shè)計(jì),讓ROS Node可以直接運(yùn)行在FPGA上。如圖10所示,在這個(gè)設(shè)計(jì)中,F(xiàn)PGA了實(shí)現(xiàn)一個(gè)輸入的接口,這個(gè)接口可以直接訂閱ROS的topic,使數(shù)據(jù)可以無(wú)縫連接流入FPGA計(jì)算單元中。另外,F(xiàn)PGA上也實(shí)現(xiàn)了一個(gè)輸出接口, 讓FPGA上的ROS Node可以直接發(fā)表數(shù)據(jù),讓訂閱這個(gè)topic的其他ROS Node可以直接使用FPGA產(chǎn)出的數(shù)據(jù)。在這個(gè)設(shè)計(jì)中,開(kāi)發(fā)者只要把自己開(kāi)發(fā)的FPGA計(jì)算器插入到ROS-compliant的FPGA框架中,便可以無(wú)縫連接其他ROS Node。
圖10 FPGA成為ROS的一部分
最近跟ROS的運(yùn)營(yíng)機(jī)構(gòu)Open Source Robotics Foundation溝通中發(fā)現(xiàn),越來(lái)越多的機(jī)器人開(kāi)發(fā)者使用FPGA作為傳感器的計(jì)算單元以及控制器,對(duì)FPGA融入ROS的需求越來(lái)越多。相信ROS很快將會(huì)拿出一個(gè)與FPGA緊密耦合的解決方案。
展望未來(lái)
FPGA具有低能耗、高性能以及可編程等特性,十分適合感知計(jì)算。特別是在能源受限的情況下,F(xiàn)PGA相對(duì)于CPU與GPU有明顯的性能與能耗優(yōu)勢(shì)。除此之外,由于感知算法不斷發(fā)展,我們需要不斷更新機(jī)器人的感知處理器。相比ASIC,F(xiàn)PGA又具有硬件可升級(jí)可迭代的優(yōu)勢(shì)。由于這些原因,筆者堅(jiān)信FPGA在機(jī)器人時(shí)代將會(huì)是最重要的芯片之一。由于FPGA的低能耗特性,F(xiàn)PGA很適合用于傳感器的數(shù)據(jù)預(yù)處理工作??梢灶A(yù)見(jiàn),F(xiàn)PGA與傳感器的緊密結(jié)合將會(huì)很快普及。而后隨著視覺(jué)、語(yǔ)音、深度學(xué)習(xí)的算法在FPGA上的不斷優(yōu)化,F(xiàn)PGA將逐漸取代GPU與CPU成為機(jī)器人上的主要芯片。
推薦閱讀:
五大優(yōu)勢(shì)凸顯 可編程邏輯或?qū)⒊尸F(xiàn)快速增長(zhǎng)
量子點(diǎn)和OLED,誰(shuí)會(huì)是電視市場(chǎng)下半場(chǎng)的主流技術(shù)數(shù)
淺顯易懂的理解嵌入式開(kāi)發(fā)中的硬件知識(shí)
為什么分立式JFET仍然活躍于模擬設(shè)計(jì)中?