?

基于卷積神經網絡的巖渣分類算法及其FPGA 加速*

2024-03-06 02:54陳昌川王新立朱嘉琪張天騏尹淑娟
傳感技術學報 2024年1期
關鍵詞:池化剪枝內核

陳昌川,王新立,朱嘉琪,張天騏,尹淑娟,王 珩,魏 琦,喬 飛

(1.重慶郵電大學通信與信息工程學院,重慶 400065;2.內蒙古科技大學包頭師范學院,內蒙古 包頭 014030;3.上海工業自動化儀表研究院有限公司,上海 200233;4.清華大學精密儀器系,北京 100084;5.清華大學電子工程系,北京 100084)

全斷面巖石掘進機(Tunnel Boring Machine,TBM)具有施工速度快,安全性高,經濟性好等優點,在高速公路、鐵路運輸、城市地鐵等重大工程中得到了廣泛的應用[1]。由于工作環境惡劣,刀盤滾刀極易受到異常磨損和損壞,如果施工過程當中無法及時發現并處理刀具出現的損壞,不僅會降低掘進效率,還會致使刀盤出現異常,影響工程進度與施工質量,因而研究盾構刀具的磨耗原因并對刀具磨損情況進行實時監控,對刀具的合理選擇、使用、維護和更換尤為必要。

目前國內外有多種不同的刀盤監測方法,主要有液壓監測法[2]、電渦流監測法[3]、超聲波檢測法[4]等,上述方式取得了一定的成功,但同時都存在一定的局限性,比如需要在刀盤處安裝傳感器,線路布置復雜,同時刀盤工作時會產生較大震動,會影響傳感器壽命。根據TBM 刀盤滾刀的破巖機制,當刀盤磨損或者損壞時,掘進產生的巖渣碎片尺寸會增大[5]。因此,可以通過監測傳送帶上的巖渣碎片情況間接監測刀盤的狀態,指導現場施工人員及時檢查和更換刀具。相機在傳送帶上方采集圖像,避開了惡劣的生產環境,同時還具有設備簡單、損耗低、成本低、可以長時間監測等優點。

目前在工程實踐中,普遍依靠人工判斷巖渣狀態,關于巖渣的分析研究較少,閆長斌等[6]結合實際施工場景數據對巖渣粒徑與刀具磨損的關聯進行研究,發現二者存在正相關;甘章澤等[5]利用分水嶺分割算法對巖渣圖像進行分割和尺寸測量,實現了間接監測刀具磨損的目的,但基于工作經驗判斷測量結果存在一定誤差?;诰矸e神經網絡(Convolutional Neural Networks,CNN)在計算機視覺領域的廣泛應用和優越性能,本文提出一種基于CNN 的巖渣分類算法,CNN 算法能夠提取圖像中的深度特征,同時具有良好的旋轉、平移不變性,在巖渣識別的應用中能夠發揮巨大作用。

在CNN 的FPGA 加速上,主要面對兩個瓶頸問題:計算和數據傳輸。為了緩解帶寬的壓力,提高系統的吞吐率,文獻[7]將網絡整體映射到FPGA 上,避免了將中間層結果傳輸到片外帶來的帶寬壓力,但當網絡層數較深時,受到片上硬件資源的限制,此方法不再適用。因此,更加常見的是一種基于模塊的架構[8],基于運算模塊的架構將神經網絡分割成基本的運算單元(如卷積、池化、全連接等),通過設計不同功能的內核完成運算單元的功能,但是這種方式需要頻繁將中間結果寫入片外內存,對帶寬的壓力較大,為了減少片外內存存取對性能的影響,文獻[9]提出“ping-pong”的訪存策略,將內存讀寫帶來的時間延遲隱藏在計算時間內,有效地提高了數據傳輸效率。

僅僅在硬件方面的設計工作對性能的提升有限,因此一些研究者從網絡模型出發,在軟件層面上對網絡進行量化、剪枝[10-12]等操作進行網絡壓縮,以緩解硬件實現時的帶寬壓力。文獻[13]提出,在不損失準確率或準確率損失較小的情況下,用位數較低的數據代替全精度浮點數是可行的,使用位數較低的數據類型能夠有效減少訪存的開銷并提高計算的吞吐率,提升FPGA 整體的執行性能。因此,在網絡精度不降低的情況下進行網絡壓縮是研究熱點之一。

