本發(fā)明涉及圖像處理領(lǐng)域,更具體地涉及一種基于神經(jīng)網(wǎng)絡(luò)的計(jì)算方法及裝置。
背景技術(shù):
神經(jīng)網(wǎng)絡(luò)(Neural Networks,NNs)也稱為人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks,ANNs)或連接模型(Connection Model),是一種模仿動(dòng)物神經(jīng)網(wǎng)絡(luò)行為特征,進(jìn)行分布式并行信息處理的算法數(shù)學(xué)模型。神經(jīng)網(wǎng)絡(luò)依靠系統(tǒng)的復(fù)雜程度,通過(guò)調(diào)整內(nèi)部大量計(jì)算節(jié)點(diǎn)之間相互連接的關(guān)系,從而達(dá)到處理信息的目的。
神經(jīng)網(wǎng)絡(luò)在語(yǔ)音識(shí)別、文字識(shí)別、以及圖像視頻識(shí)別等許多領(lǐng)域中已經(jīng)有了廣泛而成功的應(yīng)用。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)采用雙精度或單精度浮點(diǎn)數(shù)乘/加計(jì)算作為基本計(jì)算單元,然而,傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)的算法架構(gòu)會(huì)導(dǎo)致大計(jì)算量需求、高內(nèi)存(或顯存)占用、以及高帶寬要求等問(wèn)題,對(duì)硬件的要求較高。
技術(shù)實(shí)現(xiàn)要素:
考慮到上述問(wèn)題而提出了本發(fā)明。本發(fā)明提供了一種基于神經(jīng)網(wǎng)絡(luò)的計(jì)算方法,對(duì)硬件的要求較低。
根據(jù)本發(fā)明的第一方面,提供了一種基于神經(jīng)網(wǎng)絡(luò)的計(jì)算方法,包括:
接收原始圖像;
提取所述原始圖像的特征張量;
基于訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)對(duì)所述特征張量進(jìn)行處理,以產(chǎn)生圖像熱力圖。
示例性地,所述訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)通過(guò)如下方法訓(xùn)練得到:
對(duì)初始神經(jīng)網(wǎng)絡(luò)進(jìn)行至少一次浮點(diǎn)訓(xùn)練,并將所述浮點(diǎn)訓(xùn)練之后的神經(jīng)網(wǎng)絡(luò)的參數(shù)定點(diǎn)化;
如果所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)的參數(shù)不滿足訓(xùn)練指標(biāo),則將所述初始神經(jīng)網(wǎng)絡(luò)替換為所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)并重復(fù)執(zhí)行上述步驟;
如果所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)的參數(shù)滿足所述訓(xùn)練指標(biāo),則將所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)作為所述訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)。
示例性地,所述訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)為二值神經(jīng)網(wǎng)絡(luò),所述基于訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)對(duì)所述特征張量進(jìn)行處理包括:
所述二值神經(jīng)網(wǎng)絡(luò)中的每一個(gè)計(jì)算節(jié)點(diǎn)執(zhí)行以下操作:
對(duì)輸入數(shù)據(jù)進(jìn)行卷積操作;
將所述卷積操作的卷積輸出二值化。
示例性地,所述將所述卷積操作的卷積輸出二值化,包括:
使用非線性函數(shù)將所述卷積輸出映射為[-0.5,0.5]閉區(qū)間之內(nèi)的數(shù);
對(duì)所述映射后的數(shù)進(jìn)行舍入操作,以實(shí)現(xiàn)中間表示的二值化。
示例性地,所述對(duì)所述映射后的數(shù)進(jìn)行舍入操作包括:
使用公式Y(jié)=floor(y+1)-0.5對(duì)所述映射后的數(shù)進(jìn)行舍入操作,
其中,y表示所述映射后的數(shù),Y表示二值化后的中間表示,floor表示向下取整。
示例性地,所述對(duì)輸入數(shù)據(jù)進(jìn)行卷積操作,包括:
通過(guò)公式M=bitcount(W xor A)實(shí)現(xiàn)矩陣W與矩陣A之間的內(nèi)積操作,
其中,xor為按位異或操作,bitcount計(jì)算一個(gè)二值串中1的個(gè)數(shù)并返回,M為二值卷積的結(jié)果,W為權(quán)重矩陣,A為激活量輸入。
示例性地,所述訓(xùn)練指標(biāo)為測(cè)試集的測(cè)試函數(shù)最小化。
示例性地,所述方法由位于攝像頭內(nèi)的包括FPGA的SoC實(shí)現(xiàn)。
根據(jù)本發(fā)明的第二方面,提供了一種基于神經(jīng)網(wǎng)絡(luò)的計(jì)算裝置,包括:
接收模塊,用于接收原始圖像;
特征提取模塊,用于提取所述原始圖像的特征張量;
熱力圖產(chǎn)生模塊,用于基于已經(jīng)訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)對(duì)所述特征張量進(jìn)行處理,以產(chǎn)生圖像熱力圖。
示例性地,還包括訓(xùn)練模塊,用于:
對(duì)初始神經(jīng)網(wǎng)絡(luò)進(jìn)行至少一次浮點(diǎn)訓(xùn)練,并將所述浮點(diǎn)訓(xùn)練之后的神經(jīng)網(wǎng)絡(luò)的參數(shù)定點(diǎn)化;
如果所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)的參數(shù)不滿足訓(xùn)練指標(biāo),則將所述初始神經(jīng)網(wǎng)絡(luò)替換為所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)并重復(fù)執(zhí)行上述步驟;
如果所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)的參數(shù)滿足所述訓(xùn)練指標(biāo),則將所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)作為所述訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)。
示例性地,所述訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)為二值神經(jīng)網(wǎng)絡(luò),所述熱力圖產(chǎn)生模塊包括卷積操作子模塊和二值化子模塊,
對(duì)于所述二值神經(jīng)網(wǎng)絡(luò)中的每一個(gè)計(jì)算節(jié)點(diǎn):
所述卷積操作子模塊,用于對(duì)輸入數(shù)據(jù)進(jìn)行卷積操作;
所述二值化子模塊,用于將所述卷積操作的卷積輸出二值化。
示例性地,所述二值化子模塊包括映射子單元和舍入子單元:
所述映射子單元,用于使用非線性函數(shù)將所述卷積輸出映射為[-0.5,0.5]閉區(qū)間之內(nèi)的數(shù);
所述舍入子單元,用于對(duì)所述映射后的數(shù)進(jìn)行舍入操作,以實(shí)現(xiàn)中間表示的二值化。
示例性地,所述舍入子單元,具體用于:
使用公式Y(jié)=floor(y+1)-0.5對(duì)所述映射后的數(shù)進(jìn)行舍入操作,
其中,y表示所述映射后的數(shù),Y表示二值化后的中間表示,floor表示向下取整。
示例性地,所述卷積操作子模塊,具體用于:
通過(guò)公式M=bitcount(W xor A)實(shí)現(xiàn)矩陣W與矩陣A之間的內(nèi)積操作,
其中,xor為按位異或操作,bitcount計(jì)算一個(gè)二值串中1的個(gè)數(shù)并返回,M為二值卷積的結(jié)果,W為權(quán)重矩陣,A為激活量輸入。
示例性地,所述訓(xùn)練指標(biāo)為測(cè)試集的測(cè)試函數(shù)最小化。
示例性地,所述裝置為位于攝像頭內(nèi)的包括FPGA的SoC。
第二方面所述的該裝置能夠用于實(shí)現(xiàn)前述第一方面的基于神經(jīng)網(wǎng)絡(luò)的計(jì)算方法。
根據(jù)本發(fā)明的第三方面,提供了一種計(jì)算機(jī)芯片,該計(jì)算機(jī)芯片包括處理器和存儲(chǔ)器。所述存儲(chǔ)器存儲(chǔ)有指令代碼,所述處理器用于執(zhí)行所述指令代碼,且當(dāng)所述處理器執(zhí)行指令代碼時(shí),能夠?qū)崿F(xiàn)前述第一方面所述的基于神經(jīng)網(wǎng)絡(luò)的計(jì)算方法。
本發(fā)明實(shí)施例的采用定點(diǎn)化方法實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的計(jì)算的方法,由于采用了定點(diǎn)計(jì)算,計(jì)算量小,占用資源少,從而對(duì)硬件的要求較低,可以在FPGA上運(yùn)行。
附圖說(shuō)明
通過(guò)結(jié)合附圖對(duì)本發(fā)明實(shí)施例進(jìn)行更詳細(xì)的描述,本發(fā)明的上述以及其它目的、特征和優(yōu)勢(shì)將變得更加明顯。附圖用來(lái)提供對(duì)本發(fā)明實(shí)施例的進(jìn)一步理解,并且構(gòu)成說(shuō)明書的一部分,與本發(fā)明實(shí)施例一起用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中,相同的參考標(biāo)號(hào)通常代表相同部件或步驟。
圖1是本發(fā)明實(shí)施例的電子設(shè)備的一個(gè)示意性框圖;
圖2是本發(fā)明實(shí)施例的基于神經(jīng)網(wǎng)絡(luò)的計(jì)算方法的一個(gè)示意性流程圖;
圖3是本發(fā)明實(shí)施例的得到訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)的方法的一個(gè)示意性流程圖;
圖4是本發(fā)明實(shí)施例的FPGA與其他裝置的連接關(guān)系的一個(gè)示意圖;
圖5是本發(fā)明實(shí)施例的基于神經(jīng)網(wǎng)絡(luò)的計(jì)算裝置的一個(gè)示意性框圖;
圖6是本發(fā)明實(shí)施例的基于神經(jīng)網(wǎng)絡(luò)的計(jì)算裝置的另一個(gè)示意性框圖。
具體實(shí)施方式
為了使得本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更為明顯,下面將參照附圖詳細(xì)描述根據(jù)本發(fā)明的示例實(shí)施例。顯然,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是本發(fā)明的全部實(shí)施例,應(yīng)理解,本發(fā)明不受這里描述的示例實(shí)施例的限制。基于本發(fā)明中描述的本發(fā)明實(shí)施例,本領(lǐng)域技術(shù)人員在沒(méi)有付出創(chuàng)造性勞動(dòng)的情況下所得到的所有其它實(shí)施例都應(yīng)落入本發(fā)明的保護(hù)范圍之內(nèi)。
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)的一般算法架構(gòu)如下:(1)將輸入圖片提取成張量的形式,傳入已經(jīng)訓(xùn)練好的浮點(diǎn)計(jì)算神經(jīng)網(wǎng)絡(luò)。(2)浮點(diǎn)計(jì)算神經(jīng)網(wǎng)絡(luò)中的每一個(gè)計(jì)算節(jié)點(diǎn),通過(guò)以浮點(diǎn)乘加為基礎(chǔ)單元的卷積操作,并將浮點(diǎn)計(jì)算結(jié)果傳送至下一層計(jì)算節(jié)點(diǎn)。(3)經(jīng)過(guò)多層的計(jì)算節(jié)點(diǎn)運(yùn)算后,最終神經(jīng)網(wǎng)絡(luò)的輸出層產(chǎn)生圖像分割熱力圖(heatmap),然后在其基礎(chǔ)上對(duì)原圖進(jìn)行相關(guān)標(biāo)注。然而,這樣的架構(gòu)往往導(dǎo)致大計(jì)算量需求、高內(nèi)存(或顯存)占用、以及高帶寬要求等問(wèn)題,從而對(duì)硬件的要求較高。由于現(xiàn)場(chǎng)可編程門陣列(Field-Programmable Gate Array,F(xiàn)PGA)平臺(tái)的計(jì)算、存儲(chǔ)能力和帶寬都非常有限,因此傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)很難在FPGA平臺(tái)上運(yùn)行。
本發(fā)明實(shí)施例提出了一種采用定點(diǎn)化方法實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的計(jì)算的方法,由于采用了定點(diǎn)計(jì)算,計(jì)算量小,占用資源少,從而對(duì)硬件的要求較低,可以在攝像頭內(nèi)的包括FPGA的片上系統(tǒng)(system-on-a-chip,SoC)上運(yùn)行。
本發(fā)明實(shí)施例可以應(yīng)用于電子設(shè)備,圖1所示為本發(fā)明實(shí)施例的電子設(shè)備的一個(gè)示意性框圖。圖1所示的電子設(shè)備10包括一個(gè)或多個(gè)處理器102、一個(gè)或多個(gè)存儲(chǔ)裝置104、輸入裝置106、輸出裝置108、圖像傳感器110以及一個(gè)或多個(gè)非圖像傳感器114,這些組件通過(guò)總線系統(tǒng)112和/或其它形式互連。應(yīng)當(dāng)注意,圖1所示的電子設(shè)備10的組件和結(jié)構(gòu)只是示例性的,而非限制性的,根據(jù)需要,所述電子設(shè)備也可以具有其他組件和結(jié)構(gòu)。
所述處理器102可以包括中央處理單元(Central Processing Unit,CPU)1021和/或圖像處理單元(Graphics Processing Unit,GPU)1022,或者包括具有數(shù)據(jù)處理能力和/或指令執(zhí)行能力的其它形式的處理單元,并且可以控制所述電子設(shè)備10中的其它組件以執(zhí)行期望的功能。
所述存儲(chǔ)裝置104可以包括一個(gè)或多個(gè)計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品可以包括各種形式的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),例如易失性存儲(chǔ)器1041和/或非易失性存儲(chǔ)器1042。所述易失性存儲(chǔ)器1041例如可以包括隨機(jī)存取存儲(chǔ)器(Random Access Memory,RAM)和/或高速緩沖存儲(chǔ)器(cache)等。所述非易失性存儲(chǔ)器1042例如可以包括只讀存儲(chǔ)器(Read-Only Memory,ROM)、硬盤、閃存等。在所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上可以存儲(chǔ)一個(gè)或多個(gè)計(jì)算機(jī)程序指令,處理器102可以運(yùn)行所述程序指令,以實(shí)現(xiàn)各種期望的功能。在所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中還可以存儲(chǔ)各種應(yīng)用程序和各種數(shù)據(jù),例如所述應(yīng)用程序使用和/或產(chǎn)生的各種數(shù)據(jù)等。
所述輸入裝置106可以是用戶用來(lái)輸入指令的裝置,并且可以包括鍵盤、鼠標(biāo)、麥克風(fēng)和觸摸屏等中的一個(gè)或多個(gè)。
所述輸出裝置108可以向外部(例如用戶)輸出各種信息(例如圖像或聲音),并且可以包括顯示器、揚(yáng)聲器等中的一個(gè)或多個(gè)。
所述圖像傳感器110可以拍攝用戶期望的圖像(例如照片、視頻等),并且將所拍攝的圖像存儲(chǔ)在所述存儲(chǔ)裝置104中以供其它組件使用。
當(dāng)注意,圖1所示的電子設(shè)備10的組件和結(jié)構(gòu)只是示例性的,盡管圖1示出的電子設(shè)備20包括多個(gè)不同的裝置,但是根據(jù)需要,其中的一些裝置可以不是必須的,其中的一些裝置的數(shù)量可以更多等等,本發(fā)明對(duì)此不限定。
圖2是本發(fā)明實(shí)施例的基于神經(jīng)網(wǎng)絡(luò)的計(jì)算方法的一個(gè)示意性流程圖,圖2所示的方法包括:
S101,接收原始圖像。
具體地,可以接收由攝像頭所采集的原始圖像。示例性地,該原始圖像也可以稱為輸入圖像。
S102,提取所述原始圖像的特征張量。
具體地,可以將原始圖像提取成張量的形式從而得到原始圖像的特征張量。
S103,基于訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)對(duì)所述特征張量進(jìn)行處理,以產(chǎn)生圖像熱力圖。
示例性地,在S103中,訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)中的每一個(gè)計(jì)算節(jié)點(diǎn)執(zhí)行:(a)對(duì)輸入數(shù)據(jù)進(jìn)行卷積操作;(b)將所述卷積操作的卷積輸出定點(diǎn)化。其中,在(a)中進(jìn)行的卷積操作可以為一次或多次,本發(fā)明對(duì)此不限定。
示例性地,訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)可以為二值神經(jīng)網(wǎng)絡(luò)。
那么,在S103中,二值神經(jīng)網(wǎng)絡(luò)中的每一個(gè)計(jì)算節(jié)點(diǎn)執(zhí)行以下操作:(a1)對(duì)輸入數(shù)據(jù)進(jìn)行卷積操作;(b1)將所述卷積操作的卷積輸出二值化。其中,在(a1)中進(jìn)行的卷積操作可以為一次或多次,本發(fā)明對(duì)此不限定。
由于卷積可以被視為權(quán)重矩陣W的乘法,因此可以采用bitcount函數(shù)用位運(yùn)算進(jìn)行矩陣乘中最耗時(shí)的內(nèi)積操作。也就是說(shuō),上述(a1)可以包括通過(guò)公式M=bitcount(W xor A)實(shí)現(xiàn)矩陣W與矩陣A之間的內(nèi)積操作。
示例性地,上述(a1)可以包括二值卷積操作,所述二值卷積操作通過(guò)公式M=bitcount(W xor A)實(shí)現(xiàn)矩陣W與矩陣A之間的內(nèi)積操作。
其中,bitcount函數(shù)用于計(jì)算一個(gè)二值串中1的個(gè)數(shù)并返回。xor表示異或操作,即xor為按位異或操作。M為二值卷積的結(jié)果,W為權(quán)重矩陣,A為激活量(activation)輸入??梢?,該公式M=bitcount(W xor A)與內(nèi)積等價(jià)。
示例性地,上述(b1)可以包括:使用非線性函數(shù)將所述卷積輸出映射為[-0.5,0.5]閉區(qū)間之內(nèi)的數(shù);對(duì)所述映射后的數(shù)進(jìn)行舍入操作,以實(shí)現(xiàn)中間表示的二值化。
非線性函數(shù)可以為y=Tanh(x)×0.5。其中,x表示卷積輸出,y表示映射后的數(shù)??衫斫?,非線性函數(shù)也可以為其他的函數(shù)形式,本發(fā)明對(duì)此不限定。
示例性地,所述對(duì)所述映射后的數(shù)進(jìn)行舍入操作可以包括:使用公式Y(jié)=floor(y+1)-0.5對(duì)所述映射后的數(shù)進(jìn)行舍入操作。其中,y表示所述映射后的數(shù),Y表示二值化后的中間表示,floor表示向下取整函數(shù)。floor有時(shí)候也寫做Floor,其功能是“向下取整”,或者說(shuō)“向下舍入”,floor(y)表示取不大于y的最大整數(shù)。
應(yīng)理解,本發(fā)明實(shí)施例中,小寫字母表示的x和y一般為浮點(diǎn)數(shù),大寫字母表示的Y為定點(diǎn)數(shù),具體地,Y=0或1。
由此可見,上述的(a1)操作可以通過(guò)公式M=bitcount(W xor A)實(shí)現(xiàn)矩陣W與矩陣A之間的內(nèi)積操作;上述的(b1)操作可以使用非線性函數(shù)將卷積輸出映射為[-0.5,0.5]閉區(qū)間之內(nèi)的數(shù)并對(duì)映射后的數(shù)進(jìn)行舍入操作。
在二值神經(jīng)網(wǎng)絡(luò)中,參數(shù)僅取值0或1,且中間表示也僅取值0或1。二值網(wǎng)絡(luò)是對(duì)原有網(wǎng)絡(luò)的近似,其所有操作在計(jì)算機(jī)中可快速實(shí)現(xiàn),從而能減少所占用的存儲(chǔ)空間,降低對(duì)計(jì)算資源的需求。
示例性地,S103中的訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)可以是通過(guò)如下方法訓(xùn)練得到的:
對(duì)初始神經(jīng)網(wǎng)絡(luò)進(jìn)行至少一次浮點(diǎn)訓(xùn)練,并將所述浮點(diǎn)訓(xùn)練之后的神經(jīng)網(wǎng)絡(luò)的參數(shù)定點(diǎn)化;
如果所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)的參數(shù)不滿足訓(xùn)練指標(biāo),則將所述初始神經(jīng)網(wǎng)絡(luò)替換為所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)并重復(fù)執(zhí)行上述步驟;
如果所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)的參數(shù)滿足所述訓(xùn)練指標(biāo),則將所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)作為所述訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)。
在本發(fā)明各實(shí)施例中,神經(jīng)網(wǎng)絡(luò)的參數(shù)可以包括權(quán)重W、定點(diǎn)化判定閾值、卷積結(jié)果的偏移量等參數(shù),具體根據(jù)實(shí)際情況確定,在此并不進(jìn)行限定。
具體地,該過(guò)程可以如圖3所示,包括:
S201,對(duì)初始神經(jīng)網(wǎng)絡(luò)進(jìn)行至少一次浮點(diǎn)訓(xùn)練。
S202,將所述浮點(diǎn)訓(xùn)練之后的神經(jīng)網(wǎng)絡(luò)的參數(shù)定點(diǎn)化。
S203,判斷所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)的參數(shù)是否滿足訓(xùn)練指標(biāo)。
如果S203判斷的結(jié)果為是,則執(zhí)行S205;如果S203判斷的結(jié)果為否,則執(zhí)行S204。
S204,將初始神經(jīng)網(wǎng)絡(luò)替換為定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)。
具體地,在S204中,將S202得到的定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)作為S201中的初始神經(jīng)網(wǎng)絡(luò),然后重復(fù)執(zhí)行S201和S202。
S205,將所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)作為所述訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)。
這樣,通過(guò)如圖3所示的訓(xùn)練過(guò)程,便可以得到訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)。
示例性地,其中的訓(xùn)練指標(biāo)為測(cè)試集的測(cè)試函數(shù)最小化。
本發(fā)明實(shí)施例中,浮點(diǎn)訓(xùn)練的過(guò)程可以參見普通神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程,即本發(fā)明實(shí)施例中的浮點(diǎn)訓(xùn)練過(guò)程與普通神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程類似。具體地,可以在測(cè)試集的基礎(chǔ)上構(gòu)建訓(xùn)練集,基于lost函數(shù),通過(guò)最速梯度方法或共軛梯度方法等,確定使得測(cè)試集最小化的神經(jīng)網(wǎng)絡(luò)參數(shù)。
作為一個(gè)實(shí)施例,訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)為二值神經(jīng)網(wǎng)絡(luò),那么該訓(xùn)練好的二值神經(jīng)網(wǎng)絡(luò)可以通過(guò)以下方法進(jìn)行訓(xùn)練得到:
對(duì)初始神經(jīng)網(wǎng)絡(luò)進(jìn)行至少一次浮點(diǎn)訓(xùn)練,并將所述浮點(diǎn)訓(xùn)練之后的神經(jīng)網(wǎng)絡(luò)的參數(shù)二值化;
如果所述二值化后的神經(jīng)網(wǎng)絡(luò)的參數(shù)不滿足訓(xùn)練指標(biāo),則將所述初始神經(jīng)網(wǎng)絡(luò)替換為所述二值化后的神經(jīng)網(wǎng)絡(luò)并重復(fù)執(zhí)行上述步驟;
如果所述二值化后的神經(jīng)網(wǎng)絡(luò)的參數(shù)滿足所述訓(xùn)練指標(biāo),則將所述二值化后的神經(jīng)網(wǎng)絡(luò)作為所述訓(xùn)練好的二值神經(jīng)網(wǎng)絡(luò)。
也就是說(shuō),在對(duì)二值神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中,可以包括:在經(jīng)過(guò)一輪訓(xùn)練之后,將訓(xùn)練之后的參數(shù)進(jìn)行二值化,然后再進(jìn)行下一輪訓(xùn)練。其中一輪訓(xùn)練包括至少一次浮點(diǎn)訓(xùn)練。這樣,可以將訓(xùn)練過(guò)程的中間結(jié)果實(shí)現(xiàn)二值化,從而能夠減小所占用的存儲(chǔ)空間。
示例性地,訓(xùn)練過(guò)程中可以使用獨(dú)熱編碼(one-hot encoding)的真實(shí)值。例如訓(xùn)練任務(wù)為5分類,若某一個(gè)像素屬于第四類,則可將該像素的分類在五個(gè)頻道(channel)上表示為00010。
另外,可以將有K個(gè)值的目標(biāo)熱力圖拆分為K個(gè)二值的熱力圖。其中,K個(gè)值的目標(biāo)熱力圖是預(yù)先進(jìn)行人工標(biāo)識(shí)的熱力圖,且人工標(biāo)注的K個(gè)值可以為浮點(diǎn)數(shù)。
示例性地,可以使用非線性函數(shù)將上一層卷積層的輸出映射為[-0.5,0.5]閉區(qū)間之內(nèi)的數(shù);對(duì)所述映射后的數(shù)進(jìn)行舍入操作,以實(shí)現(xiàn)中間表示的二值化。
非線性函數(shù)可以為y=Tanh(x)×0.5。其中,x表示上一層卷積層的輸出,y表示映射后的數(shù)。可理解,非線性函數(shù)也可以為其他的函數(shù)形式,本發(fā)明對(duì)此不限定。
所述對(duì)所述映射后的數(shù)進(jìn)行舍入操作可以包括:使用公式Y(jié)=floor(y+1)-0.5對(duì)所述映射后的數(shù)進(jìn)行舍入操作。其中,y表示所述映射后的數(shù),Y表示二值化后的中間表示,floor表示向下取整。
由于卷積可以被視為矩陣W的乘法,因此可以采用bitcount函數(shù)用位運(yùn)算進(jìn)行矩陣乘中最耗時(shí)的內(nèi)積操作。示例性地,可以通過(guò)公式M=bitcount(W xor A)實(shí)現(xiàn)矩陣W與矩陣A之間的內(nèi)積操作。其中,xor為按位異或操作,bitcount計(jì)算一個(gè)二值串中1的個(gè)數(shù)并返回,M為二值卷積的結(jié)果,W為權(quán)重矩陣,A為激活量輸入。
可理解,圖3所示的訓(xùn)練的方法可以是在S101之前執(zhí)行的。另外,可選地,在S103之后,還可以包括:利用所述圖像熱力圖對(duì)所述原始圖像進(jìn)行標(biāo)注。舉例來(lái)說(shuō),可以對(duì)所述原始圖像進(jìn)行二值標(biāo)注。例如,可以根據(jù)S103得到的圖像熱力圖,將原始圖像中的活體區(qū)域顯示為1,其他非活體區(qū)域顯示為0。
相比于之前最耗時(shí)的32位浮點(diǎn)卷積操作,本發(fā)明實(shí)施例的方法只在二值中間表示和二值參數(shù)間進(jìn)行,理論上來(lái)講,本發(fā)明實(shí)施例的方法可以獲得32倍運(yùn)算速度的提升,并能節(jié)省32倍的中間表示的存儲(chǔ)空間。
示例性地,本發(fā)明實(shí)施例的方法可以由位于攝像頭內(nèi)的包括FPGA的片上系統(tǒng)(System-on-a-chip,SoC)實(shí)現(xiàn)。具體地,本發(fā)明實(shí)施例的采用定點(diǎn)化方法實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的計(jì)算的方法,由于采用了二值計(jì)算,計(jì)算量小,占用資源少,從而對(duì)硬件的要求較低,因此可以在FPGA上運(yùn)行。攝像頭所采集的信息可以直接輸入到FPGA而非CPU,將二值神經(jīng)網(wǎng)絡(luò)運(yùn)行在該FPGA上,由FPGA與CPU進(jìn)行交互,這樣可以提升圖像處理速度。與直接用CPU處理圖像相比,性能有數(shù)倍的提升。
如圖4所示,F(xiàn)PGA可以從攝像頭獲取輸入圖像,并基于二值神經(jīng)網(wǎng)絡(luò)對(duì)該輸入圖像進(jìn)行處理。之后,F(xiàn)PGA可以將處理結(jié)果進(jìn)行輸出,或者可以將處理結(jié)果存儲(chǔ)在雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Double Data Rate,DDR)中,或者可以與CPU進(jìn)行通信。
本發(fā)明實(shí)施例中,由于可以將中間結(jié)果實(shí)現(xiàn)二值化,因此占用較小的存儲(chǔ)空間,可以允許FPGA與DDR或者FPGA與CPU間的高速通信。
圖5是本發(fā)明實(shí)施例的基于神經(jīng)網(wǎng)絡(luò)的計(jì)算裝置的一個(gè)示意性框圖。圖5所示的裝置50包括接收模塊501、特征提取模塊502和熱力圖產(chǎn)生模塊503。
接收模塊501,用于接收原始圖像;
特征提取模塊502,用于提取所述原始圖像的特征張量;
熱力圖產(chǎn)生模塊503,用于基于已經(jīng)訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)對(duì)所述特征張量進(jìn)行處理,以產(chǎn)生圖像熱力圖。
示例性地,如圖6所示,還包括訓(xùn)練模塊504,用于:
對(duì)初始神經(jīng)網(wǎng)絡(luò)進(jìn)行至少一次浮點(diǎn)訓(xùn)練,并將所述浮點(diǎn)訓(xùn)練之后的神經(jīng)網(wǎng)絡(luò)的參數(shù)定點(diǎn)化;
如果所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)的參數(shù)不滿足訓(xùn)練指標(biāo),則將所述初始神經(jīng)網(wǎng)絡(luò)替換為所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)并重復(fù)執(zhí)行上述步驟;
如果所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)的參數(shù)滿足所述訓(xùn)練指標(biāo),則將所述定點(diǎn)化后的神經(jīng)網(wǎng)絡(luò)作為所述訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)。
示例性地,所述訓(xùn)練好的定點(diǎn)神經(jīng)網(wǎng)絡(luò)為二值神經(jīng)網(wǎng)絡(luò)。如圖6所示,所述熱力圖產(chǎn)生模塊503包括卷積操作子模塊5031和二值化子模塊5032,
對(duì)于所述二值神經(jīng)網(wǎng)絡(luò)中的每一個(gè)計(jì)算節(jié)點(diǎn):
所述卷積操作子模塊5031,用于對(duì)輸入數(shù)據(jù)進(jìn)行卷積操作;
所述二值化子模塊5032,用于將所述卷積操作的卷積輸出二值化。
示例性地,所述二值化子模塊5032包括映射子單元和舍入子單元。所述映射子單元,用于使用非線性函數(shù)將所述卷積輸出映射為[-0.5,0.5]閉區(qū)間之內(nèi)的數(shù)。所述舍入子單元,用于對(duì)所述映射后的數(shù)進(jìn)行舍入操作,以實(shí)現(xiàn)中間表示的二值化。
示例性地,所述舍入子單元,具體用于:使用公式Y(jié)=floor(y+1)-0.5對(duì)所述映射后的數(shù)進(jìn)行舍入操作。其中,y表示所述映射后的數(shù),Y表示二值化后的中間表示,floor表示向下取整。
示例性地,所述卷積操作子模塊5031,具體用于:通過(guò)公式M=bitcount(W xor A)實(shí)現(xiàn)矩陣W與矩陣A之間的內(nèi)積操作。其中,xor為按位異或操作,bitcount計(jì)算一個(gè)二值串中1的個(gè)數(shù)并返回,M為二值卷積的結(jié)果,W為權(quán)重矩陣,A為激活量輸入。
示例性地,所述訓(xùn)練指標(biāo)為測(cè)試集的測(cè)試函數(shù)最小化。
示例性地,所述裝置為位于攝像頭內(nèi)的包括FPGA的SoC。
圖5和圖6所示的裝置50能夠用于實(shí)現(xiàn)前述圖2和圖3所示的基于神經(jīng)網(wǎng)絡(luò)的計(jì)算方法。
另外,本發(fā)明實(shí)施例還提供了另一種基于神經(jīng)網(wǎng)絡(luò)的計(jì)算裝置,該裝置可以包括處理器和存儲(chǔ)器,其中,存儲(chǔ)器用于存儲(chǔ)指令代碼,處理器執(zhí)行該指令代碼時(shí),可以實(shí)現(xiàn)前述圖2和圖3所示的基于神經(jīng)網(wǎng)絡(luò)的計(jì)算方法。
另外,本發(fā)明實(shí)施例還提供了一種電子設(shè)備,該電子設(shè)備可以包括圖5或圖6所示的裝置50。
本發(fā)明實(shí)施例的采用定點(diǎn)化方法實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的計(jì)算的方法,由于采用了定點(diǎn)計(jì)算,計(jì)算量小,占用資源少,從而對(duì)硬件的要求較低,可以在FPGA上運(yùn)行。
盡管這里已經(jīng)參考附圖描述了示例實(shí)施例,應(yīng)理解上述示例實(shí)施例僅僅是示例性的,并且不意圖將本發(fā)明的范圍限制于此。本領(lǐng)域普通技術(shù)人員可以在其中進(jìn)行各種改變和修改,而不偏離本發(fā)明的范圍和精神。所有這些改變和修改意在被包括在所附權(quán)利要求所要求的本發(fā)明的范圍之內(nèi)。
本領(lǐng)域普通技術(shù)人員可以意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來(lái)實(shí)現(xiàn)。這些功能究竟以硬件還是軟件方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的設(shè)備和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的設(shè)備實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)設(shè)備,或一些特征可以忽略,或不執(zhí)行。
在此處所提供的說(shuō)明書中,說(shuō)明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒(méi)有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本發(fā)明并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該本發(fā)明的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如相應(yīng)的權(quán)利要求書所反映的那樣,其發(fā)明點(diǎn)在于可以用少于某個(gè)公開的單個(gè)實(shí)施例的所有特征的特征來(lái)解決相應(yīng)的技術(shù)問(wèn)題。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域的技術(shù)人員可以理解,除了特征之間相互排斥之外,可以采用任何組合對(duì)本說(shuō)明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過(guò)程或單元進(jìn)行組合。除非另外明確陳述,本說(shuō)明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的物品分析設(shè)備中的一些模塊的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過(guò)同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
以上所述,僅為本發(fā)明的具體實(shí)施方式或?qū)唧w實(shí)施方式的說(shuō)明,本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。