由 AI 芯片到目標檢測板,「西安交大」是如何斬獲 DAC FPGA 賽道亞軍?

雷鋒網 AI 科技評論按:2019 年 6 月 5 日,由電子自動化設計頂級會議 DAC 2019 主辦的「低功耗目標檢測系統設計挑戰賽」於美國拉斯維加斯落下帷幕。西安交通大學人工智能與機器人研究所團隊 XJTU-Tripler 憑藉對算法和架構的特殊優化,最終取得準確率 IoU61.5%;能耗 9537J,幀率 50.91Hz,功率 9.248W 的優秀成績,斬獲 FPGA 賽道的亞軍,同時他們也作為國內唯一一個進入前三的隊伍。目前,他們已計劃開源比賽相關工具,並且提供後續支持。雷鋒網 AI 科技評論將他們所提供的設計方案及解析整理如下。

由 AI 芯片到目標檢測板,「西安交大」是如何斬獲 DAC FPGA 賽道亞軍?

比賽背景

DAC,英文全稱 ACM/IEEE Design Automation Conference,是電子設計自動化和嵌入式系統領域的頂級會議。系統設計大賽(System Design Contest)由 DAC 主辦,旨在為全球機器學習系統設計者提供技術交流平臺,挖掘領域內優秀方案和人才。

賽制規定以 FPGA 和 GPU 兩種硬件架構劃分,分別進行競賽。針對 FPGA 賽道,本屆大賽由 Xilinx、大疆和英偉達贊助,針對比賽方給定無人機視角的訓練數據集 (9 萬張分辨率為 360x640 的圖片,單目標標註)進行訓練,在比賽方自有的 5 萬張測試數據集上進行測試。最終檢測精度 IoU(Intersection over Union))高、且能量消耗低者勝出。

任務部署

西安交通大學人工智能與機器人研究所任鵬舉副教授所在的認知計算架構團隊 XJTU-Tripler 在本次大賽中,硬件方面使用的是專為低功耗 IoT 環境而設計的 Ultra96——Xilinx ZYNQ 的開發板,其 PS 側搭載四核 ARM Cortex-A53 CPU,主頻為 1.5GHz;由比賽方所提供。軟件方面則用到了基於 Python 的 PYNQ 框架進行開發。其中由團隊成員:趙博然、趙文哲、夏天、陳飛、樊瓏、宗鵬陳負責硬件開發;魏亞東、塗志俊、趙之旭、董志偉負責算法優化。

為了達到檢測精度與能耗的平衡,XJTU-Triper 團隊選擇並優化了面向端側的輕量級神經網絡框架;並針對 ZU3 的資源限制,精簡了團隊之前設計的一個可以支持通用網絡的 DNN 加速器 (HiPU),將其部署在 ZU3 的 PL 側。因此,XJTU-Triper 團隊的主要工作分為針對硬件平臺的算法優化和架構設計優化:

算法優化

  1. 選擇 ShuffleNet V2 作為特徵提取的主框架;

  2. 選擇 YOLO 作為單目標位置的迴歸框架;

  3. 對神經網絡進行 8bit 量化。

HiPU 優化

  1. 支持 CONV,FC,Dep-wise CONV,Pooling,Ele-wise Add/Mul 等操作,峰值算力為 268Gops,效率大於 80%;

  2. 支持 Channel shuffle、divide、concat 操作,且不消耗額外時間;

  3. 提供 C、RISC-V 彙編接口的 API,調度靈活;

  4. HiPU 完全由 PL 側實現,不依賴 PS 側。PS 主要工作負載為圖片預處理和結果輸出上。

相關技術詳解

  • 單目標檢測網絡選擇

為滿足移動端的檢測實時性,XJTU-Triper 團隊最終選定了 YOLO 作為基礎檢測框架,自行定製的網絡 ShuffleDet。並將其中的特徵提取網絡替換為輕量級的 ShuffleNet V2,其參數規模略大於 1X。如下圖所示為定製的單目標檢測網絡。

由 AI 芯片到目標檢測板,「西安交大」是如何斬獲 DAC FPGA 賽道亞軍?

