本發(fā)明涉及深度學(xué)習(xí)模型壓縮領(lǐng)域,特別是面向嵌入式系統(tǒng)的深度卷積神經(jīng)網(wǎng)絡(luò)的定點(diǎn)化領(lǐng)域。
背景技術(shù):
隨著人工智能的快速發(fā)展,以深度學(xué)習(xí)為主導(dǎo)的算法所設(shè)計(jì)的應(yīng)用已經(jīng)越來(lái)愈多的出現(xiàn)在人們的生活,工作和娛樂(lè)中。然而深度神經(jīng)網(wǎng)絡(luò)往往由其十幾甚至上百的卷積層構(gòu)成,計(jì)算過(guò)程中產(chǎn)生的特征映射需要占據(jù)大量的存儲(chǔ)空間。這意味著對(duì)于嵌入式應(yīng)用對(duì)導(dǎo)致產(chǎn)品面積大大增加。所以,研究深度卷積神經(jīng)網(wǎng)絡(luò)的定點(diǎn)壓縮問(wèn)題,對(duì)于減小特征映射的存儲(chǔ)開銷,提高深度學(xué)習(xí)的實(shí)用價(jià)值有著非常非常重要的意義。
目前的深度卷積神經(jīng)網(wǎng)絡(luò)中的特征映射定點(diǎn)量化中主要是通過(guò)層間規(guī)則或者非規(guī)則量化方法,以減少特征映射的存儲(chǔ)開銷。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的:本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)深度卷積神經(jīng)網(wǎng)絡(luò)中特征映射存儲(chǔ)開銷過(guò)大的問(wèn)題,提供一種基于深度卷積神經(jīng)網(wǎng)絡(luò)的層內(nèi)非均勻的等間隔定點(diǎn)量化方法,從而在保持模型精度的情況下使得存儲(chǔ)開銷得以大大減少。
為了解決上述技術(shù)問(wèn)題,本發(fā)明公開了一種基于深度卷積神經(jīng)網(wǎng)絡(luò)的層內(nèi)非均勻的等間隔定點(diǎn)量化方法,包括以下步驟:
步驟一,選取部分深度卷積神經(jīng)網(wǎng)絡(luò)的能夠正確識(shí)別的圖像,并提取識(shí)別過(guò)程中產(chǎn)生的特征映射;
步驟二,對(duì)卷積神經(jīng)網(wǎng)絡(luò)中的特征映射進(jìn)行層間非規(guī)則量化,在保持模型精度情況下,確定每一層卷積網(wǎng)絡(luò)的最大量化位數(shù);
步驟三,對(duì)于模型中的每一卷積層,在最大量化位數(shù)能表示的范圍內(nèi),以一定間隔選取定點(diǎn)值,并用定點(diǎn)值代表特征映射中的值,并以索引的形式進(jìn)行保存;
步驟四,利用神經(jīng)網(wǎng)絡(luò)模型微調(diào)方法(Fine Tuning Method)對(duì)模型進(jìn)行微調(diào),消除量化帶來(lái)的誤差。
本發(fā)明中,優(yōu)選地,所述步驟一包括以下步驟:
步驟(11),對(duì)已有深度卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行前向測(cè)試,由于正確樣本的特征映射的分布更具有代表性,故選取其中能夠正確識(shí)別的圖像;
步驟(12),提取正確樣本的特征映射。
本發(fā)明中,優(yōu)選地,所述步驟二包括以下步驟:
步驟(21),在滿足精度的前提下,通過(guò)將原本為全精度浮點(diǎn)數(shù)的特征映射改用固 定位數(shù)的定點(diǎn)數(shù)表示,如果發(fā)生超過(guò)定點(diǎn)數(shù)表達(dá)范圍的數(shù),則在二進(jìn)制下將超過(guò)規(guī)定位數(shù)的比特位截?cái)?,?duì)深度卷積神經(jīng)網(wǎng)絡(luò)所有卷積層進(jìn)行統(tǒng)一量化位數(shù)的規(guī)則量化;
步驟(22),在不大于規(guī)則量化所確定的量化位數(shù)的前提下,通過(guò)層間非規(guī)則量化確定每一層卷積神經(jīng)網(wǎng)絡(luò)所滿足的最大量化位數(shù),以節(jié)省更多存儲(chǔ)空間;
本發(fā)明中,優(yōu)選地,所述步驟三包括以下步驟:
步驟(31),確定最大能容忍的精度損失,如果量化帶來(lái)的精度損失超過(guò)此閾值,則提高量化位數(shù);
步驟(32),將0和每層卷積層的最大量化位數(shù)能達(dá)到的最大值分別設(shè)為定點(diǎn)值的區(qū)間的起點(diǎn)和終點(diǎn);
步驟(33),在確定的區(qū)間內(nèi)以等間隔選取一定數(shù)量的定點(diǎn)值,并確保定點(diǎn)值的數(shù)量小于最大量化位數(shù)可以表示的數(shù)量;
步驟(34),將選取的定點(diǎn)值從小到大對(duì)應(yīng)以相應(yīng)的索引;
步驟(35),按向下取值的原則,將特征映射中的所有值分別替換為離其最近并小于自己的定點(diǎn)值并保證在小于能同人的最大精度損失的情況下盡可能減小定點(diǎn)值的數(shù)量;
步驟(36),表示索引所用的位數(shù)小于表示定點(diǎn)值所用的位數(shù),存儲(chǔ)時(shí)采用定點(diǎn)值對(duì)應(yīng)的索引進(jìn)行存儲(chǔ)可以在層間非規(guī)則量化的基礎(chǔ)上進(jìn)一步縮減存儲(chǔ)空間;
本發(fā)明中,優(yōu)選地,所述步驟四包括以下步驟:
步驟(41),在滿足定點(diǎn)約束的條件下,對(duì)模型進(jìn)行再訓(xùn)練對(duì)模型進(jìn)行微調(diào),消除誤差。
本發(fā)明的原理是通過(guò)提取識(shí)別過(guò)程中產(chǎn)生的特征映射。其次,對(duì)卷積神經(jīng)網(wǎng)絡(luò)中的特征映射進(jìn)行層間非規(guī)則等間隔量化。然后對(duì)于模型中的每一卷積層,在最大量化位數(shù)能表示的范圍內(nèi),以一定間隔選取定點(diǎn)值,并用定點(diǎn)值代表特征映射中的值,并以索引的形式進(jìn)行保存。最后,利用神經(jīng)網(wǎng)絡(luò)模型微調(diào)方法對(duì)模型進(jìn)行微調(diào),消除量化帶來(lái)的誤差。
有益效果:本發(fā)明通過(guò)軟件和硬件結(jié)合方法進(jìn)行模型壓縮,在對(duì)深度卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行層內(nèi)非均勻定點(diǎn)化后,即可大幅度減少其存儲(chǔ)開銷。本發(fā)明在深度神經(jīng)網(wǎng)絡(luò)在嵌入式設(shè)備中有廣泛的應(yīng)用前景。
附圖說(shuō)明
下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明做更進(jìn)一步的具體說(shuō)明,本發(fā)明的上述和/或其他方面的優(yōu)點(diǎn)將會(huì)變得更加清楚。
圖1是本發(fā)明定點(diǎn)值和索引的電路轉(zhuǎn)換單元。
圖2是本發(fā)明方法簡(jiǎn)化流程圖。
具體實(shí)施方式:
本發(fā)明,核心思路是利用深度卷積網(wǎng)絡(luò)的特征映射的冗余性,利用層內(nèi)非均勻等間隔定點(diǎn)量化方法對(duì)特征映射進(jìn)行定點(diǎn)化,通過(guò)存儲(chǔ)索引值來(lái)降低存儲(chǔ)需求并使用重訓(xùn)練對(duì)模型微調(diào)以彌補(bǔ)定點(diǎn)化帶來(lái)的誤差。
本發(fā)明公開了一種基于深度卷積神經(jīng)網(wǎng)絡(luò)的層內(nèi)非均勻的等間隔定點(diǎn)量化方法,包括以下步驟:
步驟一,對(duì)已有的深度卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行前向測(cè)試,由于正確樣本的特征映射往往更能代表絕大多數(shù)樣本的特征映射的分布,所以選取能夠正確識(shí)別的樣本。并提取識(shí)別過(guò)程中產(chǎn)生的特征映射。
步驟二,對(duì)卷積神經(jīng)網(wǎng)絡(luò)中的特征映射進(jìn)行層間非規(guī)則定點(diǎn)量化,在保持模型精度情況下,確定每一層卷積網(wǎng)絡(luò)的最大量化位數(shù)。首先對(duì)卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行規(guī)則定點(diǎn)量化,在規(guī)則量化基礎(chǔ)上進(jìn)行層間非規(guī)則量化,確定每一卷積層自己的對(duì)打量化位數(shù);
所述步驟二包括以下步驟:
步驟21,首先對(duì)卷積神經(jīng)網(wǎng)絡(luò)提取出來(lái)的特征映射進(jìn)行規(guī)則定點(diǎn)量化。定點(diǎn)量化是基于二進(jìn)制的方法,所以定點(diǎn)量化的位數(shù)則代表這使用的二進(jìn)制比特?cái)?shù)。不妨假設(shè)定點(diǎn)量化所采用的位數(shù)為b,則定點(diǎn)量化所表示的范圍為:
Range=step*2b, (1)
其中,Range為定點(diǎn)數(shù)能表示的范圍,step是最低位所能達(dá)到的最高精度。不同的精度和定點(diǎn)位數(shù)會(huì)對(duì)定點(diǎn)數(shù)范圍產(chǎn)生相應(yīng)的影響。由于原本的特征映射是由全精度浮點(diǎn)數(shù)表示,故其值的范圍很可能超過(guò)了定點(diǎn)數(shù)的表示范圍,如果超過(guò)定點(diǎn)數(shù)的表示范圍,則需要將其轉(zhuǎn)換為二進(jìn)制數(shù),并將超過(guò)定點(diǎn)數(shù)所能達(dá)到的最高精度的部分截?cái)唷3艘酝膺€要將超過(guò)定點(diǎn)數(shù)最大表示范圍的位數(shù)同樣截?cái)?。由于原本的全精度表示的值損失了部分精度,會(huì)造成一定的精度損失。所以需要在定點(diǎn)位數(shù)和模型精度進(jìn)行權(quán)衡和取舍。
步驟22,規(guī)則定點(diǎn)量化是基于整個(gè)卷積神經(jīng)網(wǎng)絡(luò)的量化策略。其位數(shù)和精度的選擇取決于對(duì)精度和范圍需求最高的卷積層的特征映射。然而有許多卷積層的特征映射并不需要非常高的精度和范圍,所以規(guī)則量化的結(jié)果對(duì)于許多卷積層的特征映射存在冗余。所以需要利用非規(guī)則量化對(duì)每一層采取不同的量化方案。規(guī)則量化的結(jié)果確定了非規(guī)則量化定點(diǎn)位數(shù)的上限,之后根據(jù)規(guī)則量化的所采用的定點(diǎn)位數(shù)進(jìn)行層間非規(guī)則量化。由于深度卷積神經(jīng)網(wǎng)絡(luò)每一層均會(huì)有不同的分布,故針對(duì)每一卷積層再選取適合本層的量化位數(shù),新選取的量化位數(shù)不大于規(guī)則量化所卻確定的全局量化位數(shù)。
步驟三,對(duì)于模型中的每一卷積層,在最大量化位數(shù)能表示的范圍內(nèi),以一定間隔選取定點(diǎn)值,并用定點(diǎn)值代表特征映射中的值,并以索引的形式進(jìn)行保存。
所述步驟三包括以下步驟:
步驟31,在將特征映射由全精度浮點(diǎn)數(shù)轉(zhuǎn)換位定點(diǎn)數(shù)時(shí),很可能導(dǎo)致原本的全精度浮點(diǎn)數(shù)對(duì)于要轉(zhuǎn)換的定點(diǎn)數(shù)無(wú)法表示的情況。所以累積下來(lái),會(huì)等深度卷積神經(jīng)網(wǎng)絡(luò)的精度造成一定的影響。為了權(quán)衡量化位數(shù)于模型精度,防止模型精度偏差過(guò)多。需要定義最大能容忍的精度損失g,如果量化帶來(lái)的精度損失超過(guò)此閾值g,則提高量化位數(shù),g的條件如下:
g≤A-Aq, (2)
其中,A表示初始的全精度浮點(diǎn)數(shù)表示下的深度卷積神經(jīng)網(wǎng)絡(luò)的精度,Aq表示用定點(diǎn)數(shù)來(lái)表示深度卷積神經(jīng)網(wǎng)絡(luò)之后的精度。當(dāng)g滿足式(2)所示的條件時(shí)則可以嘗試進(jìn)一步縮減量化位數(shù)。如果模型的精度損失超過(guò)g能容忍的最大范圍,則需要對(duì)現(xiàn)有的定點(diǎn)方案進(jìn)行調(diào)整。
步驟32,為了進(jìn)一步縮減空間,需要對(duì)定點(diǎn)數(shù)的數(shù)量進(jìn)行進(jìn)一步縮減。在選取新的定點(diǎn)數(shù)之前確定其區(qū)間范圍,新的定點(diǎn)數(shù)將基于在之前步驟確定的層間非規(guī)則量化的結(jié)果。將0和每層卷積層的最大量化位數(shù)能達(dá)到的最大值分別設(shè)為定點(diǎn)值的區(qū)間的起點(diǎn)和終點(diǎn)
步驟33,對(duì)第i個(gè)卷積層,設(shè)之前步驟中確定的層間非規(guī)則量化的定點(diǎn)位數(shù)為qmi,在層內(nèi)非規(guī)則等間隔量化中選取單個(gè)卷積層的新的定點(diǎn)位數(shù)為Ei,其中Ei≤qmi。Ei位的定點(diǎn)位數(shù)共可以表示種定點(diǎn)數(shù)其中Pi,k對(duì)應(yīng)的定點(diǎn)值的計(jì)算公式如下:
其中,F(xiàn)為減少的位數(shù)即位數(shù)差。通過(guò)該過(guò)程可以為每層卷積層分別選取新的定點(diǎn)值,并且在設(shè)計(jì)過(guò)程中也需要滿足之前步驟提高的精度損失不能大于選定的閾值的條件。
步驟34,將選取的定點(diǎn)值從小到大對(duì)應(yīng)以相應(yīng)的索引,對(duì)于Pi,k對(duì)應(yīng)的定點(diǎn)值Vi,k,設(shè)定其對(duì)應(yīng)的索引為k。
步驟35,按向下取值的原則,將特征映射中的所有值分別替換為離其最近并小于自己的定點(diǎn)值。設(shè)特征映射中的值為x當(dāng)時(shí),將x轉(zhuǎn)換為如下公式所示的定點(diǎn)值:
其中x′表示定點(diǎn)化之后的特征映射的值。當(dāng)時(shí),則將x轉(zhuǎn)換為定點(diǎn)值和索引的數(shù)字電路轉(zhuǎn)換單元如圖1所示。如果精度損失低于g,則進(jìn)一步降低定點(diǎn)位數(shù)Ei,直到精度損失接近超過(guò)g。
步驟36,因?yàn)楸硎径c(diǎn)值的索引所需要的位數(shù)一般要小于定點(diǎn)值本身所需要的定點(diǎn)位數(shù)。所以在將每一層的卷積層的特征映射的值替換為層內(nèi)非規(guī)則等間隔定點(diǎn)數(shù)之后,需要將定點(diǎn)值轉(zhuǎn)化為對(duì)應(yīng)的索引,并用其索引值進(jìn)行保存,這樣可以進(jìn)一步減小存儲(chǔ)。
步驟四,利用神經(jīng)網(wǎng)絡(luò)模型微調(diào)方法對(duì)模型進(jìn)行微調(diào),在原有模型的基礎(chǔ)上,將全精度浮點(diǎn)數(shù)轉(zhuǎn)化為定點(diǎn)數(shù)表示會(huì)對(duì)模型精度帶來(lái)一定的損失。所以需要使用神經(jīng)網(wǎng)絡(luò)模型微調(diào)方法對(duì)模型就行微調(diào)。在微調(diào)時(shí),需要分別進(jìn)行前向計(jì)算以獲得損失函數(shù)和倒向累加梯度調(diào)整參數(shù)兩種方式的計(jì)算。在進(jìn)行前向計(jì)算時(shí),需要對(duì)模型的特征映射進(jìn)行如上文所示的定點(diǎn)約束。而在倒向進(jìn)行梯度的計(jì)算式采用全精度計(jì)算,這樣可以更好的使模型收斂,防止因?yàn)槎c(diǎn)精度問(wèn)題導(dǎo)致梯度消失現(xiàn)象發(fā)生。在通過(guò)模型微調(diào)之后,可以彌補(bǔ)特征映射定點(diǎn)化帶來(lái)的誤差,使深度卷積模型可以在無(wú)精度損失的情況下實(shí)現(xiàn)特征映射的存儲(chǔ)空間的大幅度壓縮。
本發(fā)明提供了基于深度卷積神經(jīng)網(wǎng)絡(luò)的層內(nèi)非均勻的等間隔定點(diǎn)量化方法,具體實(shí)現(xiàn)該技術(shù)方案的方法和途徑很多,以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。本實(shí)施例中未明確的各組成部分均可用現(xiàn)有技術(shù)加以實(shí)現(xiàn)。