近日,第二屆「低功耗目標檢測系統設計挑戰賽」落下帷幕。來自西安交通大學人工智慧與機器人研究所的隊伍 XJTU-Tripler 獲得本次比賽的亞軍。本文將介紹這支隊伍的設計解決方案。
2019 年 6 月 5 日,由自動化設計頂級會議 Design Automation Conference(DAC'2019, CCF A 類會議)主辦的第二屆「低功耗目標檢測系統設計挑戰賽」於美國拉斯維加斯落下帷幕。該比賽由 Xilinx、大疆和英偉達贊助,針對比賽方給定的無人機視角的 12 類訓練資料集(93.52K 張解析度為 360x640 的圖片,單目標標註)進行訓練,在比賽方自有的 52.75K 張測試資料集上進行測試。最終檢測精度 IoU (Intersection over Union) 高且能量消耗低者勝出。全球共有 58 支隊伍註冊了 FPGA 比賽任務,最終只有 11 支隊伍提交了設計(完賽率 19%)。冠軍是由 UIUC、IBM、Inspirit IoT 公司聯合組隊的 iSmart3(該隊伍同時也是 GPU 賽道的冠軍);亞軍 XJTU-Tripler 來自西安交通大學人工智慧與機器人研究所;季軍來自 ETH Zurich 的 SystemsETHZ。
圖 1:58 家註冊隊伍的全球分佈情況
2018 和 2019 年賽事對比
2019 年為該系列賽事的第二屆比賽。與上一屆相比,Xilinx 提供了 Ultra96 代替了去年的 PYNQ Z-1 FPGA 開發板,FPGA 晶片由 Zynq 7020 升級為 ZU3。Ultra96 是一款優秀的 Xilinx ZYNQ 開發板,針對低功耗 IoT 環境而設計。其 PS 側搭載四核 ARM Cortex-A53 CPU,主頻為 1.3GHz,搭載 2GB LPDDR4;PYNQ Z-1 是上一代 7 系列 FPGA,PS 側搭載雙核 ARM A9 CPU,主頻為 866Mhz,搭載 512MB 的 DDR3。
圖 2:2018 和 2019 年比賽使用的不同 FPGA 開發板及核心晶片資源對比。Ultra96(左)PYNQ Z-1(右)
2019 年和 2018 年的前三設計對比如下表所示:
由此可見,2019 年的作品比 2018 年有了大幅提升,除了得益於 FPGA 平臺本身的效能外,在設計層面也有比較明顯的變化。
亞軍 XJTU-Tripler 設計方案簡介
HiPU 整體介紹
HiPU 是一款面向深度神經網路的通用加速器,完成了類似於英偉達的 NVDLA 與外部控制器的整合功能,並且在 FPGA 上的資源消耗與工作頻率指標都有顯著提升。由於西安交通大學人工智慧與機器人研究所團隊 (http://iair.xjtu.edu.cn) 主要面向專用積體電路 (AISC) 進行設計,其 FPGA 設計主要是進行功能的驗證,因此,針對賽方提供的計算平臺,我們需要對 HiPU 進行適當的裁剪,以適應 ZU3 的資源。圖 3 所示為裁剪後的 HiPU 設計框圖及其特性。在 Ultra96 板卡上,HiPU 可以在 233MHz 上執行,其峰值算力為 268Gops;採用 C/RISC-V 彙編作為程式設計介面,卷積效率平均在 80% 以上。
圖 3: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 稀疏最佳化。
下圖為以 DAC19 系統設計競賽為素材,採用 HiPU 的實時雙路檢測 Demo:
影片連結如下:https://www.bilibili.com/video/av55982436/
面向 DAC 比賽的最佳化
為了達到檢測精度與能耗的平衡,XJTU-Triper 團隊選擇並最佳化了面向端側的輕量級神經網路框架。並針對 ZU3 的資源限制,精簡了團隊正在設計的一個可以支援通用網路的 DNN 加速器 (HiPU),並將其部署在 ZU3 的 PL 側。主要工作分為針對硬體平臺的演算法最佳化和架構設計最佳化兩部分:
演算法最佳化主要有:
選擇 ShuffleNet V2 作為特徵提取的主框架;
選擇 YOLO 作為單目標位置的迴歸框架;
對神經網路進行 8bit 量化。
硬體最佳化主要有:
支援 CONV、FC、Dep-wise CONV、Pooling、Ele-wise Add/Mul 等操作;
支援 Channel shuffle、divide、concat 操作,且不消耗額外時間;
提供 C、RISC-V 彙編介面的 API,排程靈活;
HiPU 完全由 PL 側實現,不依賴 PS 側。PS 主要工作負載為圖片預處理和結果輸出。
單目標檢測網路選擇
為滿足移動端的檢測實時性,該團隊最終選定了 YOLO 作為基礎檢測框架,並自行定製網路 ShuffleDet。將其中的特徵提取網路替換為輕量級的 ShuffleNet V2,其引數規模略大於 1X。
如圖 4 所示為定製的單目標檢測網路。
圖 4:ShuffleDet 的網路結構示意圖
神經網路的訓練與量化
首先在 ImageNet 資料集上預訓練一個標準的 ShuffleNet V2 分類網路。待模型收斂後,將其中的特徵提取部分的引數遷移到 ShuffleDet 網路中。使用比賽方的訓練集進行其他層的引數訓練。為了適應 FPGA 的定點運算,待所有引數訓練完成後,對所有引數進行量化操作。該團隊將網路引數和 feature map 均量化為 8bit 定點。
量化過程主要分為以下幾步:
1) 將 BN 層合併到引數中;
2) 將合併後的引數進行對稱量化;
3) 量化後的引數如果直接使用,精度損失過於嚴重,因此量化後還需要對引數進行 fine tune。經過量化後,最終的 ShuffleDet 網路的卷積層數約為 74 層,權重約為 1.94MB,Bias 約為 78KB。
如圖 5 所示為量化操作的示意圖。
圖 5:網路引數的量化流程
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。依次計算完所有行。如圖 6 所示為 Module C 的層間級聯計算次序。
圖 6:Module-C 採用層間級聯計算方式
DSP 雙倍頻和單倍頻的設計方案
在設計 HiPU 時,分別針對 Xilinx 中 DSP 模組工作在單倍頻與雙倍頻進行設計。雙倍頻模式可以顯著提升 Xilinx 中 DSP 的利用率,且基礎工作頻率與單倍頻設計相當 (233MHz),是未來產品中以 FPGA 為交付版本的更好選擇。
雙倍頻 DSP 方案的主要設計難點為:1)DSP 累加鏈在同相位不同時脈頻率下的設計;2)雙倍頻時鐘域下單倍頻資料的選擇訊號生成;3)雙倍頻時鐘域中的 LUT 需要進行物理約束以確保工作頻率不受影響。仔細處理好上述 3 個難點,就可以得到更加高效的設計。
由於雙倍頻 DSP 方案消耗的 DSP 數目僅為單倍頻方案的一半,當使用相同數目的 DSP 時,雙倍頻方案的峰值算力為單倍頻的一倍,即可以達到 476Gops。然而本次競賽由於時間關係,沒有將雙倍頻 DSP 的規模做到極致,僅做到與單倍頻峰值算力一致的程度。在這種情況下,雙倍頻方案由於工作頻率較高,能耗比單倍頻方案較高。最終團隊提交了單倍頻方案。
系統最佳化設計
1) 影像解碼與卷積神經網路計算並行化
由於 HiPU 僅僅依賴 Zynq 的 PL 側資源進行設計,PS 側的資源可以空出來做系統 IO 相關的工作。我們團隊在處理當前圖片的檢測運算時,在 PS 側預讀並解碼下一幅圖片,提高處理的並行度,從而使整體檢測幀率從 30.3Hz 提高到 50.9Hz。
如圖 7 所示為影像解碼與卷積神經網路並行化的示意圖。
圖 7:影像解碼與卷積神經網路並行化的示意圖
2) 使用門控時鐘降低 PL 側的能耗
為了降低系統的能量消耗,該團隊設計了門控時鐘策略。當 HiPU 計算完一張圖片的時候自動關閉時鐘,下一張圖片開始計算的時候再啟用時鐘。設定這個策略主要基於以下兩個原因:
首先,系統對 jpg 格式圖片解算的時間不固定,當 SD 卡型號不固定的時候,其均值在 7ms-12ms 之間,部分圖片解算時間最大值可以到達 100ms;
其次,系統的功耗測量程式和其他額外開銷會佔用一部分的 cpu 時間,並且 PS 和 PL 共享 DDR 頻寬,這導致了 HiPU 在 166Mhz 的時幀率到達約 50hz,但是升高 HiPU 到 200Mhz 時,系統處理幀率仍然保持在 50hz 左右。
上述兩個原因會導致 HiPU 處理時間和圖片 jpeg 解算時間匹配變得不固定;當 HiPU 處理影像時間比影像解算時間短時,HiPU 會「空跑」浪費能量。另外,針對搶佔 DDR 頻寬的情況,還需繼續最佳化。
3)輸入影像格式轉換以提升處理效率
HiPU 一次平行計算 8 個輸入 channel。然而網路第一層輸入影像僅有 RGB 這 3 個通道,導致 HiPU 計算效率僅為 3/8。因此,我們團隊針對輸入影像設計了一個轉換模組。如果 Conv1 的 kernel 的 width 為 3,則將輸入影像的通道從 3 擴充套件到 9。最終使得第一層的處理效率從 0.38 提升到了 0.56,其轉換示意圖如圖 8 所示。
圖 8:輸入影像在行方向上的轉換
4) 使用 C 程式碼加速 PS 側原來的 Python 程式碼
使用 C 程式碼重構 PS 側比較耗時的操作,並在 Pynq 框架中採用 ctypes 介面呼叫重構的 C 程式碼: 1) 預先計算 PL 側資料中置信度和 bbox 座標的地址指標;2) 找到最大的置信度和對應的 BBox 的座標,然後根據相對座標計算出絕對座標。
小結
1)與 Nvidia TX2 實現的效能對比
團隊將同樣的 ShuffleDet 演算法在 TX2 平臺上也進行了部署,下表是兩者的效能分析對比。可以看出 8bits 量化後造成了 0.056 的 IoU 損失(-8.3%),但 FPGA 上的設計實現帶來了 28.87 的幀率提升(+131%)和 8309J 的能量減少(-46.56%)。
ShuffleDet 在 TX2 和 Ultra96 FPGA 平臺上的效能比較
2)面向自主智慧體的機載計算方案
團隊圍繞面向自主智慧體的機載計算開展研究工作,目前已完成了基於無人機的目標捕獲和定位,以及無人機/無人車空地協同等原型系統設計 (前期的研究主要採用 TX2 用於演算法的快速迭代),之後將使用 FPGA 平臺代替 TX2。
無人機最終演示影片連結:https://www.bilibili.com/video/av55971956/
空地協同快速透過迷宮影片連結:https://www.bilibili.com/video/av55966162/
空地協同實景導航影片連結:https://www.bilibili.com/video/av55972226/
3)未來的工作
未來該團隊的設計需要在以下幾個方面繼續加強:首先,輕量級演算法設計與訓練。團隊將投入更多的精力去分析各個網路結構在量化後的優劣;其次,硬體設計需要繼續迭代,下一版設計會提高靈活性以支援更多模型,同時精簡運算邏輯以在 ZU3 上實現更高的峰值算力。除了繼續提升和最佳化 FPGA 的設計外,我們還會進行原型晶片設計和流片。
本專案由西安交通大學 人工智慧與機器人研究所 任鵬舉副教授所在的認知計算架構小組完成的設計,團隊成員:趙博然、趙文哲、夏天、陳飛、樊瓏、宗鵬陳負責硬體開發;魏亞東、塗志俊、趙之旭、董志偉負責演算法最佳化 。