綜上,為了提高FPGA 加速巖渣分類算法的性能表現,需要在算法和硬件層面聯合優化,達到最優設計。本文在算法層面提出一種保留網絡原始結構的網絡壓縮方法,減少了硬件實現的帶寬壓力和計算壓力;硬件層面上充分利用卷積神經網絡的并行性,通過流水線并行的方法設計了網絡加速架構,最后實現了巖渣分類算法加速系統。

1 巖渣分類算法

1.1 網絡遷移學習

由于巖渣數據集訓練數據過少,直接訓練無法充分學習特征,容易產生過擬合現象,研究表明,卷積神經網絡在相似的任務中具有一定的泛化性能,采用遷移學習訓練網絡具有更好的性能提升速度和收斂性能[14]。在卷積神經網絡中,前幾層特征圖輸出與圖像數據集關系不大,而網絡最后一層則與選定的數據及其任務目標密切相關[15],因此,根據分類目標,重新設計全連接層,得到的網絡結構如圖1所示,以預訓練網絡的權重作為初始值對模型進行重訓練,把使用ImageNet 訓練的VGG16 的預訓練模型的參數遷移到巖渣分類網絡中,實踐證明預訓練模型的權重具有很強的泛化性能,如圖2 所示,在訓練1 000 次后,網絡準確率達到96%,在巖渣數據集上能夠達到很好的分類效果。

圖1 巖渣分類網絡模型

圖2 網絡準確率變化曲線

1.2 數據集擴增

本文使用的巖渣數據集由中鐵工程裝備集團有限公司于真實工程場景中采集,數據集為三類圖像分辨率為224×224 的彩色巖渣圖片,部分圖像如圖3所示,其中0 類巖渣3 880 張,1 類巖渣1 840張,2 類巖渣640 張。其中0 類和1 類巖渣產生于刀盤正常工作時,屬于正常巖渣,2 類巖渣在刀盤存在異常時產生,屬于異常巖渣。

圖3 巖渣數據集部分圖像

將巖渣數據集分為訓練集和驗證集后使用訓練集對網絡進行重訓練,重訓練后網絡分類結果如表1所示。

表1 3 種不同巖渣的分類準確率

由于三種類別的巖渣圖像數量不均衡,1 類和2類巖渣的訓練數據量過少,網絡學習到的特征不足,雖然網絡整體準確率在驗證集上可達到96%,但在1 類2 類巖渣上的分類準確率并不高。因此,需要使用數據集擴增方法對巖渣數據集中1 類和2 類巖渣圖像進行擴增,提高兩類巖渣的分類準確率。

在實際的生產過程中,巖渣可能存在方向上的隨機分布,并且攝像頭可能受環境影響采集到包含噪聲的圖像,因此針對上述特點,采用隨機旋轉和添加高斯噪聲的方式對數據集進行擴增,并對網絡進行重訓練,在擴增巖渣數據集上網絡的分類準確率如表2 所示。整體網絡準確率為96.5%,其中0 類、1 類、2 類巖渣的分類準確率分別為97.9%、93.1%和98.4%。

表2 數據擴增后分類準確率

1.3 網絡壓縮方法

1.3.1 動態定點量化

在網絡訓練過程中,通常使用32 bit 浮點數存儲權重和特征圖,而32 bit 浮點數在進行數據訪存時會給FPGA 帶來很大的帶寬壓力,實際上由于CNN 的冗余性[16],將32 bit 浮點數參數轉換為較低的比特表示法可以在不降低網絡性能的情況下顯著減少深度學習模型復雜度和帶寬消耗。對于定點量化,8 bit 是一個明顯的界限,在低于8 bit 量化時,網絡準確率會受到較大影響[17],8 bit 量化能夠基本保持準確率不變。

常見的量化方法可分為線性量化和非線性量化,由于線性量化后的數據與原始數據是線性變換關系,前向推理時只需要計算線性變換函數,對FPGA 硬件電路設計友好,更方便實現硬件上的高效率計算。

在量化過程中最關鍵的計算流程就是計算小數位位寬,每層卷積的不同通道之間,網絡參數的差距很大,最高甚至可達100 倍[10],靜態量化方法對所有卷積核使用相同的小數位位寬會帶來較大的網絡準確率損失。動態量化方法對不同的卷積核分別計算其小數位寬從而降低準確率的損失。

