陳昌川,王新立,朱嘉琪,張?zhí)祢U,尹淑娟,王 珩,魏 琦,喬 飛
(1.重慶郵電大學(xué)通信與信息工程學(xué)院,重慶 400065;2.內(nèi)蒙古科技大學(xué)包頭師范學(xué)院,內(nèi)蒙古 包頭 014030;3.上海工業(yè)自動化儀表研究院有限公司,上海 200233;4.清華大學(xué)精密儀器系,北京 100084;5.清華大學(xué)電子工程系,北京 100084)
全斷面巖石掘進機(Tunnel Boring Machine,TBM)具有施工速度快,安全性高,經(jīng)濟性好等優(yōu)點,在高速公路、鐵路運輸、城市地鐵等重大工程中得到了廣泛的應(yīng)用[1]。由于工作環(huán)境惡劣,刀盤滾刀極易受到異常磨損和損壞,如果施工過程當中無法及時發(fā)現(xiàn)并處理刀具出現(xiàn)的損壞,不僅會降低掘進效率,還會致使刀盤出現(xiàn)異常,影響工程進度與施工質(zhì)量,因而研究盾構(gòu)刀具的磨耗原因并對刀具磨損情況進行實時監(jiān)控,對刀具的合理選擇、使用、維護和更換尤為必要。
目前國內(nèi)外有多種不同的刀盤監(jiān)測方法,主要有液壓監(jiān)測法[2]、電渦流監(jiān)測法[3]、超聲波檢測法[4]等,上述方式取得了一定的成功,但同時都存在一定的局限性,比如需要在刀盤處安裝傳感器,線路布置復(fù)雜,同時刀盤工作時會產(chǎn)生較大震動,會影響傳感器壽命。根據(jù)TBM 刀盤滾刀的破巖機制,當?shù)侗P磨損或者損壞時,掘進產(chǎn)生的巖渣碎片尺寸會增大[5]。因此,可以通過監(jiān)測傳送帶上的巖渣碎片情況間接監(jiān)測刀盤的狀態(tài),指導(dǎo)現(xiàn)場施工人員及時檢查和更換刀具。相機在傳送帶上方采集圖像,避開了惡劣的生產(chǎn)環(huán)境,同時還具有設(shè)備簡單、損耗低、成本低、可以長時間監(jiān)測等優(yōu)點。
目前在工程實踐中,普遍依靠人工判斷巖渣狀態(tài),關(guān)于巖渣的分析研究較少,閆長斌等[6]結(jié)合實際施工場景數(shù)據(jù)對巖渣粒徑與刀具磨損的關(guān)聯(lián)進行研究,發(fā)現(xiàn)二者存在正相關(guān);甘章澤等[5]利用分水嶺分割算法對巖渣圖像進行分割和尺寸測量,實現(xiàn)了間接監(jiān)測刀具磨損的目的,但基于工作經(jīng)驗判斷測量結(jié)果存在一定誤差。基于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)在計算機視覺領(lǐng)域的廣泛應(yīng)用和優(yōu)越性能,本文提出一種基于CNN 的巖渣分類算法,CNN 算法能夠提取圖像中的深度特征,同時具有良好的旋轉(zhuǎn)、平移不變性,在巖渣識別的應(yīng)用中能夠發(fā)揮巨大作用。
在CNN 的FPGA 加速上,主要面對兩個瓶頸問題:計算和數(shù)據(jù)傳輸。為了緩解帶寬的壓力,提高系統(tǒng)的吞吐率,文獻[7]將網(wǎng)絡(luò)整體映射到FPGA 上,避免了將中間層結(jié)果傳輸?shù)狡鈳淼膸拤毫?,但當網(wǎng)絡(luò)層數(shù)較深時,受到片上硬件資源的限制,此方法不再適用。因此,更加常見的是一種基于模塊的架構(gòu)[8],基于運算模塊的架構(gòu)將神經(jīng)網(wǎng)絡(luò)分割成基本的運算單元(如卷積、池化、全連接等),通過設(shè)計不同功能的內(nèi)核完成運算單元的功能,但是這種方式需要頻繁將中間結(jié)果寫入片外內(nèi)存,對帶寬的壓力較大,為了減少片外內(nèi)存存取對性能的影響,文獻[9]提出“ping-pong”的訪存策略,將內(nèi)存讀寫帶來的時間延遲隱藏在計算時間內(nèi),有效地提高了數(shù)據(jù)傳輸效率。
僅僅在硬件方面的設(shè)計工作對性能的提升有限,因此一些研究者從網(wǎng)絡(luò)模型出發(fā),在軟件層面上對網(wǎng)絡(luò)進行量化、剪枝[10-12]等操作進行網(wǎng)絡(luò)壓縮,以緩解硬件實現(xiàn)時的帶寬壓力。文獻[13]提出,在不損失準確率或準確率損失較小的情況下,用位數(shù)較低的數(shù)據(jù)代替全精度浮點數(shù)是可行的,使用位數(shù)較低的數(shù)據(jù)類型能夠有效減少訪存的開銷并提高計算的吞吐率,提升FPGA 整體的執(zhí)行性能。因此,在網(wǎng)絡(luò)精度不降低的情況下進行網(wǎng)絡(luò)壓縮是研究熱點之一。
綜上,為了提高FPGA 加速巖渣分類算法的性能表現(xiàn),需要在算法和硬件層面聯(lián)合優(yōu)化,達到最優(yōu)設(shè)計。本文在算法層面提出一種保留網(wǎng)絡(luò)原始結(jié)構(gòu)的網(wǎng)絡(luò)壓縮方法,減少了硬件實現(xiàn)的帶寬壓力和計算壓力;硬件層面上充分利用卷積神經(jīng)網(wǎng)絡(luò)的并行性,通過流水線并行的方法設(shè)計了網(wǎng)絡(luò)加速架構(gòu),最后實現(xiàn)了巖渣分類算法加速系統(tǒng)。
由于巖渣數(shù)據(jù)集訓(xùn)練數(shù)據(jù)過少,直接訓(xùn)練無法充分學(xué)習(xí)特征,容易產(chǎn)生過擬合現(xiàn)象,研究表明,卷積神經(jīng)網(wǎng)絡(luò)在相似的任務(wù)中具有一定的泛化性能,采用遷移學(xué)習(xí)訓(xùn)練網(wǎng)絡(luò)具有更好的性能提升速度和收斂性能[14]。在卷積神經(jīng)網(wǎng)絡(luò)中,前幾層特征圖輸出與圖像數(shù)據(jù)集關(guān)系不大,而網(wǎng)絡(luò)最后一層則與選定的數(shù)據(jù)及其任務(wù)目標密切相關(guān)[15],因此,根據(jù)分類目標,重新設(shè)計全連接層,得到的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,以預(yù)訓(xùn)練網(wǎng)絡(luò)的權(quán)重作為初始值對模型進行重訓(xùn)練,把使用ImageNet 訓(xùn)練的VGG16 的預(yù)訓(xùn)練模型的參數(shù)遷移到巖渣分類網(wǎng)絡(luò)中,實踐證明預(yù)訓(xùn)練模型的權(quán)重具有很強的泛化性能,如圖2 所示,在訓(xùn)練1 000 次后,網(wǎng)絡(luò)準確率達到96%,在巖渣數(shù)據(jù)集上能夠達到很好的分類效果。
圖1 巖渣分類網(wǎng)絡(luò)模型
圖2 網(wǎng)絡(luò)準確率變化曲線
本文使用的巖渣數(shù)據(jù)集由中鐵工程裝備集團有限公司于真實工程場景中采集,數(shù)據(jù)集為三類圖像分辨率為224×224 的彩色巖渣圖片,部分圖像如圖3所示,其中0 類巖渣3 880 張,1 類巖渣1 840張,2 類巖渣640 張。其中0 類和1 類巖渣產(chǎn)生于刀盤正常工作時,屬于正常巖渣,2 類巖渣在刀盤存在異常時產(chǎn)生,屬于異常巖渣。
圖3 巖渣數(shù)據(jù)集部分圖像
將巖渣數(shù)據(jù)集分為訓(xùn)練集和驗證集后使用訓(xùn)練集對網(wǎng)絡(luò)進行重訓(xùn)練,重訓(xùn)練后網(wǎng)絡(luò)分類結(jié)果如表1所示。
表1 3 種不同巖渣的分類準確率
由于三種類別的巖渣圖像數(shù)量不均衡,1 類和2類巖渣的訓(xùn)練數(shù)據(jù)量過少,網(wǎng)絡(luò)學(xué)習(xí)到的特征不足,雖然網(wǎng)絡(luò)整體準確率在驗證集上可達到96%,但在1 類2 類巖渣上的分類準確率并不高。因此,需要使用數(shù)據(jù)集擴增方法對巖渣數(shù)據(jù)集中1 類和2 類巖渣圖像進行擴增,提高兩類巖渣的分類準確率。
在實際的生產(chǎn)過程中,巖渣可能存在方向上的隨機分布,并且攝像頭可能受環(huán)境影響采集到包含噪聲的圖像,因此針對上述特點,采用隨機旋轉(zhuǎn)和添加高斯噪聲的方式對數(shù)據(jù)集進行擴增,并對網(wǎng)絡(luò)進行重訓(xùn)練,在擴增巖渣數(shù)據(jù)集上網(wǎng)絡(luò)的分類準確率如表2 所示。整體網(wǎng)絡(luò)準確率為96.5%,其中0 類、1 類、2 類巖渣的分類準確率分別為97.9%、93.1%和98.4%。
表2 數(shù)據(jù)擴增后分類準確率
1.3.1 動態(tài)定點量化
在網(wǎng)絡(luò)訓(xùn)練過程中,通常使用32 bit 浮點數(shù)存儲權(quán)重和特征圖,而32 bit 浮點數(shù)在進行數(shù)據(jù)訪存時會給FPGA 帶來很大的帶寬壓力,實際上由于CNN 的冗余性[16],將32 bit 浮點數(shù)參數(shù)轉(zhuǎn)換為較低的比特表示法可以在不降低網(wǎng)絡(luò)性能的情況下顯著減少深度學(xué)習(xí)模型復(fù)雜度和帶寬消耗。對于定點量化,8 bit 是一個明顯的界限,在低于8 bit 量化時,網(wǎng)絡(luò)準確率會受到較大影響[17],8 bit 量化能夠基本保持準確率不變。
常見的量化方法可分為線性量化和非線性量化,由于線性量化后的數(shù)據(jù)與原始數(shù)據(jù)是線性變換關(guān)系,前向推理時只需要計算線性變換函數(shù),對FPGA 硬件電路設(shè)計友好,更方便實現(xiàn)硬件上的高效率計算。
在量化過程中最關(guān)鍵的計算流程就是計算小數(shù)位位寬,每層卷積的不同通道之間,網(wǎng)絡(luò)參數(shù)的差距很大,最高甚至可達100 倍[10],靜態(tài)量化方法對所有卷積核使用相同的小數(shù)位位寬會帶來較大的網(wǎng)絡(luò)準確率損失。動態(tài)量化方法對不同的卷積核分別計算其小數(shù)位寬從而降低準確率的損失。
因此,本文使用一種8 bit 動態(tài)定點量化技術(shù)對網(wǎng)絡(luò)進行線性量化,以一層卷積層的量化為例,方法流程如下。
首先統(tǒng)計該層每一個卷積核數(shù)據(jù)分布,分別得到權(quán)重數(shù)據(jù)的最大值Maxw_n。其中weight_n代表當前層第n個卷積核的權(quán)重。
計算該卷積核小數(shù)位位寬w_bit。
對所有權(quán)重進行線性縮放并舍棄尾數(shù)。得到量化后的權(quán)重weight_nq。
因為8 bit 定點數(shù)量化將權(quán)重線性映射到[-128,127]之間,所以需要對最后的結(jié)果進行截斷。
對所有權(quán)重和激活值完成上述操作即完成對網(wǎng)絡(luò)的量化。量化后網(wǎng)絡(luò)壓縮為原網(wǎng)絡(luò)的25%,大大減少了網(wǎng)絡(luò)所需的存儲空間,同時定點數(shù)計算相比浮點數(shù)也減少了計算壓力,減輕了硬件實現(xiàn)所需的資源消耗。表3 展示了量化前后的準確率對比,總準確率相比原網(wǎng)絡(luò)僅下降了0.2%。
表3 量化后準確率對比
1.3.2 通道剪枝
網(wǎng)絡(luò)量化降低了網(wǎng)絡(luò)參數(shù)的存儲需求,但未能顯著減少網(wǎng)絡(luò)的計算量和參數(shù)量,因此,需要通過網(wǎng)絡(luò)剪枝方法對網(wǎng)絡(luò)模型進行進一步的壓縮,刪除其中不重要的權(quán)重,從而達到壓縮模型規(guī)模,降低存儲計算成本的目的[18]。
剪枝方法分為結(jié)構(gòu)化剪枝[19-20]和非結(jié)構(gòu)化剪枝[21]兩類。其中非結(jié)構(gòu)化剪枝對網(wǎng)絡(luò)的單體權(quán)重進行修剪,通過稀疏化矩陣的形式存儲剪枝后權(quán)重數(shù)據(jù),可以實現(xiàn)更高的壓縮率,但會對原始網(wǎng)絡(luò)結(jié)構(gòu)造成較大破壞,同時也會對硬件設(shè)計提出較高要求;而結(jié)構(gòu)化剪枝通過對卷積核、通道或者網(wǎng)絡(luò)層進行剪枝,僅僅造成數(shù)量的改變,網(wǎng)絡(luò)的原始結(jié)構(gòu)得以保留,規(guī)整的網(wǎng)絡(luò)結(jié)構(gòu)更容易實現(xiàn)網(wǎng)絡(luò)的硬件加速。
因此本文使用一種結(jié)構(gòu)化的通道剪枝方法,如圖4 所示。通過對卷積核冗余通道進行修剪,達到縮減網(wǎng)絡(luò)規(guī)模的目的。其流程如下:①對每層卷積層權(quán)重的絕對值和進行排序。②按照每層的排序結(jié)果設(shè)置合適的剪枝閾值。③將每個卷積核的絕對值和與閾值比較,修剪掉小于閾值的卷積核。④按照該層修剪掉的卷積核,統(tǒng)一修剪對應(yīng)特征圖通道,形成新的輕量化網(wǎng)絡(luò)結(jié)構(gòu)。⑤將修剪后的網(wǎng)絡(luò)進行重訓(xùn)練,恢復(fù)網(wǎng)絡(luò)準確率。
圖4 通道剪枝流程
考慮到一次修剪過多卷積核會對網(wǎng)絡(luò)準確率造成較大損失,且無法通過重訓(xùn)練恢復(fù),因此采用迭代剪枝的方法,通過多次迭代剪枝及重訓(xùn)練進行網(wǎng)絡(luò)的剪枝工作。
將網(wǎng)絡(luò)進行剪枝并結(jié)合8 bit 量化后,網(wǎng)絡(luò)的性能表現(xiàn)如表4 所示。
表4 剪枝量化后準確率對比
通過剪枝去除網(wǎng)絡(luò)冗余并進行重訓(xùn)練后,網(wǎng)絡(luò)整體準確率未受影響,與8 bit 量化方法結(jié)合對網(wǎng)絡(luò)進行壓縮后,網(wǎng)絡(luò)規(guī)模下降至原始網(wǎng)絡(luò)的2.28%,同時網(wǎng)絡(luò)的整體準確率僅下降0.9%。
本節(jié)提出一種基于OpenCL 的FPGA 卷積神經(jīng)網(wǎng)絡(luò)加速架構(gòu),如圖5 所示,用于加速上節(jié)中的巖渣分類網(wǎng)絡(luò)。根據(jù)CNN 各計算層之間的獨立性,設(shè)計可配置的OpenCL 內(nèi)核分別完成網(wǎng)絡(luò)的卷積、池化和全連接層運算。整個架構(gòu)主要分為片上和片外兩部分,片外的全局內(nèi)存主要用于特征值、模型參數(shù)以及量化參數(shù)信息的存儲,片上內(nèi)存用于存儲傳輸當前計算層的特征值數(shù)據(jù)、權(quán)重參數(shù)、量化參數(shù)以及當前層的計算結(jié)果等。
圖5 巖渣分類網(wǎng)絡(luò)加速硬件架構(gòu)
在本架構(gòu)中,內(nèi)核之間通過可配置的流水線管道互相連接,管道是使用片上資源構(gòu)建的一種高效無阻塞先入先出隊列(First Input First Output,F(xiàn)IFO)數(shù)據(jù)傳輸模塊,使內(nèi)核之間的數(shù)據(jù)直接在片上傳輸,能夠減少對片外內(nèi)存的存取次數(shù),提高了數(shù)據(jù)傳輸?shù)男?。通過控制字靈活組合內(nèi)核連接即可通過硬件資源實現(xiàn)復(fù)雜的網(wǎng)絡(luò)運算加速。
河曲引黃灌溉工程是一項保障民生、惠民利民的重點水利工程。工程建設(shè)任務(wù)以農(nóng)業(yè)灌溉為主,兼顧工業(yè)供水。工程建設(shè)規(guī)模:設(shè)計灌溉面積0.68萬hm2(改善 0.28萬 hm2,新增 0.4萬 hm2),年工業(yè)供水1 500萬m3,設(shè)計引水流量7.4 m3/s。引水線路干線總長33.96 km,包括隧洞、暗涵、渡槽、輸水管線等建筑物。其中4#隧洞為城門洞型無壓隧洞,凈寬2.0 m,凈高2.2 m,縱坡1/1 000,全長1 160 m,是實現(xiàn)引黃灌溉工程龍口取水口通水至縣城12.938 km長度線路的關(guān)鍵節(jié)點。
控制字為0 時,架構(gòu)完成卷積或全連接操作,管道和內(nèi)核的連接模式為:讀內(nèi)存內(nèi)核從片外內(nèi)存讀取計算所需數(shù)據(jù),并存儲到內(nèi)核中的片上緩存中,隨后通過數(shù)據(jù)管道將數(shù)據(jù)傳輸至卷積內(nèi)核,卷積內(nèi)核完成卷積運算后將結(jié)果存入片上緩存,隨后輸出到連接寫內(nèi)存內(nèi)核的數(shù)據(jù)管道,通過寫內(nèi)存內(nèi)核將數(shù)據(jù)寫入片外內(nèi)存。
控制字為1 時,架構(gòu)完成卷積+池化操作,管道和內(nèi)核連接模式為:數(shù)據(jù)通過讀內(nèi)存內(nèi)核,從片外內(nèi)存讀取到片上緩存中進行存儲,隨后通過數(shù)據(jù)管道傳輸至卷積內(nèi)核,內(nèi)核完成計算后將結(jié)果傳輸至連接到池化內(nèi)核的數(shù)據(jù)管道,池化內(nèi)核讀取數(shù)據(jù)并進行最大池化操作后輸出到數(shù)據(jù)管道,由數(shù)據(jù)管道寫入片上緩存,通過寫內(nèi)存內(nèi)核將結(jié)果寫入片外內(nèi)存。
在進行相關(guān)的連接模式進行網(wǎng)絡(luò)計算時,每個內(nèi)核只執(zhí)行一次,不會發(fā)生內(nèi)核資源的爭用,從而保證了整體的流水線暢通。
在網(wǎng)絡(luò)的計算過程中,各個通道的輸出特征值由輸入特征值與每一個卷積核獨立地進行卷積計算得出,與其他卷積核、特征值無關(guān);在池化時,當前層的計算只針對當前的池化窗口進行,與其他的池化窗口無關(guān),同時,進行池化計算時,只需保證本次池化窗口所需要的數(shù)據(jù)已完成卷積計算即可,無需等待所有數(shù)據(jù)完成卷積計算后再進行池化計算,因此,網(wǎng)絡(luò)的計算過程可以通過不同的計算單元并行計算,更充分地利用片上資源。利用計算的低關(guān)聯(lián)性,本文設(shè)計了圖6 所示的并行數(shù)據(jù)結(jié)構(gòu)。三個并行度P_ch、P_num 和P_k,其中P_k 與卷積核大小保持一致,利用了算法的核內(nèi)并行特性;P_ch 代表通道層面的并行度,此維度上的數(shù)據(jù)互相獨立,可以實現(xiàn)核內(nèi)并行化計算;P_num 代表卷積核層面的并行度,同一塊特征圖區(qū)域可以獨立地與多個卷積核進行計算,實現(xiàn)了卷積核間并行計算。將權(quán)重和特征值進行并行化處理,可以同時傳輸并行化數(shù)據(jù)到多個線程實現(xiàn)相同的操作,從而提高系統(tǒng)的效率并降低流水線的復(fù)雜度。
圖6 并行數(shù)據(jù)結(jié)構(gòu)示意圖
2.3.1 卷積內(nèi)核
在本架構(gòu)中,卷積內(nèi)核實現(xiàn)卷積(或全連接)+量化+線性整流的功能。如圖7 所示,按照設(shè)計的兩個維度的并行度P_ch 和P_num,通過8 bit 乘累加陣列完成高效的并行化卷積運算,隨后在P_num維度上分別進行累加,得到不同卷積核計算得到的對應(yīng)輸出通道的特征值,最后進入量化和線性整流模塊,通過數(shù)據(jù)管道按照P_num 的并行度輸出卷積內(nèi)核。
圖7 卷積內(nèi)核
2.3.2 池化內(nèi)核
池化內(nèi)核核心是一套基于行緩沖器和列緩沖器的并行高效流水線。主要功能是完成輸入池化窗口特征值的最大池化計算。由于在順序上池化內(nèi)核在卷積內(nèi)核之后進行執(zhí)行,因此池化內(nèi)核在流水線上也采用了與卷積內(nèi)核相同的P_num 的并行度,以一個池化窗口為例,如圖8 所示,通過行比較得到池化窗口的每行最大特征值,隨后通過列比較得到該池化窗口中的最大值,并通過數(shù)據(jù)管道將池化結(jié)果按照P_num 的并行度輸出內(nèi)核。
圖8 池化內(nèi)核
卷積計算屬于數(shù)據(jù)密集型操作,每次計算都需要從片外讀取權(quán)重和特征值,產(chǎn)生大量的延遲[22]。針對數(shù)據(jù)讀取頻繁的特點,設(shè)計圖9 所示的多層次緩存結(jié)構(gòu),片外存儲全部特征值和權(quán)重,將多次卷積計算需要的數(shù)據(jù)分為一組,通過內(nèi)存操作內(nèi)核中的讀內(nèi)存內(nèi)核讀取到片上緩存,計算內(nèi)核讀取片上緩存獲得當前計算所需并行化權(quán)重和特征值。數(shù)據(jù)按照分組的形式從片外讀取,減少了片外內(nèi)存的訪問次數(shù),從而減少延遲和功耗。
圖9 多層次緩存
分組與分組之間可通過循環(huán)展開指令,在FPGA 上使用流水線并行的方式進行卷積計算。如圖10 所示,未使用循環(huán)展開時,每次分組計算結(jié)束后才進行下一次的分組計算,使用循環(huán)展開流水線并行模式下,本次分組計算的同時讀取下一分組數(shù)據(jù),將數(shù)據(jù)讀取時間掩蓋到計算時間內(nèi)。相比于順序執(zhí)行,流水線并行的方式可以大大縮短運行時間。
圖10 流水線并行
另一方面,設(shè)計“ping-pong”片上雙緩存,在分組計算時用計算的時間掩蓋數(shù)據(jù)傳輸?shù)臅r間。當內(nèi)核計算緩存1 中的數(shù)據(jù)時,緩存2 進行片外數(shù)據(jù)傳輸;內(nèi)核計算緩存2 中的數(shù)據(jù)時,緩存1 進行片外數(shù)據(jù)傳輸。通過額外的片上存儲資源消耗,換取了片外數(shù)據(jù)傳輸?shù)男省?/p>
為驗證所提架構(gòu)的有效性,本文選擇HERO 平臺[23]部署加速架構(gòu)。在PC 端完成網(wǎng)絡(luò)模型訓(xùn)練和量化后,保存其權(quán)重值,并移植到HERO 平臺中,以供架構(gòu)計算使用。HERO 平臺搭載Intel i5-7400 CPU,Intel Arria 10 GX1150 FPGA 板卡,二者通過PCIe 接口連接,能夠協(xié)同實現(xiàn)基于OpenCL 的網(wǎng)絡(luò)全部計算過程。
本架構(gòu)的各項性能與2.2 節(jié)中提到的P_k,P_ch和P_num 并行度的大小設(shè)置有關(guān),其中P_k 為卷積核的大小,無法改變,因此通過對兩個并行度P_ch和P_num 的組合,可以探索不同并行度組合之中的最佳設(shè)計。架構(gòu)經(jīng)過對不同組合并行度進行綜合布局布線后,硬件資源使用量如圖11~圖14所示。
圖11 不同并行度下RAM 使用量
圖12 不同并行度下DSP 使用量
圖13 不同并行度下時鐘頻率
圖14 不同并行度下運行時間
并行度設(shè)置較小時,片上資源沒有得到充分利用,因此運行時間較長;并行度設(shè)置較大時,片上資源得到有效利用,運行時間也隨著并行度的增加而減少。在P_ch=32,P_num=16 時,架構(gòu)實現(xiàn)最佳設(shè)計,此時每幀圖像的運行時間為26.9 ms,相關(guān)資源消耗情況和性能參數(shù)如表5 所示。
表5 性能參數(shù)及資源消耗
片上99%的DSP 資源用于實現(xiàn)乘累加單元陣列,同時消耗了42%的片上RAM blocks。在輸入圖像分辨率為224×224 下,巖渣分類網(wǎng)絡(luò)在本架構(gòu)下和其他硬件平臺推理計算的性能對比如表6 所示。經(jīng)過量化剪枝后的巖渣分類網(wǎng)絡(luò)計算量是固定的,轉(zhuǎn)換成操作數(shù)共計6.04 GOPS。經(jīng)計算,本架構(gòu)系統(tǒng)吞吐率為224.54 GOP/s,能效為11.23 GOP/s/W,最終在191.67 MHz 的內(nèi)核時鐘頻率下實現(xiàn)了26.9 ms 的系統(tǒng)運行時間。不同平臺的網(wǎng)絡(luò)計算性能如表6 所示,對比Intel E3-1232 V2,本架構(gòu)實現(xiàn)了18 倍的吞吐率和62 倍的能效提升;對比Nvidia GTX1080 GPU,本架構(gòu)在能效方面優(yōu)于GPU,實現(xiàn)了1.67 倍的能效提升。
表6 不同平臺巖渣分類網(wǎng)絡(luò)推理性能比較
本文提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)的巖渣分類算法,隨后對算法網(wǎng)絡(luò)進行了8 bit 動態(tài)定點量化,并基于OpenCL 設(shè)計了可配置的CNN 加速架構(gòu),對算法進行了硬件加速實現(xiàn)。實驗表明,本文所提算法在量化后可以達到95.6%的巖渣分類準確率,所提加速架構(gòu)在搭載Intel Arria 10 GX1150 的HERO平臺上可以達到224.54 GOP/s 的吞吐率和11.23 GOP/s/W的能效,可以實現(xiàn)37 frame/s 的識別速度。
后續(xù)將繼續(xù)研究優(yōu)化硬件加速器,實現(xiàn)更高的工作頻率和吞吐率,從而進一步提高巖渣分類系統(tǒng)的運行幀率。