EdgeBoard簡介
EdgeBoard是百度基于FPGA芯片研發(fā)的嵌入式AI解決方案,高性能的加速引擎可提供3.6Tops的強(qiáng)大算力,完整的嵌入式參考設(shè)計(jì)使硬件集成輕松便捷。目前EdgeBoard提供了FPGA軟核和計(jì)算卡模塊兩種形態(tài)供硬件集成,面向項(xiàng)目部署也提供了抓拍機(jī)和計(jì)算盒兩種基礎(chǔ)硬件產(chǎn)品。EdgeBoard深度兼容百度大腦模型資源與工具平臺(EasyDL/AI Studio),極大降低了開發(fā)驗(yàn)證、產(chǎn)品集成、科研教學(xué)、項(xiàng)目部署門檻,適用于安防監(jiān)控、工業(yè)質(zhì)檢、醫(yī)療診斷、農(nóng)作物生長監(jiān)控、無人駕駛、無人零售等場景
數(shù)據(jù)格式的邏輯表示與物理表示
深度學(xué)習(xí)中經(jīng)常會使用NCHW、NHWC和CHWN數(shù)據(jù)格式來表示數(shù)據(jù),其中N、H、W、C定義如下:
N:一個batch內(nèi)圖片的數(shù)量,一次處理的圖片數(shù)量
H:垂直高度方向的像素個數(shù),圖片的高
W:水平寬度方向的像素個數(shù),圖片的寬
C:通道數(shù)。例如灰度圖像為1, 彩色RGB圖像為3
下圖表示N=2,C=16,H=5,W=4的數(shù)據(jù)排列,其中左圖是邏輯表示,右圖是物理表示。
以NCHW為例,其邏輯表示如左上圖,n=0時,三個坐標(biāo)分別標(biāo)識了C、H、W的方向。第一個元素是000,第二個元素沿著w方向,即001,隨后是002, 003;然后沿H方向,即004, 005, 006, 007.。.如此反復(fù)到019后;再沿C方向,020,021, 022 。..。.一直到319;再沿N方向,也就是n=1,然后重復(fù)W方向,H方向和C方向。
根據(jù)以上NCHW的劃分,物理地址表示定義如下(如右上圖):
[a:0] 表示W(wǎng)方向,在一行內(nèi)從左到右
[a:1] 表示從H方向,一行一行的從上到下
[a:2] 表示在C方向,從一個通道到另外一個通道
[a:3] 表示從N方向,從n=0 到n=1
最終NCHW數(shù)據(jù)格式的物理分布(在內(nèi)存中的一維表示)表示為000 001 002 003 004 。.. 018 019 020 。.. 318 319 320 。.. 。.. 637 638 639??梢岳斫獬砂岩粋€通道的所有像素一行一行地排列起來,然后排下一個通道,即n=0排列完后再排n=1。
同理NHWC表示是先沿C方向,再沿W方向,再沿H方向,最后沿N方向。所以在內(nèi)存的存放順序是,第一個元素是000,第二個沿C方向,即020,040, 060 。..一直到300,之后切換到W方向,001 021 041 061.。.301.。到了303后再切換到H方向,即004, 024 。.. 304,最后到了319,再切換到N方向,320,340 。..一直到639。
[b:0] 表示C方向,第一個像素從一個通道到另外一個通道
[b:1] 表示從W方向,最后一個通道第一個像素回到第一個通道的第二個像素
[b:2] 表示在H方向,最后一個通道第一行最后一個像素回到第一個通道的第二行的第一個像素
[b:3] 表示從N方向,從n=0 到n=1
NHWC其物理表示為000 020 。.. 300 001 021 。.. 283 303 004 。.. 319 320 340 。.. 。.. 339 359 。.. 639。可以理解成把一個batch的一個像素的所有通道先排列起來,然后排下一個像素。n=0排列完成后,再排n=1。
同理CHWN其邏輯表示,先沿N方向,再沿W方向,再沿H方向,最后是沿C方向。
[c:0] 表示從N方向,從n=0的第一個像素到n=1的第一個像素
[c:1] 表示從N方向,從n=1的第一個像素回到n=0的第二個像素
[c:2] 表示在H方向,從n=1的第一行最后一個像素回到n=0的第二行第一個像素
[c:3] 表示從N方向,從n=1的第一個通道最后一個像素回到n=0的第二個通道第一個像素
CHWN其物理表示為 000 032 001 321 。.. 003 323 004 324 。.. 。.. 019 339 020 。..。可以理解成先把一個batch中N幅圖像的第一個通道第一個像素排列起來,然后排第二個像素;再排第二個通道,第三個通道。..
數(shù)據(jù)在內(nèi)存中的偏移地址
深度學(xué)習(xí)中涉及大量的數(shù)據(jù)計(jì)算,計(jì)算需要從內(nèi)存中取出數(shù)據(jù),因此需要計(jì)算出數(shù)據(jù)的偏移地址以便進(jìn)行取數(shù)。有了上面的邏輯表示和物理表示,可以推導(dǎo)出4維邏輯表示(n,c,h,w)映射到一維內(nèi)存中偏移地址的公式。
定義位置(n,c,h,w)表示第n個batch的第c通道的第h行的第w列,那么該位置在不同數(shù)據(jù)格式下,在內(nèi)存中的偏移地址計(jì)算公式如下: NCHW: offset_nchw(n, c, h, w) = n * CHW + c * HW + h * W + w NHWC: offset_nhwc(n, c, h, w) = n * HWC + h * WC + w * C + c CHWN: offset_chwn(n, c, h, w) = c * HWN + h * WN + w * N + n 其中N、C、H、W為常量,n、c、h、w為變量
在NCHW中,CHW=C*H*W,表示一個Batch,可以理解成一個BGR 3通道的圖片,表達(dá)的是一個立方體。HW=H*W,表示一個平面,可以理解成是BGR 3通道圖片的一個通道(灰度圖就是一個通道圖片)。W是一行,可以理解成一個通道上的一行。
以上圖為例,如果想計(jì)算出綠色圈,即341的位置(n=1,c=1, h=0, w=1)。我們需要先跳過n=0的數(shù)據(jù)(CHW),圖中箭頭1指向的藍(lán)色框區(qū)域;再跳過n=1的第一個通道(HW),圖中箭頭2指向藍(lán)色框區(qū)域;這時進(jìn)入到了n=1的第二個通道,跳過h=0行(0*W);最后跳過w個數(shù)到達(dá)偏移位置。
EdgeBoard為何使用NHWC
下面來分析EdgeBoard選擇NHWC數(shù)據(jù)格式的原因。
上圖表示卷積的計(jì)算過程。根據(jù)卷積的運(yùn)算特點(diǎn),相同位置窗口所有通道數(shù)與卷積的參數(shù)相乘后累加,可以有下面兩種計(jì)算方式:
先像素后通道:先把一個通道滑動窗口與卷積參數(shù)相乘后累加,再進(jìn)行下一個通道,直到所有通道乘累加完成。比如第一次滑窗計(jì)算公式:
可以看出兩種方式計(jì)算的結(jié)果是一樣。
而對于NHWC格式,即先通道后像素,是把一個像素的所有通道的數(shù)據(jù)放在一起。這樣對應(yīng)上圖第一個像素的3個通道值,第二個像素的3個通道值,第三個像素的3個通道值,它們在內(nèi)存中的地址都是連續(xù)的,也就是說一次就可以把kernel第一行需要計(jì)算的數(shù)取出,3x3的kernel需要3次取數(shù)。
而對于NCHW格式,即先像素后通道,是把一個通道的所有像素按順序排列,這樣對于一個3*3的卷積核,需要每取3個數(shù)就需要跳躍n個數(shù)后,再取3個數(shù)。一個通道需要取3次,3個通道需要取9次。
在實(shí)際網(wǎng)絡(luò)中,通常通道數(shù)會遠(yuǎn)大于卷積kernel數(shù)(不會像上圖只有3個通道,通常是幾十、幾百個通道)。這樣對于NHWC格式來說說,取數(shù)的次數(shù)會比NCHW少很多。對EdgeBoard來說,為了增加其所支持網(wǎng)絡(luò)的廣泛性,減少對大輸入尺寸和高存儲量權(quán)重網(wǎng)絡(luò)的限制,采用NHWC的格式可以實(shí)現(xiàn)分批次地把Feature Map和Weight數(shù)據(jù)讀取到FPGA的片上緩存,例如對于3x3的Kernel,我們可以只讀取三行(3WC)Feature Map的數(shù)據(jù)到FPGA內(nèi)進(jìn)行計(jì)算,即可得到一行輸出數(shù)據(jù),并傳輸?shù)狡獯笕萘烤彺?a target="_blank">DDR,而不需依賴下一個3WC的Feature Map輸入數(shù)據(jù)就可完成每一批次的輸入輸出數(shù)據(jù)傳輸。
再例如,我們也可將Weight數(shù)據(jù)根據(jù)FPGA片上緩存的不同大小分割成N份,一份一份發(fā)送到FPGA分別做卷積運(yùn)算后,再傳輸回DDR做相應(yīng)拼接,這等同于做一次大的卷積運(yùn)算,好處在于可以根據(jù)不同容量的FPGA器件做不同匹配,大大提高了代碼的硬件適配性。此外,由于C維度之間數(shù)據(jù)相關(guān)性較弱,采用NHWC格式更能發(fā)揮FPGA高并行度的計(jì)算特點(diǎn),充分利用FPGA的算力。
下表為EdgeBoard使用NHWC數(shù)據(jù)格式的網(wǎng)絡(luò)性能:
責(zé)任編輯:gt
評論