因此,本文使用一種8 bit 動態定點量化技術對網絡進行線性量化,以一層卷積層的量化為例,方法流程如下。

首先統計該層每一個卷積核數據分布,分別得到權重數據的最大值Maxw_n。其中weight_n代表當前層第n個卷積核的權重。

計算該卷積核小數位位寬w_bit。

對所有權重進行線性縮放并舍棄尾數。得到量化后的權重weight_nq。

因為8 bit 定點數量化將權重線性映射到[-128,127]之間,所以需要對最后的結果進行截斷。

對所有權重和激活值完成上述操作即完成對網絡的量化。量化后網絡壓縮為原網絡的25%,大大減少了網絡所需的存儲空間,同時定點數計算相比浮點數也減少了計算壓力,減輕了硬件實現所需的資源消耗。表3 展示了量化前后的準確率對比,總準確率相比原網絡僅下降了0.2%。

表3 量化后準確率對比

1.3.2 通道剪枝

網絡量化降低了網絡參數的存儲需求,但未能顯著減少網絡的計算量和參數量,因此,需要通過網絡剪枝方法對網絡模型進行進一步的壓縮,刪除其中不重要的權重,從而達到壓縮模型規模,降低存儲計算成本的目的[18]。

剪枝方法分為結構化剪枝[19-20]和非結構化剪枝[21]兩類。其中非結構化剪枝對網絡的單體權重進行修剪,通過稀疏化矩陣的形式存儲剪枝后權重數據,可以實現更高的壓縮率,但會對原始網絡結構造成較大破壞,同時也會對硬件設計提出較高要求;而結構化剪枝通過對卷積核、通道或者網絡層進行剪枝,僅僅造成數量的改變,網絡的原始結構得以保留,規整的網絡結構更容易實現網絡的硬件加速。

因此本文使用一種結構化的通道剪枝方法,如圖4 所示。通過對卷積核冗余通道進行修剪,達到縮減網絡規模的目的。其流程如下:①對每層卷積層權重的絕對值和進行排序。②按照每層的排序結果設置合適的剪枝閾值。③將每個卷積核的絕對值和與閾值比較,修剪掉小于閾值的卷積核。④按照該層修剪掉的卷積核,統一修剪對應特征圖通道,形成新的輕量化網絡結構。⑤將修剪后的網絡進行重訓練,恢復網絡準確率。

圖4 通道剪枝流程

考慮到一次修剪過多卷積核會對網絡準確率造成較大損失,且無法通過重訓練恢復,因此采用迭代剪枝的方法,通過多次迭代剪枝及重訓練進行網絡的剪枝工作。

將網絡進行剪枝并結合8 bit 量化后,網絡的性能表現如表4 所示。

表4 剪枝量化后準確率對比

通過剪枝去除網絡冗余并進行重訓練后,網絡整體準確率未受影響,與8 bit 量化方法結合對網絡進行壓縮后,網絡規模下降至原始網絡的2.28%,同時網絡的整體準確率僅下降0.9%。

2 硬件架構設計

2.1 整體硬件架構

本節提出一種基于OpenCL 的FPGA 卷積神經網絡加速架構,如圖5 所示,用于加速上節中的巖渣分類網絡。根據CNN 各計算層之間的獨立性,設計可配置的OpenCL 內核分別完成網絡的卷積、池化和全連接層運算。整個架構主要分為片上和片外兩部分,片外的全局內存主要用于特征值、模型參數以及量化參數信息的存儲,片上內存用于存儲傳輸當前計算層的特征值數據、權重參數、量化參數以及當前層的計算結果等。

圖5 巖渣分類網絡加速硬件架構

在本架構中,內核之間通過可配置的流水線管道互相連接,管道是使用片上資源構建的一種高效無阻塞先入先出隊列(First Input First Output,FIFO)數據傳輸模塊,使內核之間的數據直接在片上傳輸,能夠減少對片外內存的存取次數,提高了數據傳輸的效率。通過控制字靈活組合內核連接即可通過硬件資源實現復雜的網絡運算加速。