ShuffleDet 的網絡結構示意圖

  • 神經網絡的訓練與量化

XJTU-Tripler 團隊首先在 ImageNet 數據集上預訓練一個標準的 ShuffleNet V2 分類網絡。待模型收斂後,將其中前三層特徵提取部分的參數重載回 ShuffleDet 網絡中。使用比賽方的訓練集進行全部層參數的訓練。

為了適應 FPGA 的定點運算,待所有參數訓練完成後,對所有參數進行量化操作。該團隊將網絡參數和 feature map 均量化為 8bit 定點。量化過程主要分為以下幾步:1) 將 BN 層合併到參數中;2) 將合併後的參數進行對稱量化;3) 離線量化完成後需對參數進行 fine tune。下圖為量化操作的示意圖。

由 AI 芯片到目標檢測板,「西安交大」是如何斬獲 DAC FPGA 賽道亞軍?

網絡參數的量化流程

經過量化後,最終目標檢測網絡 ShuffleDet 的卷積層數約為 74 層,權重約為 1.94MB,Bias 約為 78KB。量化前的全精度準確率為 67.1%,量化後的精度為 61.5%,量化操作帶來的精度損失為 5.6%。

  • 關於 HiPU

1) 整體概況

由於西安交通大人工智能與機器人研究所團隊主要面向專用集成電路(AISC)進行設計,其 FPGA 上的設計實現主要是進行功能的驗證,因此,針對賽方提供的計算平臺,我們需要對 HiPU 進行適當的裁剪,以適應 ZU3 的資源。如下圖所示為裁剪後的 HiPU 設計框圖,及其特性。HiPU 工作在 233MHz,其峰值算力為 268Gops;採用 C/RISC-V 彙編作為編程接口,卷積效率平均在 80% 以上。

由 AI 芯片到目標檢測板,「西安交大」是如何斬獲 DAC FPGA 賽道亞軍?

HiPU 的結構框圖與特性

HiPU 支持各種常見的 NN 運算,包括:CONV,FC,Dep-wise CONV,Pooling,Ele-wise Add/Mul 等運算。其中 FC 也可以做到接近 100% 的計算效率。

HiPU 支持 channel 方向的 shuffle,divide,concat 操作。當這些操作緊接在卷積運算之後時,可以在硬件上進行合併,不消耗額外的時間。

HiPU 可以工作在任何種類的 Xilinx FPGA 上,不受 Zynq 架構的限制。

HiPU 底層實現矩陣運算,向量運算,以及標量運算。在做好調度的情況下,可以支持任意類型的並行計算。未來將實現稀疏矩陣運算的優化,從而支持高效率的 DeCONV 運算,feature map 稀疏優化。

2) HiPU 優化點分析——通過層間級聯減少所需的 DDR 帶寬

HiPU 設計性能有兩個重要的方面:一個方面是 MAC 運算單元的利用率;一個是數據傳輸網絡是否可以匹配 MAC 所需的數據。其中數據傳輸網絡的限制大多數來自 DDR 接口。本設計針對 DDR 接口進行專門的優化。

由於 HiPU 中 SRAM 的大小限制,無法將一層 feature map 的數據完全放在 HiPU 的 SRAM 中。採用平常的計算次序則需要將每一層的 feature map 計算結果返回到 DDR 中存儲。這樣一來每一層的 feature map 數據都需要一次 DDR 的訪問,對 DDR 的帶寬需求非常大,也會消耗額外的功耗

該團隊通過層間級聯的方式降低 DDR 的帶寬需求。以 ShuffleNet 的 bottleneck 為分界,從每個 bottleneck 的輸入處從 DDR 讀取一行 feature map,依次計算完所有的層後,輸出的一行 feature map 才寫回到 DDR。依次計算完所有行。如下圖所示為 Module C 的層間級聯計算次序。

由 AI 芯片到目標檢測板,「西安交大」是如何斬獲 DAC FPGA 賽道亞軍?

Module-C 採用層間級聯計算方式

3) HiPU 優化點分析——輸入圖像格式轉換以提升處理效率

