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