河曲引黃灌溉工程是一項保障民生、惠民利民的重點水利工程。工程建設任務以農業灌溉為主,兼顧工業供水。工程建設規模:設計灌溉面積0.68萬hm2(改善 0.28萬 hm2,新增 0.4萬 hm2),年工業供水1 500萬m3,設計引水流量7.4 m3/s。引水線路干線總長33.96 km,包括隧洞、暗涵、渡槽、輸水管線等建筑物。其中4#隧洞為城門洞型無壓隧洞,凈寬2.0 m,凈高2.2 m,縱坡1/1 000,全長1 160 m,是實現引黃灌溉工程龍口取水口通水至縣城12.938 km長度線路的關鍵節點。

控制字為0 時,架構完成卷積或全連接操作,管道和內核的連接模式為:讀內存內核從片外內存讀取計算所需數據,并存儲到內核中的片上緩存中,隨后通過數據管道將數據傳輸至卷積內核,卷積內核完成卷積運算后將結果存入片上緩存,隨后輸出到連接寫內存內核的數據管道,通過寫內存內核將數據寫入片外內存。

控制字為1 時,架構完成卷積+池化操作,管道和內核連接模式為:數據通過讀內存內核,從片外內存讀取到片上緩存中進行存儲,隨后通過數據管道傳輸至卷積內核,內核完成計算后將結果傳輸至連接到池化內核的數據管道,池化內核讀取數據并進行最大池化操作后輸出到數據管道,由數據管道寫入片上緩存,通過寫內存內核將結果寫入片外內存。

在進行相關的連接模式進行網絡計算時,每個內核只執行一次,不會發生內核資源的爭用,從而保證了整體的流水線暢通。

2.2 并行度設計

在網絡的計算過程中,各個通道的輸出特征值由輸入特征值與每一個卷積核獨立地進行卷積計算得出,與其他卷積核、特征值無關;在池化時,當前層的計算只針對當前的池化窗口進行,與其他的池化窗口無關,同時,進行池化計算時,只需保證本次池化窗口所需要的數據已完成卷積計算即可,無需等待所有數據完成卷積計算后再進行池化計算,因此,網絡的計算過程可以通過不同的計算單元并行計算,更充分地利用片上資源。利用計算的低關聯性,本文設計了圖6 所示的并行數據結構。三個并行度P_ch、P_num 和P_k,其中P_k 與卷積核大小保持一致,利用了算法的核內并行特性;P_ch 代表通道層面的并行度,此維度上的數據互相獨立,可以實現核內并行化計算;P_num 代表卷積核層面的并行度,同一塊特征圖區域可以獨立地與多個卷積核進行計算,實現了卷積核間并行計算。將權重和特征值進行并行化處理,可以同時傳輸并行化數據到多個線程實現相同的操作,從而提高系統的效率并降低流水線的復雜度。

圖6 并行數據結構示意圖

2.3 內核設計

2.3.1 卷積內核

在本架構中,卷積內核實現卷積(或全連接)+量化+線性整流的功能。如圖7 所示,按照設計的兩個維度的并行度P_ch 和P_num,通過8 bit 乘累加陣列完成高效的并行化卷積運算,隨后在P_num維度上分別進行累加,得到不同卷積核計算得到的對應輸出通道的特征值,最后進入量化和線性整流模塊,通過數據管道按照P_num 的并行度輸出卷積內核。

圖7 卷積內核

2.3.2 池化內核

池化內核核心是一套基于行緩沖器和列緩沖器的并行高效流水線。主要功能是完成輸入池化窗口特征值的最大池化計算。由于在順序上池化內核在卷積內核之后進行執行,因此池化內核在流水線上也采用了與卷積內核相同的P_num 的并行度,以一個池化窗口為例,如圖8 所示,通過行比較得到池化窗口的每行最大特征值,隨后通過列比較得到該池化窗口中的最大值,并通過數據管道將池化結果按照P_num 的并行度輸出內核。

圖8 池化內核

2.4 多層次數據緩存

卷積計算屬于數據密集型操作,每次計算都需要從片外讀取權重和特征值,產生大量的延遲[22]。針對數據讀取頻繁的特點,設計圖9 所示的多層次緩存結構,片外存儲全部特征值和權重,將多次卷積計算需要的數據分為一組,通過內存操作內核中的讀內存內核讀取到片上緩存,計算內核讀取片上緩存獲得當前計算所需并行化權重和特征值。數據按照分組的形式從片外讀取,減少了片外內存的訪問次數,從而減少延遲和功耗。

