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