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