如果說上期SkrSkr隊(duì)伍的設(shè)計(jì)像是德智體美勞全面發(fā)展的“五好學(xué)生”,那么冠軍隊(duì)伍的設(shè)計(jì)則更像是“不偏科的特長生”。
作品跳出前兩屆Top3隊(duì)伍的設(shè)計(jì)思路,充分結(jié)合FPGA數(shù)據(jù)流架構(gòu)的優(yōu)勢,逐步優(yōu)化設(shè)計(jì),最終在幀率上達(dá)到212fps,首次參賽一舉奪魁。
作品全HLS設(shè)計(jì),采用PYNQ框架,其提高幀率的優(yōu)化流程在其他HLS設(shè)計(jì)中亦值得借鑒。
01
從2018年設(shè)立DAC-SDC開始,每年都會(huì)吸引全球百支知名研究團(tuán)隊(duì)參與角逐,與計(jì)算機(jī)視覺類的國際知名目標(biāo)檢測比賽不同,DAC-SDC對(duì)高精度、高效率的追求不僅僅停留在算法層面,其更注重考察基于軟硬件協(xié)同的系統(tǒng)構(gòu)建能力,即參賽設(shè)計(jì)不僅要提高復(fù)雜場景中小物體精準(zhǔn)檢測的能力,還需要考慮整個(gè)硬件系統(tǒng)在圖像處理速度和功耗方面的要求。而且隨著技術(shù)迭代速度的加快,該賽項(xiàng)的平臺(tái)和要求也在不斷改進(jìn)。2018、2019年該賽項(xiàng)由Nvidia、Xilinx 和 DJI 大疆創(chuàng)新贊助,賽項(xiàng)分為GPU和FPGA兩個(gè)方向。2020年只保留了FPGA方向。從選用平臺(tái)的角度來對(duì)比,2018年以Zynq7020作為目標(biāo)平臺(tái);2019年選用邏輯資源較多的ZU3作為目標(biāo)平臺(tái),邏輯資源的增加提升了大賽的可發(fā)揮空間。2020年仍延用19年的目標(biāo)平臺(tái)Ultra96。關(guān)于賽事詳情請參考 快訊|中國團(tuán)隊(duì)包攬頂會(huì)DAC-SDC競賽冠亞軍
2018年比賽情況
TX2 GPU和Zynq7020 的對(duì)比結(jié)果顯示,在同等精度條件下FPGA的處理速度較低,但FPGA平臺(tái)所需的功耗僅為GPU平臺(tái)的不到1/4。在2018年的設(shè)計(jì)中,Top3均采用了“自頂向下”的DNN設(shè)計(jì)思路(沿用目標(biāo)檢測常規(guī)算法),而后再考慮算法在硬件層面的優(yōu)化。其中FPGA組的冠軍來自清華大學(xué)汪玉教授團(tuán)隊(duì),其采用了深鑒科技的硬件加速器架構(gòu) DPU、全棧式工具鏈 DNNDK 和深度壓縮技術(shù)的基礎(chǔ)上,從算法、軟件和硬件對(duì)整個(gè)目標(biāo)檢測系統(tǒng)進(jìn)行了全棧式的協(xié)同優(yōu)化。通過采用硬件友好的 SSD 網(wǎng)絡(luò)和多線程優(yōu)化技術(shù),結(jié)合深度壓縮和定點(diǎn)訓(xùn)練,在保證識(shí)別精度的前提下,滿足了低功耗和實(shí)時(shí)性的要求。
2019年比賽情況
FPGA組升級(jí)到邏輯資源較多的ZU3(Ultra96)平臺(tái)。與2018年相比,在精度和速度方面的表現(xiàn)均有一定的提升。特別值得一提的是,2019年 GPU和FPGA的冠軍來自同一團(tuán)隊(duì),其由UIUC Deming Chen教授課題組聯(lián)合了 IBM、Inspirit IoT和新加坡 ADSC 的研究人員組成。該網(wǎng)絡(luò)架構(gòu)采用“自底向上”的DNN設(shè)計(jì)思路,以硬件資源限制為約束進(jìn)行網(wǎng)絡(luò)結(jié)構(gòu)搜索得到架構(gòu)的優(yōu)化設(shè)計(jì),而后將其部署在目標(biāo)平臺(tái)上。因此,冠軍團(tuán)隊(duì)的工作實(shí)質(zhì)上是同一網(wǎng)絡(luò)架構(gòu)(SkyNet)在不同平臺(tái)的優(yōu)化設(shè)計(jì)實(shí)現(xiàn)。
縱觀前兩年的工作,2018年解決的問題主要集中在限定資源條件下如何部署DNN模型;2019年冠軍組的工作則體現(xiàn)了限定資源條件下如何搜索最優(yōu)模型架構(gòu)。上述工作更多考慮的是算法的本身和資源的約束,而沒有充分發(fā)揮FPGA平臺(tái)自身優(yōu)勢。
02
我們的工作
基本設(shè)計(jì)思路
我們團(tuán)隊(duì)主要從FPGA的架構(gòu)特點(diǎn)入手對(duì)任務(wù)處理進(jìn)行優(yōu)化設(shè)計(jì)。FPGA的優(yōu)勢在于其靈活、高效地并行化設(shè)計(jì)架構(gòu),適于處理流式、計(jì)算密集型任務(wù),適于不同字節(jié)寬度的調(diào)節(jié)等。針對(duì)本賽項(xiàng)待處理的目標(biāo)檢測任務(wù)特點(diǎn),我們選用了卷積神經(jīng)網(wǎng)絡(luò)算法,其中包含多層結(jié)構(gòu),需要依次計(jì)算各層,且計(jì)算密集。結(jié)合待處理任務(wù)的特點(diǎn),為了充分發(fā)揮FPGA的優(yōu)勢,我們提出了以下設(shè)計(jì)思路:
l 算法設(shè)計(jì)優(yōu)化:壓縮神經(jīng)網(wǎng)絡(luò)的參數(shù)量,且采用低bit量化技術(shù),使得參數(shù)量較少且每個(gè)參數(shù)所需要的儲(chǔ)存空間減少,從而使所有的參數(shù)能夠置于FPGA片內(nèi)BRAM中,減少加速過程中參數(shù)頻繁調(diào)入/出帶來的開銷。
l 硬件設(shè)計(jì)優(yōu)化:基于FPGA資源構(gòu)建高效流水結(jié)構(gòu),將卷積神經(jīng)網(wǎng)絡(luò)中的所有層都置于片上,使得所有層能夠以流水線的形式并行進(jìn)行計(jì)算;設(shè)計(jì)高效的低bit的矩陣計(jì)算單元,在有限資源的約束下最大化并行度。
基于上述設(shè)計(jì)構(gòu)想,數(shù)據(jù)輸入加速器能直接輸出計(jì)算結(jié)果,中間結(jié)果不必搬運(yùn)到外部RAM,減少了不必要的時(shí)延和能耗。低bit計(jì)算減少了單個(gè)計(jì)算單元的資源開銷,從而提高了整體并行度,進(jìn)而提高了整個(gè)神經(jīng)網(wǎng)絡(luò)計(jì)算的速率。
設(shè)計(jì)方案
1、目標(biāo)檢測算法的設(shè)計(jì)
基于上述基本設(shè)計(jì)思想,我們自行構(gòu)建了適于Ultra96平臺(tái)資源限定條件的網(wǎng)絡(luò)模型。其中主干網(wǎng)絡(luò)選用類VGG架構(gòu),為了降低所需的參數(shù)量和計(jì)算量,我們嚴(yán)格控制了各層濾波器的數(shù)量,后端采用類yolo 架構(gòu)設(shè)計(jì),整個(gè)網(wǎng)絡(luò)模型如下圖2所示。與2019年的第一名相比,我們的算法雖然精度略低,但計(jì)算量和參數(shù)量都有大幅度地降低。
2、網(wǎng)絡(luò)量化設(shè)計(jì)
量化技術(shù)是整個(gè)解決方案中重要的一個(gè)環(huán)節(jié)。我們量化了整個(gè)神經(jīng)網(wǎng)絡(luò),包括權(quán)值量化,激活量化等。量化方法如下:
我們對(duì)所有的權(quán)值(W)和激活后的數(shù)據(jù)進(jìn)行了歸一化處理,使得所有的數(shù)據(jù)在尺度上是統(tǒng)一的。而后將權(quán)值和特征圖數(shù)據(jù)都量化到了4bit,雖然算法精度上有所降低,平均IoU從0.701降低了到0.649,但所需參數(shù)的儲(chǔ)存空間降為原來的八分之一。我們只需要花費(fèi)0.105 MB片上空間就能將所有參數(shù)置于片上,而Ultra 96 v2板上FPGA芯片中共有0.95 MB BRAM空間。
3、 自定義數(shù)據(jù)流的AI加速器設(shè)計(jì)
根據(jù)待處理任務(wù)特點(diǎn),我們基于目標(biāo)平臺(tái)(Ultra96)資源特點(diǎn),設(shè)計(jì)和實(shí)現(xiàn)一套“硬件函數(shù)庫”,將pytorch中的CNN算法映射到FPGA中(如下圖5)。其中,我們將pytorch中的卷積計(jì)算(Conv2d_Q)拆分成兩個(gè)部分——滑動(dòng)窗口單元(SWU)和矩陣向量乘單元(MVU),SWU負(fù)責(zé)將卷積計(jì)算展開為矩陣向量計(jì)算,MVU則負(fù)責(zé)接收SWU輸出的數(shù)據(jù)流并計(jì)算。為減少片上存儲(chǔ)空間(緩存)使用量,我們將原CNN算法中的批正則化層(BatchNorm2d)與激活量化層(ReLu_Q)合為一個(gè)模塊Bn_Relu進(jìn)行處理。為了便于構(gòu)建流水處理架構(gòu),原pytorch中采用的四個(gè)層(卷積層、批正則化層、激活量化層和池化層)就變?yōu)槲覀兌x的新四層(SWU層、MVU層、Bn_Relu層和MaxPool層),且每層中的Bn_Relu和MaxPool是可選的(圖中用虛線框標(biāo)出),每層都有獨(dú)立緩存空間存儲(chǔ)對(duì)應(yīng)層參數(shù)。同時(shí),為了提高效率,每層內(nèi)部也最大程度展開為流水形式。
我們將所有層都置于片上,當(dāng)上一層有計(jì)算輸出時(shí),下一層立即開始計(jì)算,各層同時(shí)運(yùn)行。通過計(jì)算量分配各層所需要的邏輯資源,使得每層的時(shí)延趨向一致,使加速器運(yùn)行效率最大化。
系統(tǒng)框架及優(yōu)化設(shè)計(jì)
基于上述設(shè)計(jì)思想,最終實(shí)現(xiàn)的系統(tǒng)框圖如下。其中,我們采用DMA搬運(yùn)數(shù)據(jù),CPU負(fù)責(zé)任務(wù)調(diào)度工作。為了實(shí)現(xiàn)加速器IP與CPU之間的并行,我們在外部RAM中開辟了兩塊緩沖區(qū)輪流為加速器提供圖片數(shù)據(jù)。
由于計(jì)時(shí)規(guī)則在五月份做出了調(diào)整,將讀入圖片的時(shí)間和功耗也計(jì)入在內(nèi),而我們在五月版提交代碼的速度瓶頸主要卡在讀圖(Load image)時(shí)延。針對(duì)這個(gè)問題,我們對(duì)于系統(tǒng)待處理的任務(wù)重新進(jìn)行了更為細(xì)致的優(yōu)化部署。由于待處理任務(wù)分為四個(gè)部分:Load image、Resize image(簡寫為Resize)、Compute CNN(簡寫為CNN)、Calculate bounding box(簡寫為Calc bbox)。我們分別在PS端進(jìn)行多核并行優(yōu)化處理,在PS-PL端進(jìn)行了負(fù)載均衡處理,從而優(yōu)化了任務(wù)在PS和PL端的部署,該過程對(duì)最終成績中FPS提升貢獻(xiàn)很大。
我們的成績
基于上述設(shè)計(jì),最終的實(shí)現(xiàn)的加速方案性能如下:
。
跟前兩年的結(jié)果相比,雖然我們的精度(IoU)略有損失,但在速度方面我們有了大幅度地提升。
03
總結(jié)
上述是我們在2020DAC-SDC中所做的一些努力。這是我們團(tuán)隊(duì)第一次參加DAC-SDC國際大賽,從關(guān)注該賽項(xiàng)到今天,我們一邊摸索一邊前進(jìn),很感謝組委會(huì)提供了這樣的平臺(tái)給我們實(shí)踐鍛煉和摸索提升的機(jī)會(huì)。身處計(jì)算機(jī)體系結(jié)構(gòu)發(fā)展的黃金時(shí)代是我們這代人的幸運(yùn),相信未來系統(tǒng)設(shè)計(jì)必然將向著更精準(zhǔn)、更高效、更低耗的方向邁進(jìn),我們也希望能夠通過努力與各位同仁共同見證這個(gè)時(shí)代的輝煌。同時(shí),我們的設(shè)計(jì)也已經(jīng)開源在:https://github.com/heheda365/ultra_net
04
團(tuán)隊(duì)介紹
2020DAC-SDC Top-3的BJUT_Runner團(tuán)隊(duì)來自北京工業(yè)大學(xué)信息學(xué)部張文博老師和包振山老師帶領(lǐng)的異構(gòu)計(jì)算研究小組。參加本次比賽的團(tuán)隊(duì)成員包括:詹康(圖中右下)、郭俊南和宋秉彥(圖中左下)。受2020年新型冠狀病毒疫情(COVID-19)影響,在整個(gè)參賽環(huán)節(jié),團(tuán)隊(duì)成員一直采用在線研討方式進(jìn)行溝通(下圖為本組指導(dǎo)教師和所有成員在線合影)。
原文標(biāo)題:打破常規(guī),深度結(jié)合FPGA架構(gòu)優(yōu)勢|2020DAC- SDC冠軍作品開源與技術(shù)分享
文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618649 -
dac
+關(guān)注
關(guān)注
44文章
2411瀏覽量
193775 -
開源
+關(guān)注
關(guān)注
3文章
3690瀏覽量
43840
原文標(biāo)題:打破常規(guī),深度結(jié)合FPGA架構(gòu)優(yōu)勢|2020DAC- SDC冠軍作品開源與技術(shù)分享
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
FX3板是否兼容2k和4k分辨率的視頻數(shù)據(jù)流?
通過 FX3 以 5200*3900 分辨率、15fps 的速度從我的 fpga 傳輸視頻數(shù)據(jù)流,但無法設(shè)置最小/最大比特率描述符值,怎么解決?
如何使用FPGA驅(qū)動(dòng)并行ADC和DAC芯片,使用不同編碼方式的ADC與DAC時(shí)的注意事項(xiàng)

