本發(fā)明屬于神經網絡計算領域,具體涉及一種基于FPGA的深度卷積神經網絡的流水化加速系統。
背景技術:
伴隨著深度學習掀起的新的機器學習熱潮,深度卷積神經網絡已經廣泛應用于語音識別、圖像識別和自然語音處理等不同的大規(guī)模機器學習問題中,并取得了一系列突破性的研究成果,其強大的特征學習與分類能力引起了廣泛的關注,具有重要的分析與研究價值。
深度卷積神經網絡模型具有模型深度高、層次復雜、數據量級大、并行度高、計算密集和存儲密集等特征,大批量的卷積運算和池化操作往往使其在應用過程當中成為一大計算瓶頸,大量中間結果的存儲也對計算機存儲結構提出了較高的要求,這對于實時性較強而投入成本有限的應用場景來說是十分不利的。
當下比較常用的兩種加速器是CPU和GPU,CPU基于其串行執(zhí)行的結構特點在計算性能上并不能較理想地滿足要求,GPU雖然在計算性能上優(yōu)勢明顯但卻與CPU一樣無法突破功耗壁壘,并且CPU和GPU在可擴展性上都存在較為嚴重的限制??紤]到諸如上述因素,FPGA基于其配置靈活、高度并行、設計靈活、低功耗和性價比高等特點成為深度卷積神經網絡模型十分理想的替代加速器,但如何結合FPGA芯片特點和平臺優(yōu)勢充分挖掘出深度卷積神經網絡計算模型的并行性以及流水性,合理高效地充分利用FPGA片上的有限資源仍是有待解決的問題。
技術實現要素:
本發(fā)明提供了一種基于FPGA的深度卷積神經網絡的流水化加速系統,其目的在于同時結合深度卷積神經網絡模型結構特點和FPGA芯片特點及平臺優(yōu)勢,對傳統軟件層中已有實現的深度卷積神經網絡計算結構進行重新調整并且設計相應的模塊,充分挖掘深度卷積神經網絡在計算過程當中潛在的并行性以及各計算層之間的流水性,使之更匹配于FPGA的設計特點,并且配合FPGA的相應的設計,以合理高效地利用FPGA設計的計算資源,為深度卷積神經網絡的實現提供一套高性能的流水化加速方案。
本發(fā)明提供了基于FPGA的深度卷積神經網絡的流水化加速系統,其特征在于,該系統包括:
輸入數據分配控制模塊、輸出數據分配控制模塊、卷積計算順序序列化實現模塊、池化計算順序序列化實現模塊、卷積計算模塊、池化計算模塊和卷積計算結果分配控制模塊,此外所述流水化加速系統還包含一個內部系統級聯接口;
所述輸入數據分配控制模塊同時與FPGA外圍接口和所述內部系統級聯接口、卷積計算順序序列化實現模塊相連;所述輸出數據分配控制模塊同時與FPGA外圍接口和所述內部系統級聯接口、卷積計算結果分配控制模塊以及池化計算模塊相連;所述卷積計算結果分配控制模塊同時與所述卷積計算模塊、輸出數據分配控制模塊以及池化計算順序序列化實現模塊相連;所述卷積計算順序序列化實現模塊與卷積計算模塊之間直接相連;所述池化計算順序序列化實現模塊與池化計算模塊之間直接相連;
所述輸入數據分配控制模塊實時監(jiān)視所述卷積計算順序序列化實現模塊的數據消耗狀況,向DDR片外存儲器發(fā)送相關讀數據命令并及時接收FPGA外圍接口和所述內部系統級聯接口傳送來的輸入數據,除此之外,所述輸入數據分配控制模塊還需將接收到的數據傳送給所述卷積計算順序序列化實現模塊;
所述輸出數據分配控制模塊接收所述池化計算模塊或所述卷積計算結果分配控制模塊傳送來的輸入數據,并根據當前所處的計算階段將接收到的數據傳送給所述內部系統級聯接口或所述FPGA外圍接口,向所述DDR片外存儲器發(fā)送相關寫數據命令和相關中斷通知;除此之外,所述輸出數據分配控制模塊還實時響應所述FPGA外圍接口發(fā)送的命令;
所述卷積計算順序序列化實現模塊結合調整參數將深度卷積神經網絡中相關卷積操作的結構化計算順序序列化,并為所述卷積計算模塊及時傳送序列化后的數據集;所述池化計算順序序列化實現模塊結合相關調整參數將深度卷積神經網絡中相關池化操作的結構化計算順序序列化,并為所述池化計算模塊及時傳送序列化后的數據集;
所述卷積計算模塊完成深度卷積神經網絡中的相關卷積計算,并將計算結果及時傳送給所述卷積計算結果分配控制模塊;所述池化計算模塊主要負責完成深度卷積神經網絡中的相關池化操作,并將計算結果及時傳送給所述輸出數據分配控制模塊;
所述卷積計算結果分配控制模塊接收所述卷積計算模塊傳來的計算結果數據,并根據當前所處的計算階段將接收到的數據有組織有規(guī)格地傳送給所述池化計算順序序列化實現模塊或所述輸出數據分配控制模塊。
所述內部系統級聯接口主要負責為所述FPGA片上系統內部子系統之間的級聯或內部模塊之間的連接提供有效接口,用于連接所述輸出數據分配控制模塊和輸入數據分配控制模塊。
進一步地,
所述卷積計算順序序列化實現模塊由特征圖元組選擇功能子模塊和卷積核參數選擇功能子模塊組成。特征圖元組選擇功能子模塊實現特征圖元組選擇功能,卷積核參數選擇功能子模塊實現卷積核參數選擇功能。
所述池化計算順序序列化實現模塊與所述卷積計算順序序列化實現模塊中的特征圖元組選擇功能子模塊的組成結構和實現的功能基本類似。
進一步地,
所述特征圖元組選擇功能子模塊主要由特征圖元組存儲器、新舊選擇器、標記參數存儲器、地址參數存儲器、計算窗口緩沖存儲器和特征圖元組計數器組成;
所述特征圖元組存儲器采用雙端口RAM實現,用于存儲所述輸入數據分配控制模塊送入的特征圖元組;所述新舊選擇器維護兩個地址寄存器,分別為新值地址寄存器和舊值地址寄存器,用于從所述特征圖元組存儲器中選擇相應的特征圖元組并輸出給所述卷積計算模塊;所述標記參數存儲器用于存儲有效分析序號的新舊值選取標記和窗口計算提前結束標記,所述地址參數存儲器用于存儲有效分析序號的舊值選取地址,對于一個給定的深度卷積神經網絡模型,所述標記參數存儲器和所述地址參數存儲器一次寫入多次循環(huán)讀取;所述計算窗口緩沖存儲器采用雙端口RAM實現,用于緩存所述新舊選擇器輸出的特征圖元組并將其輸出給所述卷積計算模塊;所述特征值圖元組計數器用于統計所述新舊選擇器選擇輸出的特征圖元組個數;
所述特征圖元組選擇功能子模塊每節(jié)拍從所述輸入數據分配控制模塊獲取一個特征圖元組的KFP個特征值,這KFP個特征值組成一個輸入特征值組;所述新舊選擇器每次選擇特征圖元組進行輸出時,查看當前新舊值選取標記值,若當前新舊值選取標記值為選新值標記,則從新值地址寄存器提供的起始地址處開始以特征值組為單位進行特征圖元組的輸出,每輸出一個特征組后,新值地址寄存器自動加一,當當前選取的特征圖元組輸出完畢后,從所述標記參數存儲器中順序獲取下一個新舊值選取標記作為當前新舊值選取標記;若當前新舊值選取標記值為選舊值標記,則將當前舊值選取地址送入舊值地址寄存器,并以此地址為起始地址以特征值組為單位進行特征圖元組的輸出,每輸出一個特征組后,舊值地址寄存器自動加一,當當前選取的特征圖元組輸出完畢后,從所述標記參數存儲器中順序獲取下一個新舊值選取標記作為當前新舊值選取標記,并從所述地址參數存儲器中順序獲取下一個舊值選取地址作為當前舊值選取地址;
每當所述新舊選擇器輸出完一個特征圖元組后,所述特征圖元組計數器自動加一,若此時所述新舊選擇器選擇輸出的特征圖元組達到一個無填充元素的計算窗口大小,所述新舊選擇器將暫停輸出,直至位于所述計算窗口緩沖存儲器中的當前計算窗口的特征圖元組重復使用((DON-1)/KGP+1)次為止;若此時所述新舊選擇器選擇輸出的特征圖元組尚未達到一個無填充元素的計算窗口大小,但當前特征圖元組計數器值與當前窗口計算提前結束標記值相同,此時所述新舊選擇器也將提前暫停輸出,直至位于所述計算窗口緩沖存儲器中的當前計算窗口的特征圖元組重復使用((DON-1)/KGP+1)次為止,并且在所述新舊選擇器提前暫停輸出的同時,從所述標記參數存儲器中順序獲取下一個窗口計算提前結束標記作為當前窗口計算提前結束標記。
進一步地,
所述卷積核參數選擇功能子模塊中卷積核參數陣列的輸出與所述特征圖元組選擇功能子模塊中輸出特征值組的輸出同步進行;
所述卷積核參數選擇功能子模塊主要由第一卷積核參數存儲器、第二卷積核參數存儲器、選擇器、標記參數存儲器、地址參數存儲器和核參陣列組計數器組成;
所述第一卷積核參數存儲器和所述第二卷積核參數存儲器皆采用雙端口RAM實現,用于存儲所述輸入數據分配控制模塊送入的卷積核參數;所述標記參數存儲器用于存儲核參地址跳躍標記參數,所述地址參數存儲器用于存儲跳躍目的核參地址參數,對于一個給定的深度卷積神經網絡模型,所述標記參數存儲器和所述地址參數存儲器一次寫入多次循環(huán)讀??;所述選擇器維護一個地址寄存器和一個跳轉地址生成器,用于從所述第一卷積核參數存儲器或所述第二卷積核參數存儲器中選擇相應的卷積核參數陣列組輸出給所述卷積計算模塊,其中跳轉地址生成器從所述地址參數存儲器獲取跳躍目的核參地址參數,為所述選擇器提供對應的跳躍目的核參地址;所述核參陣列組計數器用于統計輸出的卷積核參數陣列組個數;
所述選擇器每次選擇卷積核參數陣列組進行輸出時,比較當前核參地址跳躍標記參數值與當前核參陣列組計數器計數值是否相等;若相等,則將跳轉地址生成器的當前跳轉地址送入地址寄存器,并以此地址為起始地址,以卷積核參數陣列為單位進行卷積核參數陣列組的輸出,每輸出一個卷積核參數陣列,地址寄存器自動加一,當當前選取的卷積核參數陣列組輸出完畢后,所述核參陣列組計數器自動增一,跳轉地址生成器計算輸出下一個跳轉地址作為當前跳轉地址;若不相等,則直接從地址寄存器提供的起始地址處開始,以卷積核參數陣列為單位進行卷積核參數陣列組的輸出,每輸出一個卷積核參數陣列,地址寄存器自動加一,當當前選取的卷積核參數陣列組輸出完畢后,所述核參陣列組計數器自動增一;在所述選擇器選擇卷積核參數陣列組進行輸出的過程中,所述第一卷積核參數存儲器和所述第二卷積核參數存儲器輪流切換為所述選擇器提供卷積參數陣列組,切換操作發(fā)生當前計算層結束時刻,從所述輸入數據分配控制模塊送入的卷積核參數也以計算層為單位輪流依次送入所述第一卷積核參數存儲器和所述第二卷積核參數存儲器。
進一步地,
所述卷積計算順序序列化實現模塊和所述池化計算順序序列化實現模塊中的所述特征圖元組存儲器在其所在計算層中進行分時循環(huán)利用,所述特征圖元組存儲器并不為上一層傳送過來的每一特征圖元組都單獨提供存儲單元,其容量大小的設定結合所在計算域中同一特征圖元組新值存入和舊值重取之間的最大地址間隔給出;
舊值選取地址參數在經所述上層主機傳送到所述DDR片外存儲器之前需做相應的取余操作,取余模長為其所在計算域的所述特征圖元組存儲器容量大小。
進一步地,
所述卷積計算模塊由多個卷積核計算單元并列組成,卷積核計算單元主要由乘加樹、加法樹、加偏器和激活器組成,乘加樹由若干乘法器和加法器互連組成,加法樹由若干加法器互連組成;
所述乘加樹、加法樹共同完成所述卷積核計算單元中的乘累加操作,所述加偏器完成所述卷積核計算單元中的偏置相加操作,所述激活器完成所述卷積核計算單元中的激活操作。
所述卷積核計算單元在每個有效節(jié)拍同時獲取來自所述卷積核參數選擇功能子模塊的KFP個特征值和來自所述卷積核參數選擇功能子模塊的KFP個卷積核參數,所述乘加樹對KFP個特征值和KFP卷積核參數進行乘累加操作,并將乘累加結果按序依次送入加法樹中進行二次集中累加,待到加法樹首層入口處的操作數全部就緒或當前計算窗口的最后一組特征值就緒后,所述加法樹啟動計算完成二次累加;待到當前計算窗口的全部累加操作完成,所述加法樹將最后的累加結果送入加法器中進行偏置相加操作,偏置相加操作完成后,相加結果被送入激活器進行激活,激活后的結果即所述卷積核計算單元的最終計算結果,所述卷積核計算單元的最終計算結果將被送入所述卷積計算結果分配控制模塊。
進一步地,所述池化計算模塊主要由分配器、最大值池化單元、平均值池化單元和選擇器組成;
所述池化計算模塊在每個有效節(jié)拍同時獲取來自所述池化計算順序序列化實現模塊的PFP個特征值,并將該輸入特征值組送入所述分配器進行分配;所述分配器則根據當前計算層的池化方式將輸入的特征圖元組分配給所述最大值池化單元或所述平均值池化單元;其中,所述最大值池化單元取每張?zhí)卣鲌D中當前計算窗口的最大特征圖元素進行池化,所述平均值池化單元取每張?zhí)卣鲌D中當前計算窗口的所有特征圖元素平均值進行池化;池化操作完成后,所述選擇器根據當前計算層的池化方式選擇最大值池化單元或平均值池化單元的池化結果送給所述輸出數據分配控制模塊。
進一步地:
由所述FPGA系統擴展形成的加速系統為由多個結構相同的所述FPGA系統級聯而成。
與現有的深度卷積神經網絡的加速系統相比,本發(fā)明提供的流水化加速系統的重要創(chuàng)新點如下:
(1)將深度卷積神經網絡復雜計算分模塊進行,各模塊之間采用流水線設計思路,處理速度快;各模塊基于FPGA實現,集成度與并行度高、性能穩(wěn)定、低功率、成本低廉。
(2)加入卷積計算順序序列化實現模塊和池化計算順序序列化實現模塊,用于對深度卷積神經網絡的計算結構進行重新調整,不僅打破了傳統卷積神經網絡中計算窗口結構固定的束縛,使得每一計算層先參與計算的數據能夠先到達,充分挖掘出深度卷積神經網絡中的計算并行性以及各計算層之間的流水性,有效地減少了大量中間結果的存儲,并且自動過濾掉了計算過程中存在的各類填充元素,避免了無效計算的投入,節(jié)約了FPGA的片上資源。
(3)卷積計算模塊和池化計算模塊皆采用并行設計思路,在每個有效節(jié)拍同時獲取多個特征圖元素進行并行處理,卷積計算模塊更進一步由若干個卷積核計算單元組成,多個卷積核計算單元同步并行完成一個計算窗口與多個卷積核的卷積操作,大大提高了計算處理的速度,此外,卷積計算模塊中采用加法樹進行二次集中累加,有效地緩解了深度卷積神經網絡中處于卷積計算部分的一大計算瓶頸障礙。
(4)加速系統具有良好的靈活性,FPGA片上各類模型配置參數皆經由上層主機傳送配置,因而加速系統對不同的深度卷積神經網絡模型兼具一定通用性;卷積計算模塊和池化計算模塊中的并行度設置可結合具體型號的FPGA片上資源靈活設置,以更進一步地充分利用已有FPGA的片上資源;池化計算模塊實現多種池化方式以適應多種不同的深度卷積神經網絡模型。
(5)加速系統具有良好的擴展性,加速系統基于中高端FPGA實現時可通過內部系統級聯接口進行擴展,擴展后的FPGA片上系統能夠成倍地提高計算并行度,充分利用片上充足邏輯資源的同時,能更加合理高效地利用FPGA片上的存儲資源。
附圖說明
圖1為本發(fā)明實現的FPGA片上系統與上層主機之間的交互結構示意圖;
圖2為本發(fā)明提出的深度卷積神經網絡計算結構調整參數的結構框圖;
圖3為本發(fā)明提出的深度卷積神經網絡計算結構調整算法的數據處理流程圖;
圖4為本發(fā)明實現的基于FPGA的深度卷積神經網絡流水化加速系統的整體模塊組成結構示意圖;
圖5為按照本發(fā)明實現的FPGA片上系統中卷積計算模塊的數據處理示意圖;
圖6為按照本發(fā)明實現的FPGA片上系統中池化計算模塊的數據處理示意圖;
圖7為按照本發(fā)明實現的FPGA片上系統中卷積計算順序序列化實現模塊的特征圖元組選擇功能子模塊工作流程結構示意圖;
圖8為按照本發(fā)明實現的FPGA片上系統中卷積計算順序序列化實現模塊的卷積核參數選擇功能子模塊工作流程結構示意圖;
圖9為按照本發(fā)明實現的FPGA片上系統中的池化計算順序序列化實現模塊的組成結構示意圖;
圖10為按照本發(fā)明實現的FPGA片上系統中卷積計算模塊的工作流程結構示意圖;
圖11為按照本發(fā)明實現的FPGA片上系統中的卷積核計算單元的實現原理圖;
圖12為按照本發(fā)明實現的FPGA片上系統中池化計算模塊的工作流程結構示意圖;
圖13為按照本發(fā)明實現的FPGA片上系統中最大池化單元的實現原理圖;
圖14為按照本發(fā)明實現的FPGA片上系統中的平均池化單元的實現原理圖。
具體實施方式
以下結合附圖及實施例,對本發(fā)明進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
作為具體實施例的深度卷積神經網絡模型具有以下特點:
(1)所有計算層(計算層包括起始輸入圖像層、卷積層、池化層和全連接層)單張?zhí)卣鲌D的長寬相同,所有計算層計算窗口的長寬相同。
(2)各計算層的連接方式依次為:起始輸入圖像層、卷積層1、池化層1、卷積層2、池化層2、卷積層3、池化層3、全連接層1和全連接層2。
(3)池化操作僅存在兩種方式:取最大值池化和取平均值池化;激活操作采用Relu激活方式。
(4)各計算層圖像大小、圖像填充大小、計算窗口大小、計算窗口移動步長和池化方式信息如下表所示:
(5)FPGA片上存儲資源能夠存儲任意連續(xù)兩個卷積層用到所有卷積核參數,但不能同時容納所有卷積層的卷積核參數。
如圖1所示,整個深度卷積神經網絡從模型參數的生成、部署到最終計算結果的回傳,整個過程的處理流程如下:
A1.上層主機通過相關訓練方法訓練得到對應深度卷積神經網絡模型的所有卷積核參數,這些卷積核參數將在后面將作為FPGA片上系統中卷積操作實現部分的輸入數據參與計算。
A2.上層主機調用本發(fā)明提出的深度卷積神經網絡計算結構調整算法生成所有需要的調整參數。如圖1中①、②所示。其中①表示將給定的深度卷積神經網絡模型的模型參數作為輸入數據送入到所述調整算法中,這些模型參數具體包括:深度卷積神經網絡的計算層數信息、每一計算層單張?zhí)卣鲌D(起始輸入圖像層也看作是由多張?zhí)卣鲌D組成)的寬度信息、每一計算層計算窗口的寬度信息、每一計算層計算窗口移動步長信息、每一計算層特征圖填充大小信息、每一計算層特征圖元組大小(每一計算層所有參加計算的特征圖在同一二維位置處的所有特征值的有序集合稱為該二維位置處的特征圖元組,特征圖元組所包含的特征值個數稱為特征圖元組的大小)信息以及每一池化層的池化方式信息等。其中②表示通過所述調整算法生成所有相關調整參數。
A3.上層主機將生成的調整參數通過PCIe總線傳送到板上的DDR片外存儲器中,并在傳送完畢后向FPGA片上系統發(fā)送讀調整參數命令,如圖1中③所示;FPGA片上系統接收到讀調整參數命令后,啟動DMA讀操作通過PCIe總線從DDR片外存儲器中獲取調整參數并分別存入對應的FPGA片上存儲器中。
A4.將所述訓練好的卷積核參數通過PCIe總線送入板上的DDR片外存儲器中,并在傳送完畢后向FPGA片上系統發(fā)送讀卷積核參數命令,如圖1中④所示。由于FPGA片上系統的存儲資源不能一次性容納所有的卷積核參數,在接收到讀調整參數命令后,FPGA片上系統啟動DMA讀操作通過PCIe總線從DDR片外存儲器中預先獲取前兩個卷積層所用到的卷積核參數存入FPGA片上的卷積核參數存儲器中,其它卷積層所用到的卷積核參數將在計算過程中適時地分批次加載。
A5.上層主機通過生成的所述調整參數中的原始輸入圖像位置重排參數對所有輸入圖像進行像素點位置重排,如圖1中⑤所示;并將重排后的圖像通過PCIe總線送入板上的DDR片外存儲器中,傳送完畢后向FPGA片上系統發(fā)送計算啟動命令,如圖1中⑥所示。
A6.FPGA片上系統在收到計算啟動命令后,啟動DMA讀操作通過PCIe總線從DDR片外存儲器中獲取重排后的圖像數據開始計算,計算過程中,FPGA片上系統需要多次適時地從DDR片外存儲器繼續(xù)獲取其他卷積層的卷積核參數,在調整參數和卷積核參數的協同參與下完成相關計算過程。待到生成相關計算結果后,再啟動DMA寫操作將計算結果回傳到DDR片外存儲器中,并向上層主機發(fā)送計算完成中斷通知,如圖1中⑦所示。
A7.上層主機接收到FPGA片上系統發(fā)送的計算完成中斷通知后,從DDR片外存儲器的指定位置讀取計算結果繼而進行后續(xù)所需操作,如圖1中⑧所示。
如圖2所示,調整參數主要分為兩類:計算順序序列化參數和填充過濾參數。其中,計算順序序列化參數可進一步細分為原始輸入圖像位置重排參數、新舊值選取標記參數和舊值選取地址參數;在深度卷積神經網絡的卷積層中,填充過濾參數可進一步細分為核參地址跳躍標記參數、跳躍目的核參地址參數和窗口計算提前結束標記參數;在深度卷積神經網絡的池化層中,填充過濾參數單指窗口計算提前結束標記參數。
計算順序序列化參數打破了傳統卷積神經網絡中計算窗口結構固定的束縛,使得每一計算層先參與計算的數據能夠先到達,充分挖掘出深度卷積神經網絡中的計算并行性以及層與層之間的流水性,有效地減少了大量中間結果的存儲,使之更有利于在FPGA上高效并行流水化實現。其中,原始輸入圖像位置重排參數用于對上層主機中的輸入圖像進行像素點位置重排以得到重排后的圖像;新舊值選取標記參數為其所在層的計算順序序列化實現過程提供新舊值數據選取標記,標記值指定是從上一層的特征圖(起始輸入圖像層也看作是由多張?zhí)卣鲌D組成)中順序獲取下一個參與計算的新值數據還是從已經獲取過的新值數據中選取舊值數據。當新舊值選取標記參數指定從已經獲取過的新值數據中選取舊值數據時,舊值選取地址參數為其提供選取舊值數據的地址。
填充過濾參數針對深度卷積神經網絡的卷積層中可能存在的特征圖尺寸填充現象和池化層中可能存在的窗口越界填充現象所帶來的無效計算問題,在基于FPGA的計算實現過程中,自動過濾掉填充元素,避免無效計算的投入,有效地解決了深度卷積神經網絡中由于各類填充操作而導致的資源浪費和有效計算延誤問題。其中核參地址跳躍標記參數在深度卷積神經網絡的卷積層中指明當前計算位置之后是否存在填充元素,當存在填充元素時,則需要執(zhí)行跳躍過濾操作,跳躍目的核參地址參數為其提供卷積核參數的跳躍目的地址。當一個原始計算窗口中存在填充元素時,由于跳躍過濾操作的存在,計算窗口中真正投入進計算的元素數量將小于原始計算窗口大小,此時,窗口計算提前結束標記參數為其提供窗口計算提前結束標記。
深度卷積神經網絡計算結構調整算法,通過分析位于深度卷積神經網絡中各個卷積層和池化層的神經元結構特性,根據后一層期望得到的單張?zhí)卣鲌D的元素排列順序逆序推出前一層中對應參與計算的單張?zhí)卣鲌D的元素排列順序,排列順序以一維位置序號序列表示。該算法采用隊列(記為Q)為主要數據結構遍歷各層,以首層全連接層為起點,以起始輸入圖像層為終點,遍歷過程中生成與每層相關的調整參數,每一層中的所有特征圖在后續(xù)參與計算時共享與該層對應的一套調整參數。
深度卷積神經網絡計算結構調整算法,以首層全連接層中所輸入的單張?zhí)卣鲌D的元素排列順序為初始排列順序,并將表示該初始排列順序的一維位置序號序列依次存入至所述隊列中,深度卷積神經網絡計算結構調整算法每次取隊列隊首位置序號進行擴充,根據所在層的神經元結構找到與該位置序號所在元素相對應的上層特征圖中的計算窗口位置,并依次分析該計算窗口中的每個元素在其所在的單張?zhí)卣鲌D中的位置,每一層中的每一次分析行為對應一個唯一的分析序號。當分析到的元素處于其所在的單張?zhí)卣鲌D中的填充位置時,該分析序號稱為無效分析序號;否則,該分析序號稱為有效分析序號。
因而,每個無效分析序號都與上一層單張?zhí)卣鲌D中的一個填充位置的元素相對應,每個有效分析序號都與上一層單張?zhí)卣鲌D中的一個參與有效計算的非填充位置的元素相對應。
每個有效分析序號都擁有與其相對應的新舊值選取標記,新舊值選取標記的取值有兩個:選新值標記和選舊值標記。每個新舊值選取標記取值為選舊值標記的有效分析序號都額外擁有一個與之相對應的舊值選取地址,每個含有填充元素的計算窗口中的最后一個有效分析序號都額外擁有一個與之相對應的窗口計算提前結束標記。該層中所有新舊值選取標記的有序集合即為該層待求的所述新舊值選取標記參數;該層中所有舊值選取地址的有序集合即為該層待求的所述舊值選取地址參數;該層中所有窗口計算提前結束標記的有序集合即為該層待求的所述窗口計算提前結束標記參數。
若該層為深度卷積神經網絡中的卷積層,則該層中每一段連續(xù)的無效分析序號或單個成段的無效分析序號還需為其正前面的一個有效分析序號額外產生一個核參地址跳躍標記和跳躍目的核參地址,跳躍目的核參地址即處于該段正后面的一個有效分析序號所對應位置的元素在其計算窗口中的位置序號。該層中所有核參地址跳躍標記的有序集合即為該層待求的所述核參地址跳躍標記參數;該層中所有跳躍目的核參地址的有序集合即為該層待求的所述跳躍目的核參地址參數。
由于上一層不同計算窗口之間可能存在交集,因而不同的分析序號可能對應到上一層單張?zhí)卣鲌D中同一個位置的元素。
當一個有效分析序號所對應位置的元素于其所在的單張?zhí)卣鲌D中被首次分析到時,則將此有效分析序號的新舊值選取標記取值為選新值標記,并將該元素在其所處的單張?zhí)卣鲌D中的一維位置序號添加到所述隊列尾部,上一層所有被首次分析到的元素在其所處的單張?zhí)卣鲌D中的一維位置序號的有序集合即上一層單張?zhí)卣鲌D期望得到的元素排列順序,根據求得的上一層單張?zhí)卣鲌D期望得到的元素排列順序,按照上述方法,更進一步可以求得上上層單張?zhí)卣鲌D期望得到的元素排列順序,直至求得起始圖像輸入層期望得到的元素排列順序為止,起始圖像輸入層期望得到的元素排列順序即待求的所述原始輸入圖像位置重排參數;
當一個有效分析序號所對應位置的元素于其所在的單張?zhí)卣鲌D中并非被首次分析到時,則將此有效分析序號的新舊值選取標記取值為選舊值標記,并找到該元素在其所處的單張?zhí)卣鲌D中的一維位置序號在整張?zhí)卣鲌D期望得到的元素排列順序中的位置,此位置即此有效分析序號額外擁有的舊值選取地址。
如圖3所示,算法的數據處理流程如下:
A1.以首層全連接層中所輸入的單張?zhí)卣鲌D的元素排列順序為初始排列順序,并將表示該初始排列順序的一維位置序號序列依次存入隊列Q中。此實施例中首層全連接層中所輸入的單張?zhí)卣鲌D大小對應到前一層池化層3生成的特征圖二維大小為4*4,由于全連接層只有一個計算窗口,所以輸入的單張?zhí)卣鲌D的元素排列順序為1~16;因而將1~16依次存入Q中。
A2.判斷隊列Q是否為空,為空時,算法結束;否則,轉至A3;
A3.取隊列Q隊首位置序號進行擴充,根據所在層的神經元結構找到與該位置序號所在元素相對應的上層特征圖中的計算窗口位置,并依次分析該計算窗口中的每個元素在其所在的單張?zhí)卣鲌D中的位置。例如第一次取出的列隊首位置序號為1,對應到卷積層3生成的特征圖中大小為3*3,步長為1的1號計算窗口,因而接下來將依次分析1號計算窗口中的元素,具體對應到卷積層3中生成的單張?zhí)卣鲌D中一維位置序號為1、2、3、9、10、11、17、18、19的元素。
A4.判斷當前窗口是否分析完畢,若沒有分析完畢,轉至A5;否則,轉至A10;
A5.分析下一個當前窗口中的元素,判斷該元素是否處于所在特征圖中的填充位置。若否,轉至A6;否則轉至A9。
A6.為該層中的此次分析行為分配一個唯一的有效分析序號,有效分析序號從編號1開始依次遞增分配,并判斷該有效分析序號所對應位置的元素于其所在的單張?zhí)卣鲌D中是否被首次分析到,若是,轉至A7;否則轉至A8。
A7.將當前有效分析序號的新舊值選取標記值置為1(標記值為1表示選取新值;標記值為0表示選取舊值)。并判斷有效分析序號所對應位置的元素于是否處于起始輸入圖像層,若是,將當前有效分析序號添加到原始輸入圖像位置重排參數中;否則,將當前有效分析序號添加到隊列Q隊尾。轉至A4。
A8.將當前有效分析序號的新舊值選取標記值置為0,轉至A4。
A9.為該層中的此次分析行為分配一個唯一的無效分析序號,無效分析序號從編號1開始依次遞增分配,并判斷該無效分析序號是否位于一段連續(xù)無效分析序號的段首,若是,將其正前面的一個有效分析序號添加至核參地址跳躍標記參數中,將緊接在該段連續(xù)無效分析序號末尾的一個有效分析序號添加至跳躍目的核參地址參數中,轉至A4;否則,直接轉至A4。
A10.判斷分析完的計算窗口中是否出現過處于填充位置的元素,若是,將該計算窗口中最后一個有效分析序號添加至窗口計算提前結束標記參數中,轉至A2。否則,直接轉至A2。
如圖4所示,按照本發(fā)明實現的FPGA片上系統主要由輸入數據分配控制模塊、輸出數據分配控制模塊、卷積計算順序序列化實現模塊、池化計算順序序列化實現模塊、卷積計算模塊、池化計算模塊和卷積計算結果分配控制模塊七大模塊組成,此外FPGA片上系統還包含一個內部系統級聯接口。
輸入數據分配控制模塊同時與FPGA外圍接口和所述內部系統級聯接口、卷積計算順序序列化實現模塊相連;輸出數據分配控制模塊同時與FPGA外圍接口和所述內部系統級聯接口、卷積計算結果分配控制模塊以及池化計算模塊相連;卷積計算結果分配控制模塊同時與卷積計算模塊、輸出數據分配控制模塊以及池化計算順序序列化實現模塊相連;卷積計算順序序列化實現模塊與卷積計算模塊之間直接相連;池化計算順序序列化實現模塊與池化計算模塊之間直接相連。
輸入數據分配控制模塊主要負責實時監(jiān)視卷積計算順序序列化實現模塊的數據消耗狀況,適時適量地向DDR片外存儲器發(fā)送相關讀數據命令并及時接收FPGA外圍接口和所述內部系統級聯接口傳送來的輸入數據,除此之外,輸入數據分配控制模塊還需將接收到的數據有組織有規(guī)格地傳送給卷積計算順序序列化實現模塊。
輸出數據分配控制模塊主要負責及時接收池化計算模塊或卷積計算結果分配控制模塊傳送來的輸入數據,并根據當前所處的計算階段將接收到的數據有組織有規(guī)格地傳送給所述內部系統級聯接口或FPGA外圍接口,適時適量地向DDR片外存儲器發(fā)送相關寫數據命令和相關中斷通知。除此之外,輸出數據分配控制模塊還負責實時響應FPGA外圍接口傳送來的各類相關命令。
卷積計算順序序列化實現模塊主要負責結合相關調整參數將深度卷積神經網絡中相關卷積操作的結構化計算順序序列化,并為卷積計算模塊及時傳送序列化后的數據集;池化計算順序序列化實現模塊主要負責結合相關調整參數將深度卷積神經網絡中相關池化操作的結構化計算順序序列化,并為池化計算模塊及時傳送序列化后的數據集。
卷積計算模塊主要負責完成深度卷積神經網絡中的相關卷積計算,并將計算結果及時傳送給卷積計算結果分配控制模塊;池化計算模塊主要負責完成深度卷積神經網絡中的相關池化操作,并將計算結果及時傳送給所述輸出數據分配控制模塊。
卷積計算結果分配控制模塊主要負責及時接收卷積計算模塊傳來的計算結果數據,并根據當前所處的計算階段將接收到的數據有組織有規(guī)格地傳送給池化計算順序序列化實現模塊或輸出數據分配控制模塊。
內部系統級聯接口主要負責為FPGA片上系統內部子系統之間的級聯或內部模塊之間的連接提供有效接口,用于連接輸出數據分配控制模塊和輸入數據分配控制模塊。
在FPGA片上系統中的各層計算過程中,每一計算層所有參加計算的特征圖在同一二維位置處的所有特征值的有序集合稱為該二維位置處的特征圖元組,特征圖元組所包含的特征值個數稱為特征圖元組的大小。特征圖元組將作為一個整體先后參與計算,原始輸入圖像層的處理也按照將其視為特征圖的方式進行,二維位置計算點的移動由上一計算層或起始圖像輸入層的數據送出順序和卷積計算順序序列化實現模塊或池化計算順序序列化實現模塊聯合決定;每一計算層中所有生成的特征圖也以特征圖元組為基本單位依次生成,上一個特征圖元組生成完畢后才開始進行下一個特征圖元組的生成。輸入的特征圖元組大小記作DIN,生成的特征圖元組大小記作DON。
上層主機根據所述調整參數中提供的原始輸入圖像位置重排參數對輸入圖像進行像素點位置重排,無論是在重排過程中還是在之后的重排圖像的數據傳送過程中,圖像的各三維分量皆作為一個整體進行操作。重排后的圖像根據圖像二維大小,按照從左到右,從上到下的順序依次傳送給DDR片外存儲器。上層主機中的卷積核參數按照所述卷積計算模塊設定的計算順序按規(guī)格組織后再傳送給DDR片外存儲器。
輸入數據分配控制模塊、輸出數據分配控制模塊和卷積計算結果分配控制模塊在傳送數據時皆保持其數據接收的先后順序不變,僅當接收到的數據組成一定大小的數據單元后即將其發(fā)送給與其相連的所需模塊。
卷積計算模塊每次同時并行處理多張?zhí)卣鲌D,每張?zhí)卣鲌D每次同時并行與多個卷積核進行卷積操作,因而卷積計算模塊可以每次同時并行生成多張新的特征圖;池化計算模塊同樣每次同時并行處理多張?zhí)卣鲌D。卷積計算模塊每次最多同時處理的特征圖張數稱為卷積層特征圖并行度,記作KFP;卷積計算模塊每次最多同時生成的特征圖張數稱為卷積核組并行度,記作KGP;池化計算模塊每次最多同時處理的特征圖張數稱為池化層特征圖并行度,記作PFP。
卷積計算模塊的數據處理示意圖如圖5所示,其中if1~ifn代表上層生成輸入的n張?zhí)卣鲌D,of1~ofn代表本層生成的n張?zhí)卣鲌D;其中連接輸入特征圖與卷積核參數陣列的符號表示乘法操作,連接各符號與生成特征圖元素的符號代表加法操作。在深度卷積神經網絡的全連接層中,圖中輸入的特征圖和生成的特征圖只包含一個特征圖元素,計算窗口大小將等于整張輸入特征圖的大小。
池化計算模塊的數據處理示意圖如圖6所示,其中if1~ifn代表上層生成輸入的n張?zhí)卣鲌D,of1~ofn代表本層生成的n張?zhí)卣鲌D;其中連接輸入特征圖的計算窗口與生成特征圖元素的符號代表池化操作。
卷積計算順序序列化實現模塊由特征圖元組選擇功能子模塊和卷積核參數選擇功能子模塊組成。特征圖元組選擇功能子模塊實現特征圖元組選擇功能,卷積核參數選擇功能子模塊實現卷積核參數選擇功能。
特征圖元組的每次選擇操作與有效分析序號一一對應。
①特征圖元組選擇功能子模塊
如圖7所示,特征圖元組選擇功能子模塊主要由特征圖元組存儲器、新舊選擇器、標記參數存儲器、地址參數存儲器、計算窗口緩沖存儲器和特征圖元組計數器組成。
其中,特征圖元組存儲器采用雙端口RAM實現,用于存儲所述輸入數據分配控制模塊送入的特征圖元組;新舊選擇器維護兩個地址寄存器,分別為新值地址寄存器和舊值地址寄存器,用于從特征圖元組存儲器中選擇相應的特征圖元組并輸出給所述卷積計算模塊;標記參數存儲器用于存儲所述的有效分析序號的新舊值選取標記和窗口計算提前結束標記,地址參數存儲器用于存儲所述的有效分析序號的舊值選取地址,對于一個給定的深度卷積神經網絡模型,標記參數存儲器和地址參數存儲器一次寫入多次循環(huán)讀??;計算窗口緩沖存儲器采用雙端口RAM實現,用于緩存新舊選擇器輸出的特征圖元組并將其輸出給所述卷積計算模塊;特征值圖元組計數器用于統計新舊選擇器選擇輸出的特征圖元組個數。
特征圖元組選擇功能子模塊每節(jié)拍從所述輸入數據分配控制模塊獲取一個特征圖元組的KFP個特征值,這KFP個特征值組成一個輸入特征值組。新舊選擇器每次選擇特征圖元組進行輸出時,查看當前新舊值選取標記值,若當前新舊值選取標記值為選新值標記,則從新值地址寄存器提供的起始地址處開始以特征值組為單位進行特征圖元組的輸出,每輸出一個特征組后,新值地址寄存器自動加一,當當前選取的特征圖元組輸出完畢后,從標記參數存儲器中順序獲取下一個新舊值選取標記作為當前新舊值選取標記;若當前新舊值選取標記值為選舊值標記,則將當前舊值選取地址送入舊值地址寄存器,并以此地址為起始地址以特征值組為單位進行特征圖元組的輸出,每輸出一個特征組后,舊值地址寄存器自動加一,當當前選取的特征圖元組輸出完畢后,從標記參數存儲器中順序獲取下一個新舊值選取標記作為當前新舊值選取標記,并從地址參數存儲器中順序獲取下一個舊值選取地址作為當前舊值選取地址。每當新舊選擇器輸出完一個特征圖元組后,特征圖元組計數器自動加一,若此時新舊選擇器選擇輸出的特征圖元組達到一個無填充元素的計算窗口大小,新舊選擇器將暫停輸出,直至位于計算窗口緩沖存儲器中的當前計算窗口的特征圖元組重復使用((DON-1)/KGP+1)次為止;若此時前新舊選擇器選擇輸出的特征圖元組尚未達到一個無填充元素的計算窗口大小,但當前特征圖元組計數器值與當前窗口計算提前結束標記值相同,此時新舊選擇器也將提前暫停輸出,直至位于計算窗口緩沖存儲器中的當前計算窗口的特征圖元組重復使用((DON-1)/KGP+1)次為止,并且在新舊選擇器提前暫停輸出的同時,從標記參數存儲器中順序獲取下一個窗口計算提前結束標記作為當前窗口計算提前結束標記。
②卷積核參數選擇功能子模塊
卷積核參數選擇功能子模塊中卷積核參數陣列的輸出與所述特征圖元組選擇功能子模塊中輸出特征值組的輸出同步進行。
如圖8所示,卷積核參數選擇功能子模塊主要由卷積核參數存儲器(a)、卷積核參數存儲器(b)、選擇器、標記參數存儲器、地址參數存儲器和核參陣列組計數器組成。
其中,卷積核參數存儲器(a)和卷積核參數存儲器(b)采用雙端口RAM實現,用于存儲所述輸入數據分配控制模塊送入的卷積核參數;標記參數存儲器用于存儲所述的核參地址跳躍標記參數,地址參數存儲器用于存儲所述的跳躍目的核參地址參數,對于一個給定的深度卷積神經網絡模型,標記參數存儲器和地址參數存儲器一次寫入多次循環(huán)讀??;選擇器維護一個地址寄存器和一個跳轉地址生成器,用于從卷積核參數存儲器(a)或卷積核參數存儲器(b)中選擇相應的卷積核參數陣列組(與所述特征圖元組選擇功能子模塊中輸出的一個特征圖元組相對應的所有卷積核參數陣列的集合稱為一個卷積核參數陣列組)輸出給所述卷積計算模塊,其中跳轉地址生成器從地址參數存儲器獲取跳躍目的核參地址參數進行計算,為選擇器提供對應的跳躍目的核參地址;核參陣列組計數器用于統計輸出的卷積核參數陣列組個數。
選擇器每次選擇卷積核參數陣列組進行輸出時,比較當前核參地址跳躍標記參數值與當前核參陣列組計數器計數值是否相等。若相等,則將所述跳轉地址生成器的當前跳轉地址送入地址寄存器,并以此地址為起始地址,以卷積核參數陣列為單位進行卷積核參數陣列組的輸出,每輸出一個卷積核參數陣列,地址寄存器自動加一,當當前選取的卷積核參數陣列組輸出完畢后,核參陣列組計數器自動增一,所述跳轉地址生成器計算輸出下一個跳轉地址作為當前跳轉地址;若不相等,則直接從所述地址寄存器提供的起始地址處開始,以卷積核參數陣列為單位進行卷積核參數陣列組的輸出,每輸出一個卷積核參數陣列,地址寄存器自動加一,當當前選取的卷積核參數陣列組輸出完畢后,核參陣列組計數器自動增一。在選擇器選擇卷積核參數陣列組進行輸出的過程中,卷積核參數存儲器(a)和卷積核參數存儲器(b)輪流切換為選擇器提供卷積參數陣列組,切換操作發(fā)生當前計算層結束時刻,從所述輸入數據分配控制模塊送入的卷積核參數也以計算層為單位輪流依次送入卷積核參數存儲器(a)和卷積核參數存儲器(b)。
池化計算順序序列化實現模塊獲取特征圖元組的操作與卷積計算順序序列化實現模塊的獲取過程類似,但每節(jié)拍獲取的特征圖元組的特征值個數為PFP,并且當當前窗口計算結束時,計算窗口中的所有特征圖元組不需要重復參與計算。
如圖9所示,池化計算順序序列化實現模塊主要由特征圖元組存儲器、新舊選擇器、標記參數存儲器、地址參數存儲器和特征圖元組計數器組成。
其中,特征圖元組存儲器采用雙端口RAM實現,用于存儲所述輸入數據分配控制模塊送入的特征圖元組;新舊選擇器維護兩個地址寄存器,分別為新值地址寄存器和舊值地址寄存器,用于從特征圖元組存儲器中選擇相應的特征圖元組并輸出給所述卷積計算模塊;標記參數存儲器用于存儲所述的有效分析序號的新舊值選取標記和窗口計算提前結束標記,地址參數存儲器用于存儲所述的有效分析序號的舊值選取地址,對于一個給定的深度卷積神經網絡模型,標記參數存儲器和地址參數存儲器一次寫入多次循環(huán)讀?。惶卣髦祱D元組計數器用于統計新舊選擇器選擇輸出的特征圖元組個數。
池化計算順序序列化實現模塊每節(jié)拍從所述輸入數據分配控制模塊獲取一個特征圖元組的PFP個特征值,這PFP個特征值組成一個輸入特征值組。新舊選擇器每次選擇特征圖元組進行輸出時,查看當前新舊值選取標記值,若當前新舊值選取標記值為選新值標記,則從新值地址寄存器提供的起始地址處開始以特征值組為單位進行特征圖元組的輸出,每輸出一個特征組后,新值地址寄存器自動加一,當當前選取的特征圖元組輸出完畢后,從標記參數存儲器中順序獲取下一個新舊值選取標記作為當前新舊值選取標記;若當前新舊值選取標記值為選舊值標記,則將當前舊值選取地址送入舊值地址寄存器,并以此地址為起始地址以特征值組為單位進行特征圖元組的輸出,每輸出一個特征組后,舊值地址寄存器自動加一,當當前選取的特征圖元組輸出完畢后,從標記參數存儲器中順序獲取下一個新舊值選取標記作為當前新舊值選取標記,并從地址參數存儲器中順序獲取下一個舊值選取地址作為當前舊值選取地址。每當新舊選擇器輸出完一個特征圖元組后,特征圖元組計數器自動加一,若此時新舊選擇器選擇輸出的特征圖元組未達到一個無填充元素的計算窗口大小,但當前特征圖元組計數器值與當前窗口計算提前結束標記值相同,此時所述池化計算順序序列化實現模塊向所述池化計算模塊發(fā)送當前窗口計算提前結束信號,并從標記參數存儲器中順序獲取下一個窗口計算提前結束標記作為當前窗口計算提前結束標記。
所述卷積計算順序序列化實現模塊和所述池化計算順序序列化實現模塊中的所述特征圖元組存儲器在其所在計算層中進行分時循環(huán)利用,所述特征圖元組存儲器并不為上一層傳送過來的每一特征圖元組都單獨提供存儲單元,其容量大小的設定結合所在計算域中同一特征圖元組新值存入和舊值重取之間的最大地址間隔給出;
舊值選取地址參數在經所述上層主機傳送到所述DDR片外存儲器之前需做相應的取余操作,取余模長為其所在計算域的所述特征圖元組存儲器容量大小。
如圖10所示,卷積計算模塊由KGP(圖中m=KGP)個卷積核計算單元并列組成。
卷積計算模塊在每一個有效節(jié)拍同時獲取卷積計算順序序列化實現模塊傳入的KFP個特征值與KFP*KGP個卷積核參數,這些卷積核參數來自KGP個不同的卷積核。獲取到的KFP個特征值將同時與這KGP個卷積核進行卷積操作,卷積計算結果加上相應的偏置值再經過Relu激活操作后,得到KGP個特征圖元素,這KGP個特征圖元素對應屬于KGP張不同的生成特征圖并且最終會被依次送往卷積計算結果分配控制模塊。
如圖11所示,卷積核計算單元主要由乘加樹、加法樹、加偏器和激活器組成。乘加樹由若干乘法器和加法器互連組成,加法樹由若干加法器互連組成。
其中乘加樹、加法樹共同完成卷積計算單元中的乘累加操作,加偏器完成卷積計算單元中的偏置相加操作,激活器完成卷積計算單元中的激活操作。
卷積核計算單元在每個有效節(jié)拍同時獲取來自所述卷積核參數選擇功能子模塊的KFP個特征值和來自所述卷積核參數選擇功能子模塊的KFP個卷積核參數。乘加樹對KFP個特征值和KFP卷積核參數進行乘累加操作,并將乘累加結果按序依次送入加法樹中進行二次集中累加。待到加法樹首層入口處的操作數全部就緒或當前計算窗口的最后一組特征值就緒后,加法樹啟動計算完成二次累加;待到當前計算窗口的全部累加操作完成,加法樹將最后的累加結果送入加法器中進行偏置相加操作,偏置相加操作完成后,相加結果繼而會被送入激活器進行激活,激活后的結果即卷積計算單元的最終計算結果。卷積計算單元的最終計算結果將被送入所述卷積計算結果分配控制模塊。
卷積計算單元中的加法樹主要用于緩存乘加樹送入的乘累加結果,并集中進行累加計算,加法樹的二次集中累加有效地解決了在浮點數累加過程中,由于前后操作數的數據相關性而引發(fā)的流水線斷流,繼而導致的卷積核計算單元取數阻塞問題,有效地緩解了深度卷積神經網絡中處于卷積計算部分的一大計算瓶頸障礙。
如圖12所示,池化計算模塊主要由分配器、最大值池化單元、平均值池化單元和選擇器組成;
池化計算模塊在每個有效節(jié)拍同時獲取來自所述池化計算順序序列化實現模塊的PFP個特征值,并將該輸入特征值組送入分配器進行分配;分配器則根據當前計算層的池化方式將輸入的特征圖元組分配給最大值池化單元或平均值池化單元;其中,最大值池化單元取每張?zhí)卣鲌D中當前計算窗口的最大特征圖元素進行池化,平均值池化單元取每張?zhí)卣鲌D中當前計算窗口的所有特征圖元素平均值進行池化;池化操作完成后,選擇器根據當前計算層的池化方式選擇最大值池化單元或平均值池化單元的池化結果送給所述輸出數據分配控制模塊。
如圖13所示,最大值池化單元主要由比較器陣列、中間結果緩存隊列、分配器和特征圖元組計數器組成。比較器陣列由若干比較器組成。
其中,比較器陣列用于完成比較每張?zhí)卣鲌D中當前計算窗口的所有特征值元素,求取其最大值;中間結果緩存隊列用于緩存比較器陣列比較的中間結果;分配器用于分配中間結果緩存隊列中的中間結果,根據相關控制條件,將其送入比較器陣列進行迭代比較或將其作為最終結果輸出給所述池化計算模塊中的選擇器;特征圖元組計數器用于統計送入比較器陣列參與比較計算的特征圖元組個數。
最大值池化單元在每個有效節(jié)拍同時獲取來自所述池化計算模塊分配器的PFP個特征值,并將該輸入特征值組送入比較器陣列,當一個特征圖元組送入完畢后,特征圖元組計數器自動加一;與此同時,分配器從中間結果緩存隊列獲取與輸入特征值相對應的中間結果特征值組送入比較器陣列。一旦比較器陣列操作數準備就緒,比較器陣列啟動計算,比較兩組特征值組中各特征值分量,取其較大者送入中間結果緩存隊列。當特征圖元組計數器數值達到當前計算窗口大小時,分配器將位于中間結果緩存隊列中的結果作為輸出送入所述池化計算模塊中的選擇器。
如圖14所示,平均值池化單元主要由加法器陣列、中間結果緩存隊列、分配器、特征圖元組計數器和除法器陣列組成。加法器陣列由若干加法器組成,除法器陣列由若干除法器組成。
其中,加法器陣列用于完成累加輸入的特征圖元組;中間結果緩存隊列用于緩存加法器陣列累加的中間結果;分配器用于分配中間結果緩存隊列中的中間結果,根據相關控制條件,將其送入加法器陣列進行迭代累加或將其作為最終結果輸出給所述池化計算模塊中的選擇器;特征圖元組計數器用于統計送入加法器陣列參與比較計算的特征圖元組個數;除法器用于對分配器送出的累加結果進行取平均值操作。
平均值池化單元在每個有效節(jié)拍同時獲取來自所述池化計算模塊分配器的PFP個特征值,并將該輸入特征值組送入加法器陣列,當一個特征圖元組送入完畢后,特征圖元組計數器自動加一;與此同時,分配器從中間結果緩存隊列獲取與輸入特征值相對應的中間結果特征值組送入加法器陣列。一旦加法器陣列操作數準備就緒,加法器陣列啟動計算,完成兩組特征值組中各特征值分量的累加,累加結果送入中間結果緩存隊列。當特征圖元組計數器數值達到當前計算窗口大小時,分配器將位于中間結果緩存隊列中的結果送入除法器陣列;與此同時特征圖元組計數器的當前數值也送入除法器陣列作為操作數參與計算,除法器陣列輸出的平均值將作為輸出送入池化計算模塊中的選擇器。
KFP、KGP的設定值結合給定的深度卷積神經網絡模型中各卷積層的DON和FPGA片上系統的各類資源數量聯合給出,在FPGA片上系統的各類資源允許的情況下,盡量將KFP、KGP向所有卷積層中最大的DON靠近;PFP的設定值在保證緊接其后的卷積層不空閑的前提下盡量減小。在本實施例中,KFP、KGP值均設定為8,PFP值設定為1。
當KFP的值增大到一定程度之后,若此時FPGA片上相關資源依舊充足,則可利用內部系統級聯接口對已有FPGA片上系統進行進一步擴展。擴展后的FPGA片上系統由多個FPGA片上子系統級聯而成,而每個FPGA片上子系統皆由所述的七大模塊和一個內部系統級聯接口組成,其中,內部系統級聯接口用于連接上一個FPGA片上子系統的輸出數據分配控制模塊和下一個FPGA片上子系統的輸入數據分配控制模塊,而七大模塊之間的連接及實現除所在計算域和分析域有所縮減以外,與擴展前的FPGA片上系統完全相同。
擴展后的FPGA片上系統不僅能成倍地提高計算并行度,合理地利用FPGA片上剩余資源,而且能更充分地利用深度卷積神經網絡中計算層層與層之間的流水性,有效縮短池化層與卷積層之間由于卷積層的計算瓶頸而帶來的非必要等待時間,非必要等待時間的縮短意味著非必要中間結果的進一步減少,FPGA片上存儲資源將得到更為高效而充分的利用。