盧金儀, 唐維偉, 徐文輝, 顏露新, 鐘 勝, 鄒 旭
(1.華中科技大學 人工智能與自動化學院,湖北 武漢 430074;2.華中科技大學 多譜信息處理技術國家級重點實驗室,湖北 武漢 430074)
隨著人工智能及計算機視覺[1]等技術的發展,卷積神經網絡被逐漸應用在目標跟蹤任務中。目標跟蹤的主要流程包括候選預測、特征提取、模板表征和建模求解。在建模求解的步驟中,按照所采取的建模技術將目標跟蹤算法大致分為兩大類:生成式方法和判別式方法[2]。傳統的判別式模型在特征提取步驟中,主要提取的是人工定義并構建的特征,常用的人工定義特征包括:HOG特征、SIFT特征、Haar特征等。在統計建模步驟中,使用支持向量機、Boosting算法等常見分類器對目標和背景兩者進行區分,得到跟蹤結果。得益于卷積神經網絡特征的強大表征能力,傳統人工定義特征逐漸替換為卷積特征,基于卷積神經網絡的跟蹤框架的一個重要方向便是孿生網絡跟蹤框架。其中全卷積網絡 Siamese-FC由Bertinetto等[3]提出,這種端到端網絡參數量小,在前向推理時有較快的跟蹤效果,同時網絡可以將一部分工作離線解決,在將算法部署于嵌入式設備時,只需要計算搜索區域的前向推理部分,減少了在線跟蹤的計算量,因此輕量化的孿生網絡在嵌入式部署時有快速和低計算量的優勢。
卷積網絡強大的特征提取和泛化能力是以大參數量以及計算量為代價的,如常用的網絡框架AlexNet[4]的計算量達到了727MFLOP,VGG-16[5]的計算量達到了16GFLOP。如此大的計算量和參數量對嵌入式平臺部署應用造成壓力,為滿足多場景下嵌入式平臺網絡推理的需求,提出一種硬件部署方案十分必要。目前主要的邊緣端解決方案使用的芯片有ASIC[6]、SoC以及FPGA。相較于專用ASIC或者SOC器件,FPGA的可重構特性使電路能根據實際情況靈活配置。
FPGA上的卷積加速研究主要在提高運算的并行度上,卷積可以展開的并行類型[7]有輸入通道并行、輸出通道并行、特征圖并行和卷積核并行,Qiu等[8]根據卷積的滑窗過程設計了line-buffer結構實現卷積運算,但時鐘頻率很難提高。Gokhale等[9]根據卷積計算過程設計了脈動陣列結構實現卷積運算,提高時鐘頻率,但存在乘法器利用率不足的問題。Zeng等[10]使用離散傅里葉變換將卷積的計算過程轉換成頻域的點積計算。離散傅里葉變換在卷積模板的尺寸大于5×5的情況下可以大量減少計算量。除結構設計外,在嵌入式平臺的邊緣計算場景,網絡的輕量化工作尤為重要,網絡量化的思想在于將網絡計算中的浮點數運算轉換為定點數運算[11]或設計輕量化的網絡結構[12],減少計算資源消耗。Gysel等[13]提出了Ristretto框架來近似網絡模型,通過分析模型中的卷積層和全連接層中權重和輸出特征圖的數據分辨率,將浮點數轉為低bit整數,但該操作較為復雜,增加了開發時間。
立足于以上研究,使用基于KL相對熵的量化方案減少目標跟蹤算法Siamese-FC計算量,并根據算法特點及FPGA結構特點,設計不同方式并行度的組合,提高嵌入式平臺部署神經網絡對復雜背景場景目標進行跟蹤的算法效率。實驗結果與CPU前向推理相比,在保證精度的同時,提升了運行速度,降低了功耗,得到了較好的加速效果。
Siamese-FC網絡的流程如圖1所示,網絡有兩個輸入x和z,其中z表示大小為127×127的目標模板圖像,x表示大小為255×255待搜索區域圖像。將兩個輸入送入兩個共享權值的特征提取網絡φ,該網絡φ是在AlexNet的基礎上去掉計算量大的全連接層結構構成的,在Siamese-FC網絡模型中特征提取網絡φ采用的是全卷積神經網絡,將兩個輸入項x和z以相同的方式提取特征,得到22×22×128的x的網絡特征和6×6×128的z的網絡特征,并將兩個輸出的特征通過卷積運算獲得最后的17×17×1的置信得分圖,目標區域會得到高分,而非目標區域將會得到低分,故只要比較計算置信得分圖之中得分最高的位置,并通過插值的方式獲得疑似目標位置區域。
Siamese-FC網絡的結構分為兩路全卷積網絡,其中輸入目標模板一路的網絡前向推理可以離線計算,同時,網絡最后的卷積操作也可以在嵌入式平臺以外操作,因此,在嵌入式平臺中可以只計算輸入待搜索區域圖一側的網絡前向推理過程。
在卷積網絡中,一般是通過由卷積層—BN層—激活層—池化層—…—卷積層—BN層—激活層—池化層—全連接層的基本形式組合成,其中卷積層作為主要計算流程,計算量和存儲量都是整個網絡中占比最大的部分,可以通過計算卷積層的存儲資源要求和計算資源要求,對Siamese-FC網絡的計算量和存儲量有一個直觀的認識,以及為后續在有限資源的嵌入式平臺部署時提供參考。表1是根據Siamese-FC網絡的計算過程得到的各卷積層的計算量以及存儲量需求。
表1 Siamese-FC網絡各個卷積層的計算量與存儲量
ZYNQ系列FPGA芯片XC7Z045的片上緩存資源Block RAM為19.2 MB,乘法器資源DSP48的數量為900個, Siamese-FC網絡最大單層權重參數的存儲量超過了40 MB,是XC7Z045芯片片上緩存容量的兩倍,計算量最大的層達到了998M次乘法和938M次加法,而一個DSP48資源在一個時鐘周期之內只能進行一次25 bit×18 bit的乘法和一次48 bit的加法。由此可見為了能將其部署在嵌入式平臺上,需要大容量外部緩存如DDR緩存權重參數和輸入輸出特征圖,同時需要對網絡進行定點量化處理,減少網絡的計算量。
卷積網絡部署有兩個重點,第一點是前向推理計算的實現,其中包括了卷積層、池化層、BN層、激活層等,根據計算特性設計成不同的計算IP,最后整合成一個前向計算的IP;第二點則是圖像數據流的控制,其包括了數據的輸入、輸出以及數據的存儲,這部分的實現重點在于通信協議的使用和存儲器的結構。
根據卷積網絡算法部署的這兩個重點,為了簡化數據流通信協議的使用以及簡化存儲器的讀寫控制邏輯,本文以ZYNQ作為硬件部署的平臺,將數據流輸入輸出的控制以及存儲器的讀寫控制任務交給ZYNQ系統側,而可編程邏輯部分主要負責前向網絡結構的硬件實現。
基于ZYNQ的卷積網絡硬件部署的整體架構如圖2所示,整個系統的數據流輸入與輸出、外部存儲器的讀寫控制、前向網絡結構的硬件實現均在ZYNQ上實施,使用外部存儲器DDR器件作為緩存,用于算法的前向計算流程獲取數據。ZYNQ系列FPGA系統側(PS側)以ARM作為中心器件,主要負責通過發布指令來實現數據調度;可編程邏輯部分(PL側)則負責卷積加速器的實現和生成作為中間緩存的片上RAM,其中卷積加速器根據可編程邏輯器件并行計算的結構,可設計為多個基本處理單元PE。
定點量化指使用一個低比特定點數表示原來的浮點數,達到減少計算量、提高計算效率的目的。
量化算法的本質是將一組一定范圍內的浮點數映射到另一組一定范圍的數中,也就是等比例縮放。映射方案以是否以零點為對稱點分為對稱量化和非對稱量化。非對稱量化方式相對于對稱量化方式來說,不僅在單個浮點數量化時要復雜,同時將量化應用在浮點數的四則運算中也相對復雜,因此本文采用對稱量化。設浮點數集合F*(其中任意元素F∈[Fmin,Fmax])量化到[Qmin,Qmax],量化后F對應的值為Q,則式(1)為對稱量化公式。
(1)
式中,S為量化系數。
對稱量化中,又分為極值量化與飽和量化。若數據分布均勻,則直接采用極值量化即可;若數據不均勻,則需要采用飽和量化,找到合適的閾值對數據進行飽和裁剪。兩種量化方式的計算方式如圖3所示。
圖3 兩種對稱量化的量化方法
在實際應用中,數據的分布并不是均勻的,且映射過程中精度損失客觀存在,如果集合中存在一些噪聲值,采用極值量化會使映射前后的兩個集合的分布相差較大,因此采用閾值量化的方式對卷積網絡進行量化。本文采用KL相對熵方式[14]對量化前后分布進行差異程度計算,以此找到合適的閾值。
設兩個大小都為X的有序集合F*和Q*,它們中的元素一一對應且任意兩個相對應的元素能且僅能被x(x∈{1,2,…,X})索引到,記DKL(F*||Q*)為F*對Q*的相對熵,則DKL(F*||Q*)的計算公式如下:
(2)
其中對數函數可以為任意底,因為式(2)一般用在目標函數中,DKL(F*‖Q*)越小說明兩個集合的分布差異越小。
具體量化流程為:
① 求出F*中的極值|Fmax|;
③ 得到最低相對熵的閾值T即為最優閾值。
卷積網絡算法計算量和數據量大,其中計算量比重最高的層為卷積層,同時由于卷積層的部分連接和權重共享特性,其計算是可以并行的,故網絡前向推理的硬件實現部分是在PL側完成硬件加速。
將Siamese-FC網絡硬件部署的卷積層結構首層并行度設計為4×16,結合輸入特征圖通道并行與輸出特征圖通道并行;后續層并行度為16×16,結合輸入特征圖通道并行與輸出特征圖通道并行。首層卷積層的結構和后續卷積層的結構如圖4所示。
圖4 卷積層卷積并行計算結構
圖4中首層卷積層Tn=4、Tm=16,后續卷積層Tn=16、Tm=16。并行卷積模塊實際就是并行乘法計算部分,文章設計的并行卷積模塊結構為樹狀結構,并行卷積模塊中的PE指的是基本處理單元(Processing Element),樹狀結構的并行卷積模塊的PE也是樹狀的,結構如圖5所示。由于樹狀結構并行卷積模塊PE內部的累加樹的存在,在加法計算數量不變的情況下,將計算多次加法的時間復雜度降為了O(logn),所以樹狀結構的并行卷積模塊計算速度較快。
圖5 并行卷積模塊結構圖
為了PL側并行計算模塊的高效運行,需要一個合理的數據調度,對于ZYNQ系列FPGA 來說,數據調度的部分可以設計在PS側,PS側數據調度的對象包括PL側卷積網絡硬件加速核、SD卡、DDR和HDMI。PS側數據調度的具體流程主要包含以下步驟。
① 初始化。從SD卡中初始幀讀取目標的初始尺度信息和位置信息,并讀取離線計算好的目標模板的Siamese-FC網絡輸出特征圖。讀取Siamese-FC網絡的權重參數、偏置參數和量化參數并放入對應的DDR地址區域。
② 從SD卡中讀取下一幀完整圖像,以上一幀的尺度信息和位置信息為中心,擴大和縮小各獲得一個尺度的搜索區域,加上原本尺度信息的搜索區域,一共3個尺度的搜索區域,這3個尺度的尺度因子分別為0.985,1,1.015。截取這3個尺度的圖像并將其插值成255×255作為待搜索區域圖像。
③ 將一張待搜索區域圖放入首層卷積層的輸入特征圖的DDR地址區域。
④ 通過給卷積網絡加速核配置當前卷積層層數、卷積并行度、是否有池化層等參數,卷積網絡加速核就會在對應卷積層輸入特征圖DDR地址區域和權重參數的DDR地址區域讀取數據,并將卷積層輸出特征圖寫入對應DDR地址區域。
⑤ 重復步驟④直到結束卷積網絡前向推理計算。
⑥ 重復步驟③、步驟④、步驟⑤直到3個尺度待搜索區域計算完前向推理計算,得到3張17×17響應得分圖。
⑦ 將響應得分圖乘以漢明窗,比較出最大的響應值,最大響應值對應的尺度就是當前幀尺度信息,將當前幀尺度的17×17的得分圖插值回原來的255×255并除以尺度值,最大響應值對應的位置就是當前幀位置信息。
⑧ 將尺度信息和位置信息映射回原圖,標出目標框后,將圖像輸出到HDMI。
⑨ 回到步驟②。
實驗在CPU配置為i5 3470 @ 3.20 GHz 4核、開發環境為Visual Studio 2019的條件下,使用C++語言實現浮點數計算的Siamese-FC網絡,以及使用量化方案后以short類型計算的Siamese-FC網絡。
本實驗采用目標跟蹤標準數據集[15],該數據集為目標跟蹤中背景復雜場景、光照變化場景、快速運動場景、尺度變化場景等的測試序列圖。選取該數據集中的4個測試序列,其圖像大小和數據集特點如表2所示。
表2 測試圖像序列
分別將4組測試序列的量化前后跟蹤結果以坐標信息與尺度信息的形式存儲下來,計算各組測試序列圖量化前后的平均交并比(Intersection-Over Union,IOU),實驗結果如表3所示。
在上述4個數據集中,量化前后的平均交并比都在95%以上,其中對量化算法影響最大的是運動模糊,但文中量化算法的平均交并比為95.43%,平均精度損失不超過4.57%,本文的量化方法在減少量化后算法計算量的同時,保證了量化后算法的計算精度,后續算法部署到FPGA上的前向推理計算精度與在PC上的浮點數前向推理計算精度達到相近水平。
表3 各序列圖量化前后平均交并比
在HLS開發環境中實現加速器設計時,經編譯后可得到綜合報告,報告中會提供一個估計的資源消耗和各個模塊估計的最大和最小延時等信息,可以根據估計的資源消耗以及延時的信息,制定下一次優化的方向,充分利用FPGA芯片的片上資源。HLS工程仿真后,得到卷積加速核的資源消耗估計如表4所示。
表4 卷積加速器資源消耗估計
由表4可知,消耗占比最高的是LUT資源,其次就是BRAM_18K資源,資源占用率最少的是FF。FF占比最少但是BRAM_18K占比較高,如果要提高數據帶寬,需要緩存更多數據進片上存儲時,會占用更多的BRAM_18K資源,所以這種情況下,可以考慮通過HLS指令配置一些RAM由觸發器資源組成,而不占用BRAM_18K資源。DSP48E資源占比較少,說明卷積加速核的并行度還可以提高。
在綜合報告中還會給出估計最大延時,表5中給出了Siamese-FC網絡實現的卷積加速核各層最大延時。
表5 卷積層各層最大延時
由表5可知,綜合報告估計的最高延時總和為57883057個周期,按照設置的時鐘200 MHz來計算,可以得到卷積加速核進行整個Siamese-FC網絡前向推理需要的時間為0.289 s。
板級驗證系統結構如圖6所示。其中圖6(a)為板上FPGA沒有燒寫任何程序時的功耗情況,此時的功耗為板子的靜態功耗,在12 V電壓的供電下,電流為0.511 A;圖6 (b)為開發板運行跟蹤算法時的運行功耗,增加功率包括了DDR功率與FPGA功率,在12 V電壓的供電下,電流為0.878 A。
圖6 開發板工作的靜態功耗以及運行功耗
表6中列舉了CPU與FPGA運行一次孿生卷積網絡前向推理計算所需要的時間,表7列舉了CPU與FPGA運行時功耗。
表6 不同器件測試速度對比
表7 不同器件功耗對比
結合表6~表7可得出,本文方法在耗時為i5 3470 CPU運行耗時16.15%的前提下,整塊開發板的運行功耗僅為i5 3470 CPU的13.7%,能夠達到本文的設計目的。
本文從復雜背景的目標跟蹤問題出發,討論了卷積網絡算法中以全卷積網絡Siamese-FC進行目標跟蹤的有效方案,并針對性地設計了卷積網絡計算加速器。對于Siamese-FC,板級驗證在誤差不超過0.6885±1.4795個像素的前提下,實現了CPU運行耗時16.15%的加速效果,功耗僅為CPU的13.7%,表明本文的設計在智能視頻監控設備、無人機跟蹤等嵌入式應用場景有較高的使用價值。