HiPU 一次並行計算 8 個輸入 channel。然而網絡第一層輸入圖像僅有 RGB 這 3 個通道,導致 HiPU 計算效率僅為 3/8。因此,我們團隊針對輸入圖像設計了一個轉換模塊。如果 Conv1 的 kernel 的 width 為 3,則將輸入圖像的通道從 3 擴展到 9。最終使得第一層的處理效率從 0.38 提升到了 0.56,其轉換示意圖如下圖所示。

由 AI 芯片到目標檢測板,「西安交大」是如何斬獲 DAC FPGA 賽道亞軍?

輸入圖像在行方向上的轉換

  • 系統優化設計與分析

1) 圖像解碼與卷積神經網絡計算並行化

由於 HiPU 僅僅依賴 Zynq 的 PL 側的資源進行設計,PS 側的資源可以空出來做系統 IO 相關的工作。我們團隊在處理當前圖片的檢測運算時,在 PS 側預讀並解碼下一幅圖片,提高處理的並行度,從而使整體檢測幀率從 30.3Hz 提高到 50.9Hz。

如下圖所示為圖像解碼與卷積神經網絡並行化的示意圖。

(a) 並行化之前的工作流程

由 AI 芯片到目標檢測板,「西安交大」是如何斬獲 DAC FPGA 賽道亞軍?

(b) 並行化之後的工作流程

圖像解碼與卷積神經網絡並行化的示意圖

2) 使用 C 代碼加速 PS 側原來的 Python 代碼

使用 C 代碼重構 PS 側比較耗時的操作,並在 Pynq 框架中採用 ctypes 接口調用重構的 C 代碼: 1) 預先計算 PL 側數據中置信度和 bbox 座標的地址指針;2) 找到最大的置信度和對應的 BBox 的座標,然後根據相對座標計算出絕對座標;

3) 使用門控時鐘降低 PL 側的能耗

為了降低系統的能量消耗,設計了門控時鐘策略。當 HiPU 計算完一張圖片的時候自動關閉時鐘,下一張圖片開始計算的時候再激活時鐘。設置這個策略主要基於以下兩個原因:

首先,系統對 jpg 格式圖片解算的時間不固定,當 SD 卡型號不固定的時候,其均值在 7ms-12ms 之間,部分圖片解算時間最大值可以到達 100ms;

其次,系統的功耗測量進程和其他額外開銷會佔用一部分的 cpu 時間,並且 PS 和 PL 共享 DDR 帶寬,這導致了 HiPU 在 166Mhz 的時幀率到達約 50hz,但是升高 HiPU 到 200Mhz 時,系統處理幀率仍然保持在 50hz 左右。

上述兩個原因會導致 HiPU 處理時間和圖片 jpeg 解算時間匹配變得不固定;當 HiPU 處理圖像時間比圖像解算時間短時,HiPU 會「空跑」浪費能量。另外,針對搶佔 DDR 帶寬的情況,還需繼續優化。

結果

全球共有 58 支隊伍註冊了 FPGA 比賽任務,有 11 支隊伍提交了設計(完賽率 19%)。冠軍為 iSmart3,由 UIUC、IBM、Inspirit IoT 公司聯合組隊;亞軍為 XJTU-Tripler,由西安交通大學人工智能與機器人研究所設計;季軍為 SystemsETHZ,來自 ETH Zurich 的隊伍。

其中,XJTU-Tripler 團隊是唯一使用 Verilog,而不是 HLS 進行設計的獲獎隊伍。由於其設計的高性能 DNN 加速器,其使用的神經網絡規模也是最大的。最終競賽成績如下:

DAC19 系統設計競賽排名

資源情況比較

同樣的 ShuffleDet 算法在 TX2 平臺上也進行了部署,下表是兩者的分析對比。可以看出 8bits 量化後造成了 5.6% 的 IoU 絕對損失(-8.3%),但帶來了 28.87 的幀率提升(+131%)和 8309J 的能耗減少(-46.56%)。

ShuffleDet 在 TX2 和 Ultra96 FPGA 平臺上的性能比較

更多關於 DAC 2019

https://www.dac.com/content/2019-system-design-contest

雷鋒網 AI 科技評論

相關推薦

推薦中...