圖9 多層次緩存

分組與分組之間可通過循環展開指令,在FPGA 上使用流水線并行的方式進行卷積計算。如圖10 所示,未使用循環展開時,每次分組計算結束后才進行下一次的分組計算,使用循環展開流水線并行模式下,本次分組計算的同時讀取下一分組數據,將數據讀取時間掩蓋到計算時間內。相比于順序執行,流水線并行的方式可以大大縮短運行時間。

圖10 流水線并行

另一方面,設計“ping-pong”片上雙緩存,在分組計算時用計算的時間掩蓋數據傳輸的時間。當內核計算緩存1 中的數據時,緩存2 進行片外數據傳輸;內核計算緩存2 中的數據時,緩存1 進行片外數據傳輸。通過額外的片上存儲資源消耗,換取了片外數據傳輸的效率。

3 實驗與分析

為驗證所提架構的有效性,本文選擇HERO 平臺[23]部署加速架構。在PC 端完成網絡模型訓練和量化后,保存其權重值,并移植到HERO 平臺中,以供架構計算使用。HERO 平臺搭載Intel i5-7400 CPU,Intel Arria 10 GX1150 FPGA 板卡,二者通過PCIe 接口連接,能夠協同實現基于OpenCL 的網絡全部計算過程。

本架構的各項性能與2.2 節中提到的P_k,P_ch和P_num 并行度的大小設置有關,其中P_k 為卷積核的大小,無法改變,因此通過對兩個并行度P_ch和P_num 的組合,可以探索不同并行度組合之中的最佳設計。架構經過對不同組合并行度進行綜合布局布線后,硬件資源使用量如圖11~圖14所示。

圖11 不同并行度下RAM 使用量

圖12 不同并行度下DSP 使用量

圖13 不同并行度下時鐘頻率

圖14 不同并行度下運行時間

并行度設置較小時,片上資源沒有得到充分利用,因此運行時間較長;并行度設置較大時,片上資源得到有效利用,運行時間也隨著并行度的增加而減少。在P_ch=32,P_num=16 時,架構實現最佳設計,此時每幀圖像的運行時間為26.9 ms,相關資源消耗情況和性能參數如表5 所示。

表5 性能參數及資源消耗

片上99%的DSP 資源用于實現乘累加單元陣列,同時消耗了42%的片上RAM blocks。在輸入圖像分辨率為224×224 下,巖渣分類網絡在本架構下和其他硬件平臺推理計算的性能對比如表6 所示。經過量化剪枝后的巖渣分類網絡計算量是固定的,轉換成操作數共計6.04 GOPS。經計算,本架構系統吞吐率為224.54 GOP/s,能效為11.23 GOP/s/W,最終在191.67 MHz 的內核時鐘頻率下實現了26.9 ms 的系統運行時間。不同平臺的網絡計算性能如表6 所示,對比Intel E3-1232 V2,本架構實現了18 倍的吞吐率和62 倍的能效提升;對比Nvidia GTX1080 GPU,本架構在能效方面優于GPU,實現了1.67 倍的能效提升。

表6 不同平臺巖渣分類網絡推理性能比較

4 結論

本文提出了一種基于卷積神經網絡的巖渣分類算法,隨后對算法網絡進行了8 bit 動態定點量化,并基于OpenCL 設計了可配置的CNN 加速架構,對算法進行了硬件加速實現。實驗表明,本文所提算法在量化后可以達到95.6%的巖渣分類準確率,所提加速架構在搭載Intel Arria 10 GX1150 的HERO平臺上可以達到224.54 GOP/s 的吞吐率和11.23 GOP/s/W的能效,可以實現37 frame/s 的識別速度。

后續將繼續研究優化硬件加速器,實現更高的工作頻率和吞吐率,從而進一步提高巖渣分類系統的運行幀率。

猜你喜歡
池化剪枝內核
面向神經網絡池化層的靈活高效硬件設計
基于Sobel算子的池化算法設計
人到晚年宜“剪枝”
卷積神經網絡中的自適應加權池化
強化『高新』內核 打造農業『硅谷』
基于YOLOv4-Tiny模型剪枝算法
基于嵌入式Linux內核的自恢復設計
基于卷積神經網絡和池化算法的表情識別研究
Linux內核mmap保護機制研究
剪枝
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合