用FPGA配置TVP5150,把PAL制標(biāo)準(zhǔn)視頻轉(zhuǎn)換成BT656數(shù)據(jù)格式,能否把數(shù)據(jù)流直接給SAA7121?
使用ADS1281做調(diào)制器,兩個(gè)調(diào)制器都是輸出1位的數(shù)據(jù)流,那合并之后數(shù)據(jù)流是幾位的呢?
適用于Oracle的SSIS數(shù)據(jù)流組件:提供快速導(dǎo)入及導(dǎo)出功能

Devart SSIS數(shù)據(jù)流組件

AMC1303E輸出接的Altera FPGA,通過FPGA解碼后輸出總是突然來個(gè)變異的大數(shù)據(jù),為什么?
FPGA 實(shí)時(shí)信號(hào)處理應(yīng)用 FPGA在圖像處理中的優(yōu)勢
DAC5675用外部時(shí)鐘,數(shù)據(jù)FPGA給,FPGA不用采集時(shí)鐘不同步發(fā)數(shù)據(jù)可以嗎?
理解ECU數(shù)據(jù)流的分析方法
請問TLV320AIC3254EVM-K怎么讀取音頻數(shù)據(jù)流?
淺談國產(chǎn)異構(gòu)雙核RISC-V+FPGA處理器AG32VF407的優(yōu)勢和應(yīng)用場景
統(tǒng)一日志數(shù)據(jù)流圖

評(píng)論