一種神經網絡優化方法及裝置與流程
2023-05-30 08:02:51 2

本發明涉及計算機視覺領域,特別涉及一種神經網絡優化方法及裝置。
背景技術:
近幾年來,深度神經網絡在計算機視覺領域的各類應用中取得了巨大的成功,如圖像分類、目標檢測、圖像分割等。但深度神經網絡的模型往往包含大量的模型參數,計算量大、處理速度慢,無法在一些低功耗、低計算能力的設備(如嵌入式設備、集成設備等)上進行實時計算。
技術實現要素:
鑑於上述問題,本發明提供一種神經網絡優化方法及裝置,以解決現有技術神經網絡處理速度慢、實時性差的問題。。
本發明實施例,一方面提供一種神經網絡優化方法,該方法包括:
對全連接層的輸入數據進行二值化和位打包操作得到包含多個數據元素的輸入數據序列;
將所述全連接層的網絡權重進行轉置,對轉置後的每一行權重進行二值化和位打包操作得到包含多個權重元素的權重序列;
將輸入數據序列中的數據元素分別與各行權重序列的權重元素進行內積運算,得到輸入數據序列與各行權重序列的內積結果;
根據輸入數據序列與各行權重序列的內積結果得到所述全連接層的輸出結果。
本發明實施例,另一方面提供一種神經網絡優化裝置,該裝置包括:
數據處理單元,用於對全連接層的輸入數據進行二值化和位打包操作得到包含多個數據元素的輸入數據序列;
權重處理單元,用於將所述全連接層的網絡權重進行轉置,對轉置後的每一行權重進行二值化和位打包操作得到包含多個權重元素的權重序列;
內積運算單元,用於將輸入數據序列中的數據元素分別與各行權重序列的權重元素進行內積運算,得到輸入數據序列與各行權重序列的內積結果;
結果輸出單元,用於根據輸入數據序列與各行權重序列的內積結果得到所述全連接層的輸出結果。
本發明技術方案,一方面,將神經網絡的全連接層的輸入數據和網絡權重進行二值化和位打包操作得到輸入數據序列和權重序列,不僅對輸入數據和網絡權重進行數據壓縮使得參與運算的數據量大大減少,而且輸入數據與網絡權重的運算由現有技術的浮點數與浮點數相乘變成了無符號整數與無符號整數之間的按位操作,提高了運算速度;另一方面,對網絡權重進行轉置之後的每一行權重處理成一行權重序列,從而使得輸入數據序列可以直接按行與網絡權重的每一行權重序列依次進行內積運算,從而加快矩陣乘法的數據讀取速度,從而進一步提高內積運算速度。
附圖說明
附圖用來提供對本發明的進一步理解,並且構成說明書的一部分,與本發明的實施例一起用於解釋本發明,並不構成對本發明的限制。
圖1為本發明實施例神經網絡優化方法的流程圖;
圖2為本發明實施例中全連接層的輸入數據和其對應的輸入數據序列的示意圖;
圖3a為本發明實施例中全連接層的網絡權重的示意圖;
圖3b為本發明實施例中轉置後的網絡權重的示意圖;
圖3c為本發明實施例中經過二值化處理和位打包操作之後的網絡權重;
圖4為本發明實施例中神經網絡優化裝置的結構示意圖。
具體實施方式
為了使本技術領域的人員更好地理解本發明中的技術方案,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都應當屬於本發明保護的範圍。
實施例一
參見圖1,為本發明實施例提供的神經網絡優化方法的流程圖,該方法包括:
步驟101、對全連接層的輸入數據進行二值化和位打包操作得到包含多個數據元素的輸入數據序列。
步驟102、將所述全連接層的網絡權重進行轉置,對轉置後的每一行權重進行二值化和位打包操作得到包含多個權重元素的權重序列。
步驟103、將輸入數據序列中的數據元素分別與各行權重序列的權重元素進行內積運算,得到輸入數據序列與各行權重序列的內積結果。
步驟104、根據輸入數據序列與各行權重序列的內積結果得到所述全連接層的輸出結果。
優選地,本發明實施例中,前述步驟101,具體可通過以下步驟a1~步驟a2實現:
步驟a1、對輸入數據進行二值化處理得到二值化輸入數據;
步驟a2、從二值化輸入數據的第一個數據開始,將每m個連續數據打包成一個數據元素得到包含多個數據元素的輸入數據序列,m為32的整數倍。
m的取值可以為32、64、128、256等等,本申請不作嚴格限定。
如圖2所示為全連接層的輸入數據、以及該輸入數據對應的輸入數據序列的示意圖,輸入數據的長度為n,輸入數據序列的長度為n/m。
優選地,前述步驟102中,對轉置後的每一行權重進行二值化和位打包操作得到包含多個權重元素的權重序列,具體可通過以下步驟b1~步驟b2實現:
步驟b1、對一行權重進行二值化處理得到一行二值化權重;
步驟b2、從該行二值化權重的第一個權重開始,將每m個連續權重打包成一個權重元素得到包含多個權重元素的權重序列。
如圖3a所示為全連接層的網絡權重示意圖,網絡權重包含n行和h列,圖3b為轉置後的網絡權重示意圖,圖3c為經過二值化處理和位打包操作之後的網絡權重。
優選地,前述步驟103具體可通過以下步驟c1~步驟c2實現:
步驟c1、將每一行權重序列的每個權重元素與相應數據元素進行包含一次異或操作和bit-count操作的內積運算,以得到每個權重元素與相應數據元素的內積結果。
步驟c2、根據一行權重序列的各權重元素與相應元素的內積結果,得到輸入數據序列與該行權重序列的內積結果。
根據以下公式(1)計算得到輸入數據序列與一行權重序列的內積結果:
式(1)中,x·wi為輸入數據序列與第i行權重序列的內積結果,x為輸入數據序列,wi為第i行權重序列,n為輸入數據的數量,xj為輸入數據序列中第j個數據元素,wij為第i行權重序列中第j個權重元素。
在電腦程式代碼中,針對輸入數據序列與一行權重序列,需要進行n/m次乘法和累加運算,若採用循環語句則需要判斷n/m次,循環開銷較大。
優選地,為節省循環開銷,本發明實施例中,針對輸入數據序列與一行權重序列,為每一對需要進行卷積運算的數據元素和權重元素配置一個內積運算執行指令,即設置n/m個內積運算執行指令,直接根據該n/m個內積運算執行指令分別對n/m對數據元素和權重元素進行內積運算,無需進行循環判斷,節省循環開銷。因此,在前述步驟103中還包括以下步驟:
步驟c0、為每行權重序列的每個權重元素配置相應的一個內積運算執行指令;
此時,前述步驟c1具體實現如下:按照權重元素在一行權重序列中的先後順序,根據權重元素對應的內積運算執行指令對該權重元素與相應數據元素進行包含一次異或操作和bit-count操作的內積運算。
神經網絡的全連接層的w維一般是256的整數倍(例如alexnet第一個全連接層中w=4096,vggnet第一個全連接層中w=25088),avx提供的256位長度指令集可進一步加速二值化向量與矩陣的乘法,因此,本發明實施例,可將輸入數據和一行權重進行256位打包操作,即每256個連續的數據打包成一個avx支持的256位長度整型數據,用_mm256_xor_si256指令對兩個256位長度整型數據進行按位異或操作,再通過4次_mm_popcnt_u64指令累加得到上一步運算結果中1的總個數。
優選地,為進一步提高輸入數據序列與各行權重序列的內積運算速度,本發明實施例,將各行權重序列與輸入數據序列的內積運算分布到cpu(centralprocessingunit,中央處理器)的多個核上進行並行處理,由cpu的各個核對分配到該核上的輸入數據序列和行權重序列進行前述內積運算,並輸出內積運算的內積結果。例如,假設行權重序列總共為h個,cpu包含k個核,可以是直接將該h個行權重序列平均分配到k個核上,由該k個核分別依次對其分配得到的h/k個行權重序列與輸入數據序列進行內積運算;還可以是根據該k個核的負載量分配相應比例數量的行權重序列。本申請不做嚴格限定。
實施例二
基於前述實施例一提供的神經網絡優化方法的相同構思,本發明實施例二提供一種神經網絡優化裝置,該裝置的結構如圖4所示,包括:
數據處理單元41,用於對全連接層的輸入數據進行二值化和位打包操作得到包含多個數據元素的輸入數據序列;
權重處理單元42,用於將所述全連接層的網絡權重進行轉置,對轉置後的每一行權重進行二值化和位打包操作得到包含多個權重元素的權重序列;
內積運算單元43,用於將輸入數據序列中的數據元素分別與各行權重序列的權重元素進行內積運算,得到輸入數據序列與各行權重序列的內積結果;
結果輸出單元44,用於根據輸入數據序列與各行權重序列的內積結果得到所述全連接層的輸出結果。
優選地,所述內積運算單元43包括:
內積運算模塊,用於將每一行權重序列的每個權重元素與相應數據元素進行包含一次異或操作和bit-count操作的內積運算,以得到每個權重元素與相應數據元素的內積結果;
確定模塊,用於根據一行權重序列的各權重元素與相應元素的內積結果,得到輸入數據序列與該行權重序列的內積結果。
具體可根據前述公式(1)計算得到輸入數據序列與一行權重序列的內積結果,在此不再贅述。
優選地,為進一步節省循環開銷,所述內積運算單元43還進一步包括:
指令生成模塊,用於為每行權重序列的每個權重元素配置相應的一個內積運算執行指令;
內積運算模塊具體用於:按照權重元素在一行權重序列中的先後順序,根據權重元素對應的內積運算執行指令對該權重元素與相應數據元素進行包含一次異或操作和bit-count操作的內積運算。
優選地,所述內積運算單元43,具體用於:將各行權重序列與輸入數據序列的內積運算,分布到cpu的多個核上進行並行處理,從所述多個核中得到輸入數據序列與各行權重序列的內積結果。
優選地,所述數據處理單元41具體用於:對輸入數據進行二值化處理得到二值化輸入數據;從二值化輸入數據的第一個數據開始,將每m個連續數據打包成一個數據元素得到包含多個數據元素的輸入數據序列,所述m為32的整數倍。
優選地,所述權重處理單元42對轉置後的每一行權重進行二值化和位打包操作得到包含多個權重元素的權重序列,具體包括:對一行權重進行二值化處理得到一行二值化權重;從該行二值化權重的第一個權重開始,將每m個連續權重打包成一個權重元素得到包含多個權重元素的權重序列。
本發明技術方案,一方面,將神經網絡的全連接層的輸入數據和網絡權重進行二值化和位打包操作得到輸入數據序列和權重序列,不僅對輸入數據和網絡權重進行數據壓縮使得參與運算的數據量大大減少,而且輸入數據與網絡權重的運算由現有技術的浮點數與浮點數相乘變成了無符號整數與無符號整數之間的按位操作,提高了運算速度;另一方面,對網絡權重進行轉置之後的每一行權重處理成一行權重序列,從而使得輸入數據序列可以直接按行與網絡權重的每一行權重序列依次進行內積運算,從而加快矩陣乘法的數據讀取速度,從而進一步提高內積運算速度;再一方面,在將輸入數據序列與一行權重序列進行卷積運算時,直接根據各個數據元素的內積運算執行指令進行數據元素與相應權重元素的內積運算,無需循環判斷,節省循環開銷;最後一方面,通過cpu的多個核並行處理輸入數據序列與各行權重序列的內積運算,進一步提高輸入數據序列與各行權重序列的內積運算速度和效率。
以上是本發明的核心思想,為了使本技術領域的人員更好地理解本發明實施例中的技術方案,並使本發明實施例的上述目的、特徵和優點能夠更加明顯易懂,下面結合附圖對本發明實施例中技術方案作進一步詳細的說明。
顯然,本領域的技術人員可以對本發明進行各種改動和變型而不脫離本發明的精神和範圍。這樣,倘若本發明的這些修改和變型屬於本發明權利要求及其等同技術的範圍之內,則本發明也意圖包含這些改動和變型在內。