0
本文作者: 楊鯉萍 | 2019-06-25 16:16 |
雷鋒網(wǎng) AI 科技評論按:2019 年 6 月 5 日,由電子自動化設(shè)計頂級會議 DAC 2019 主辦的「低功耗目標(biāo)檢測系統(tǒng)設(shè)計挑戰(zhàn)賽」于美國拉斯維加斯落下帷幕。西安交通大學(xué)人工智能與機器人研究所團隊 XJTU-Tripler 憑借對算法和架構(gòu)的特殊優(yōu)化,最終取得準(zhǔn)確率 IoU61.5%;能耗 9537J,幀率 50.91Hz,功率 9.248W 的優(yōu)秀成績,斬獲 FPGA 賽道的亞軍,同時他們也作為國內(nèi)唯一一個進入前三的隊伍。目前,他們已計劃開源比賽相關(guān)工具,并且提供后續(xù)支持。雷鋒網(wǎng) AI 科技評論將他們所提供的設(shè)計方案及解析整理如下。
比賽背景
DAC,英文全稱 ACM/IEEE Design Automation Conference,是電子設(shè)計自動化和嵌入式系統(tǒng)領(lǐng)域的頂級會議。系統(tǒng)設(shè)計大賽(System Design Contest)由 DAC 主辦,旨在為全球機器學(xué)習(xí)系統(tǒng)設(shè)計者提供技術(shù)交流平臺,挖掘領(lǐng)域內(nèi)優(yōu)秀方案和人才。
賽制規(guī)定以 FPGA 和 GPU 兩種硬件架構(gòu)劃分,分別進行競賽。針對 FPGA 賽道,本屆大賽由 Xilinx、大疆和英偉達贊助,針對比賽方給定無人機視角的訓(xùn)練數(shù)據(jù)集 (9 萬張分辨率為 360x640 的圖片,單目標(biāo)標(biāo)注)進行訓(xùn)練,在比賽方自有的 5 萬張測試數(shù)據(jù)集上進行測試。最終檢測精度 IoU(Intersection over Union))高、且能量消耗低者勝出。
任務(wù)部署
西安交通大學(xué)人工智能與機器人研究所任鵬舉副教授所在的認知計算架構(gòu)團隊 XJTU-Tripler 在本次大賽中,硬件方面使用的是專為低功耗 IoT 環(huán)境而設(shè)計的 Ultra96——Xilinx ZYNQ 的開發(fā)板,其 PS 側(cè)搭載四核 ARM Cortex-A53 CPU,主頻為 1.5GHz;由比賽方所提供。軟件方面則用到了基于 Python 的 PYNQ 框架進行開發(fā)。其中由團隊成員:趙博然、趙文哲、夏天、陳飛、樊瓏、宗鵬陳負責(zé)硬件開發(fā);魏亞東、涂志俊、趙之旭、董志偉負責(zé)算法優(yōu)化。
為了達到檢測精度與能耗的平衡,XJTU-Triper 團隊選擇并優(yōu)化了面向端側(cè)的輕量級神經(jīng)網(wǎng)絡(luò)框架;并針對 ZU3 的資源限制,精簡了團隊之前設(shè)計的一個可以支持通用網(wǎng)絡(luò)的 DNN 加速器 (HiPU),將其部署在 ZU3 的 PL 側(cè)。因此,XJTU-Triper 團隊的主要工作分為針對硬件平臺的算法優(yōu)化和架構(gòu)設(shè)計優(yōu)化:
算法優(yōu)化
選擇 ShuffleNet V2 作為特征提取的主框架;
選擇 YOLO 作為單目標(biāo)位置的回歸框架;
對神經(jīng)網(wǎng)絡(luò)進行 8bit 量化。
HiPU 優(yōu)化
支持 CONV,F(xiàn)C,Dep-wise CONV,Pooling,Ele-wise Add/Mul 等操作,峰值算力為 268Gops,效率大于 80%;
支持 Channel shuffle、divide、concat 操作,且不消耗額外時間;
提供 C、RISC-V 匯編接口的 API,調(diào)度靈活;
HiPU 完全由 PL 側(cè)實現(xiàn),不依賴 PS 側(cè)。PS 主要工作負載為圖片預(yù)處理和結(jié)果輸出上。
相關(guān)技術(shù)詳解
單目標(biāo)檢測網(wǎng)絡(luò)選擇
為滿足移動端的檢測實時性,XJTU-Triper 團隊最終選定了 YOLO 作為基礎(chǔ)檢測框架,自行定制的網(wǎng)絡(luò) ShuffleDet。并將其中的特征提取網(wǎng)絡(luò)替換為輕量級的 ShuffleNet V2,其參數(shù)規(guī)模略大于 1X。如下圖所示為定制的單目標(biāo)檢測網(wǎng)絡(luò)。
ShuffleDet 的網(wǎng)絡(luò)結(jié)構(gòu)示意圖
神經(jīng)網(wǎng)絡(luò)的訓(xùn)練與量化
XJTU-Tripler 團隊首先在 ImageNet 數(shù)據(jù)集上預(yù)訓(xùn)練一個標(biāo)準(zhǔn)的 ShuffleNet V2 分類網(wǎng)絡(luò)。待模型收斂后,將其中前三層特征提取部分的參數(shù)重載回 ShuffleDet 網(wǎng)絡(luò)中。使用比賽方的訓(xùn)練集進行全部層參數(shù)的訓(xùn)練。
為了適應(yīng) FPGA 的定點運算,待所有參數(shù)訓(xùn)練完成后,對所有參數(shù)進行量化操作。該團隊將網(wǎng)絡(luò)參數(shù)和 feature map 均量化為 8bit 定點。量化過程主要分為以下幾步:1) 將 BN 層合并到參數(shù)中;2) 將合并后的參數(shù)進行對稱量化;3) 離線量化完成后需對參數(shù)進行 fine tune。下圖為量化操作的示意圖。
網(wǎng)絡(luò)參數(shù)的量化流程
經(jīng)過量化后,最終目標(biāo)檢測網(wǎng)絡(luò) ShuffleDet 的卷積層數(shù)約為 74 層,權(quán)重約為 1.94MB,Bias 約為 78KB。量化前的全精度準(zhǔn)確率為 67.1%,量化后的精度為 61.5%,量化操作帶來的精度損失為 5.6%。
關(guān)于 HiPU
1) 整體概況
由于西安交通大人工智能與機器人研究所團隊主要面向?qū)S眉呻娐罚ˋISC)進行設(shè)計,其 FPGA 上的設(shè)計實現(xiàn)主要是進行功能的驗證,因此,針對賽方提供的計算平臺,我們需要對 HiPU 進行適當(dāng)?shù)牟眉?,以適應(yīng) ZU3 的資源。如下圖所示為裁剪后的 HiPU 設(shè)計框圖,及其特性。HiPU 工作在 233MHz,其峰值算力為 268Gops;采用 C/RISC-V 匯編作為編程接口,卷積效率平均在 80% 以上。
HiPU 的結(jié)構(gòu)框圖與特性
HiPU 支持各種常見的 NN 運算,包括:CONV,F(xiàn)C,Dep-wise CONV,Pooling,Ele-wise Add/Mul 等運算。其中 FC 也可以做到接近 100% 的計算效率。
HiPU 支持 channel 方向的 shuffle,divide,concat 操作。當(dāng)這些操作緊接在卷積運算之后時,可以在硬件上進行合并,不消耗額外的時間。
HiPU 可以工作在任何種類的 Xilinx FPGA 上,不受 Zynq 架構(gòu)的限制。
HiPU 底層實現(xiàn)矩陣運算,向量運算,以及標(biāo)量運算。在做好調(diào)度的情況下,可以支持任意類型的并行計算。未來將實現(xiàn)稀疏矩陣運算的優(yōu)化,從而支持高效率的 DeCONV 運算,feature map 稀疏優(yōu)化。
2) HiPU 優(yōu)化點分析——通過層間級聯(lián)減少所需的 DDR 帶寬
HiPU 設(shè)計性能有兩個重要的方面:一個方面是 MAC 運算單元的利用率;一個是數(shù)據(jù)傳輸網(wǎng)絡(luò)是否可以匹配 MAC 所需的數(shù)據(jù)。其中數(shù)據(jù)傳輸網(wǎng)絡(luò)的限制大多數(shù)來自 DDR 接口。本設(shè)計針對 DDR 接口進行專門的優(yōu)化。
由于 HiPU 中 SRAM 的大小限制,無法將一層 feature map 的數(shù)據(jù)完全放在 HiPU 的 SRAM 中。采用平常的計算次序則需要將每一層的 feature map 計算結(jié)果返回到 DDR 中存儲。這樣一來每一層的 feature map 數(shù)據(jù)都需要一次 DDR 的訪問,對 DDR 的帶寬需求非常大,也會消耗額外的功耗
該團隊通過層間級聯(lián)的方式降低 DDR 的帶寬需求。以 ShuffleNet 的 bottleneck 為分界,從每個 bottleneck 的輸入處從 DDR 讀取一行 feature map,依次計算完所有的層后,輸出的一行 feature map 才寫回到 DDR。依次計算完所有行。如下圖所示為 Module C 的層間級聯(lián)計算次序。
Module-C 采用層間級聯(lián)計算方式
3) HiPU 優(yōu)化點分析——輸入圖像格式轉(zhuǎn)換以提升處理效率
HiPU 一次并行計算 8 個輸入 channel。然而網(wǎng)絡(luò)第一層輸入圖像僅有 RGB 這 3 個通道,導(dǎo)致 HiPU 計算效率僅為 3/8。因此,我們團隊針對輸入圖像設(shè)計了一個轉(zhuǎn)換模塊。如果 Conv1 的 kernel 的 width 為 3,則將輸入圖像的通道從 3 擴展到 9。最終使得第一層的處理效率從 0.38 提升到了 0.56,其轉(zhuǎn)換示意圖如下圖所示。
輸入圖像在行方向上的轉(zhuǎn)換
系統(tǒng)優(yōu)化設(shè)計與分析
1) 圖像解碼與卷積神經(jīng)網(wǎng)絡(luò)計算并行化
由于 HiPU 僅僅依賴 Zynq 的 PL 側(cè)的資源進行設(shè)計,PS 側(cè)的資源可以空出來做系統(tǒng) IO 相關(guān)的工作。我們團隊在處理當(dāng)前圖片的檢測運算時,在 PS 側(cè)預(yù)讀并解碼下一幅圖片,提高處理的并行度,從而使整體檢測幀率從 30.3Hz 提高到 50.9Hz。
如下圖所示為圖像解碼與卷積神經(jīng)網(wǎng)絡(luò)并行化的示意圖。
(a) 并行化之前的工作流程
(b) 并行化之后的工作流程
圖像解碼與卷積神經(jīng)網(wǎng)絡(luò)并行化的示意圖
2) 使用 C 代碼加速 PS 側(cè)原來的 Python 代碼
使用 C 代碼重構(gòu) PS 側(cè)比較耗時的操作,并在 Pynq 框架中采用 ctypes 接口調(diào)用重構(gòu)的 C 代碼: 1) 預(yù)先計算 PL 側(cè)數(shù)據(jù)中置信度和 bbox 坐標(biāo)的地址指針;2) 找到最大的置信度和對應(yīng)的 BBox 的坐標(biāo),然后根據(jù)相對坐標(biāo)計算出絕對坐標(biāo);
3) 使用門控時鐘降低 PL 側(cè)的能耗
為了降低系統(tǒng)的能量消耗,設(shè)計了門控時鐘策略。當(dāng) HiPU 計算完一張圖片的時候自動關(guān)閉時鐘,下一張圖片開始計算的時候再激活時鐘。設(shè)置這個策略主要基于以下兩個原因:
首先,系統(tǒng)對 jpg 格式圖片解算的時間不固定,當(dāng) SD 卡型號不固定的時候,其均值在 7ms-12ms 之間,部分圖片解算時間最大值可以到達 100ms;
其次,系統(tǒng)的功耗測量進程和其他額外開銷會占用一部分的 cpu 時間,并且 PS 和 PL 共享 DDR 帶寬,這導(dǎo)致了 HiPU 在 166Mhz 的時幀率到達約 50hz,但是升高 HiPU 到 200Mhz 時,系統(tǒng)處理幀率仍然保持在 50hz 左右。
上述兩個原因會導(dǎo)致 HiPU 處理時間和圖片 jpeg 解算時間匹配變得不固定;當(dāng) HiPU 處理圖像時間比圖像解算時間短時,HiPU 會「空跑」浪費能量。另外,針對搶占 DDR 帶寬的情況,還需繼續(xù)優(yōu)化。
結(jié)果
全球共有 58 支隊伍注冊了 FPGA 比賽任務(wù),有 11 支隊伍提交了設(shè)計(完賽率 19%)。冠軍為 iSmart3,由 UIUC、IBM、Inspirit IoT 公司聯(lián)合組隊;亞軍為 XJTU-Tripler,由西安交通大學(xué)人工智能與機器人研究所設(shè)計;季軍為 SystemsETHZ,來自 ETH Zurich 的隊伍。
其中,XJTU-Tripler 團隊是唯一使用 Verilog,而不是 HLS 進行設(shè)計的獲獎隊伍。由于其設(shè)計的高性能 DNN 加速器,其使用的神經(jīng)網(wǎng)絡(luò)規(guī)模也是最大的。最終競賽成績?nèi)缦拢?/p>
DAC19 系統(tǒng)設(shè)計競賽排名
資源情況比較
同樣的 ShuffleDet 算法在 TX2 平臺上也進行了部署,下表是兩者的分析對比??梢钥闯?8bits 量化后造成了 5.6% 的 IoU 絕對損失(-8.3%),但帶來了 28.87 的幀率提升(+131%)和 8309J 的能耗減少(-46.56%)。
ShuffleDet 在 TX2 和 Ultra96 FPGA 平臺上的性能比較
更多關(guān)于 DAC 2019
雷鋒網(wǎng) AI 科技評論
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。