陳 航,邱曉暉
(南京郵電大學(xué) 通信與信息工程學(xué)院,江蘇 南京 210003)
面部表情是人類用來表達(dá)個(gè)人情緒和心理的主要方式之一,在人際間的相互交往中發(fā)揮著重要的作用,而且往往比語言、動(dòng)作更加生動(dòng)真實(shí),在虛擬現(xiàn)實(shí)、醫(yī)學(xué)、心理學(xué)等領(lǐng)域有著廣闊的應(yīng)用前景。在表情識(shí)別中特征提取是影響表情識(shí)別的重要步驟,傳統(tǒng)的表情識(shí)別方法有主元分析法(PCA)[1]、Gabor小波法[2]和局部二值模式(LBP)[3-4]等,這些方法都是通過某種人工精心設(shè)計(jì)的算法提取具有特定分類信息的特征,但是這種方法并不能完全提取圖像中的所有信息,或者這些提取的特征都有特定的使用領(lǐng)域,往往不能適應(yīng)復(fù)雜的現(xiàn)實(shí)環(huán)境。在2006年G E Hinton[5]提出深度學(xué)習(xí)的概念以后,這個(gè)方向就成為了克服傳統(tǒng)方法的突破點(diǎn),并且在計(jì)算機(jī)視覺和模式識(shí)別等領(lǐng)域已經(jīng)取得了顯著的成就,其中卷積神經(jīng)網(wǎng)絡(luò)[6-7]由于其局部響應(yīng)、權(quán)值共享等優(yōu)點(diǎn),在表情識(shí)別方面獲得了大量的應(yīng)用。它不同于傳統(tǒng)的依靠人工設(shè)計(jì)的特征提取方式,而是構(gòu)建多層的深度神經(jīng)網(wǎng)絡(luò),讓機(jī)器自主地從樣本數(shù)據(jù)中提取信息,并通過每層的網(wǎng)絡(luò)參數(shù)逐層抽象、提取特征信息,從而獲得更具有推廣性和表征能力的特征。
從2012年,Krizhevsky等[8]首次將CNN應(yīng)用于ILSVRC中,并在ILSVRC-2012挑戰(zhàn)賽中他們所訓(xùn)練的深度卷積網(wǎng)絡(luò)在圖像分類和目標(biāo)定位任務(wù)中都取得第一名,并打破了圖像分類的世界記錄。憑借在圖像分類中的突出表現(xiàn),越來越多的研究人員把CNN運(yùn)用到更為細(xì)致的分類中,例如人臉識(shí)別[9-10]、表情識(shí)別[11-12]等等,并取得了一定的成果。
除輸入和輸出層以外,卷積神經(jīng)網(wǎng)絡(luò)主要由卷積層、池化層、全連接層構(gòu)成,其中池化層的作用是對(duì)卷積層的輸出特征進(jìn)行聚合統(tǒng)計(jì),目的就是提高特征的表征能力、減少特征維度。此外,池化層通過池化算法還可以有效避免網(wǎng)絡(luò)在訓(xùn)練過程中因參數(shù)過多、模型過于復(fù)雜產(chǎn)生的過擬合現(xiàn)象。但是傳統(tǒng)的池化算法并不能適用于所有情況,最大值池化算法未能考慮池化域中特征值之間的關(guān)系,而均值池化算法在特征信息較為集中的情況下會(huì)減弱特征信息,隨機(jī)池化算法雖然考慮了特征值之間的關(guān)系但是傳給下一層神經(jīng)網(wǎng)絡(luò)時(shí),并未包含所有的特征信息。文中在現(xiàn)有池化算法的基礎(chǔ)上,結(jié)合人工神經(jīng)網(wǎng)絡(luò)的特點(diǎn)提出一種自適應(yīng)池化算法,并應(yīng)用于表情識(shí)別的卷積神經(jīng)網(wǎng)絡(luò)中,以提高表情識(shí)別的準(zhǔn)確率。
卷積神經(jīng)網(wǎng)絡(luò)是一種結(jié)構(gòu)上由輸入層、隱層、輸出層構(gòu)成的深度神經(jīng)網(wǎng)絡(luò),如圖1所示,其隱層主要由卷積層、池化層、全連接層組成,卷積層主要通過卷積操作實(shí)現(xiàn)局部特征響應(yīng),然后使用相同的卷積核掃描整幅圖像,提取整幅圖像的特征,實(shí)現(xiàn)權(quán)值共享。一般每個(gè)卷積層都會(huì)對(duì)應(yīng)多個(gè)不同的卷積核,每個(gè)卷積核提取出的圖像特征稱之為特征圖譜,具體計(jì)算如下:
(1)
圖1 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
在卷積神經(jīng)網(wǎng)絡(luò)中卷積層的輸出是圖像的特征,有時(shí)在卷積層之后會(huì)緊跟著池化層,而池化層的主要作用就是對(duì)特征進(jìn)行聚合統(tǒng)計(jì),目的就是提高特征的表征能力、減少特征維度,而參數(shù)過多、模型過于復(fù)雜也是產(chǎn)生過擬合現(xiàn)象的重要原因之一,因此池化算法還可以有效避免訓(xùn)練過程中的過擬合現(xiàn)象。例如,在獲得上一層卷積層的輸出之后特征維度為n*n*m(m為特征圖譜的數(shù)量,n為特征圖譜的大小),可以采用2*2的池化窗口進(jìn)行池化操作,每個(gè)2*2的窗口區(qū)域得到一個(gè)池化后的特征值,然后對(duì)每個(gè)特征圖譜都進(jìn)行池化操作,最后得到的池化層的輸出維度為(n/2)*(n/2)*m,和池化之前相比特征維度只有原來的1/4。一般常用的池化算法有隨機(jī)池化、最大值池化、平均池化等。
隱層的最后部分一般為全連接層,相當(dāng)于傳統(tǒng)神經(jīng)網(wǎng)絡(luò)中多層感知機(jī)中的隱層,即前一層的每個(gè)神經(jīng)元都與后一層的每個(gè)神經(jīng)元相連。具體公式為:
(2)
其中,hW,b(x)表示全連接層的輸出;xi表示上一層神經(jīng)元的輸出即全連接層的輸入;Wi表示神經(jīng)元之間連接的權(quán)值;b表示偏置量,θ()表示激活函數(shù)。
在卷積神經(jīng)網(wǎng)絡(luò)中最常用的池化算法有最大值池化、平均池化和隨機(jī)池化等。很容易理解,最大值池化算法就是對(duì)池化域中的特征值取最大值即可,而平均池化算法就是對(duì)池化域中的特征值取均值。最大值池化和平均池化的表達(dá)式分別為:
(3)
(4)
其中,c為池化域的大小和步長,池化操作后的特征圖為矩陣S。
2013年,Zeiler提出隨機(jī)池化操作,并得到廣泛的應(yīng)用。和最大值池化、平均池化不一樣的是,同樣地輸入特征圖譜通過隨機(jī)池化操作后得到的特征輸出并不一定是完全一樣的,減少了訓(xùn)練過程中可能出現(xiàn)的過擬合現(xiàn)象。在隨機(jī)池化操作中池化所輸出的值是根據(jù)池化區(qū)域特征值的概率分布來選取的,特征值大被選中的概率也大,但并不能確定一定會(huì)選取最大值。在訓(xùn)練過程中的操作步驟為:設(shè)給定某個(gè)池化域的輸入特征值為x,首先計(jì)算每個(gè)特征被選中的概率值P,按照每個(gè)特征的概率值分布在0-1中,然后取0-1的隨機(jī)數(shù)r,則r處于哪個(gè)特征值的概率區(qū)間內(nèi)則選取此特征為池化后的值S如圖2所示。
圖2 隨機(jī)池化過程
而在使用網(wǎng)絡(luò)模型對(duì)表情進(jìn)行分類預(yù)測時(shí),則采用概率加權(quán)的方式,即把池化域的特征值和特征值對(duì)應(yīng)的概率值加權(quán)作為池化后的特征值。
池化算法可以看作卷積運(yùn)算,不同池化算法的區(qū)別僅是選取的卷積核不同,即:
(5)
假設(shè)有兩種不同情況的池化域,如圖3所示。圖3(a)中v陰影部分表示不同的特征值,其余特征值為0,可以很明顯地看出圖3(a)中的特征信息集中在v處,所以如果此情況使用平均池化算法則會(huì)明顯地減弱特征信息。同理,在圖3(b)中v1,v2,v3分別代表不同的特征值,如果此情況采用最大值池化算法直接選取最大值v3,而不顧v1,v2特征所包含的信息,也不管v1,v2,v3之間是否有關(guān)聯(lián),則明顯會(huì)丟失很多重要的特征信息。所以使用經(jīng)典的最大值池化算法和平均池化算法對(duì)池化域中特征的聚合表示,會(huì)對(duì)全局的特征表示有一定的弱化。
(a) (b)
而采用隨機(jī)池化算法,可以避免圖3(a)的情況,而且也考慮了圖3(b)中v1,v2,v3之間的關(guān)系,通過計(jì)算概率的方式選取最終的特征值,但是最終的特征值并沒有包含v1,v2,v3中所有的特征信息,而在池化層中通過池化得到的特征值還是需要傳給下一層神經(jīng)網(wǎng)絡(luò)繼續(xù)進(jìn)行運(yùn)算,所以隨機(jī)池化算法在傳給下一層的過程中還是會(huì)丟失一部分重要的信息,并沒有完全解決圖3(b)中出現(xiàn)的問題。
通過以上分析可以知道,傳統(tǒng)池化算法中的卷積核參數(shù)不僅在卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中取值固定,而且也不能根據(jù)具體樣本及訓(xùn)練過程變化情況選取合適參數(shù),存在特征信息提取模糊,甚至丟失等缺陷。
人工神經(jīng)網(wǎng)絡(luò)的最大特點(diǎn)就是能夠模仿人腦自主學(xué)習(xí)的功能,人腦學(xué)習(xí)的過程是通過人的閱讀、聽等吸收外界信息的過程,而人工神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程靠的是在樣本集上的訓(xùn)練過程,即尋找復(fù)雜函數(shù)關(guān)系式的過程。當(dāng)神經(jīng)網(wǎng)絡(luò)所定義的函數(shù)式滿足訓(xùn)練樣本集時(shí),則此網(wǎng)絡(luò)模型訓(xùn)練完成,相反如果不滿足訓(xùn)練樣本集,則重新調(diào)整網(wǎng)絡(luò)模型的參數(shù),直到所定義的函數(shù)關(guān)系式能夠滿足訓(xùn)練樣本集。
因此針對(duì)傳統(tǒng)池化算法的缺陷,利用人工神經(jīng)網(wǎng)絡(luò)能夠基于大量訓(xùn)練集、通過監(jiān)督訓(xùn)練不斷修正參數(shù)的特點(diǎn),得到適用于不同場景的、自適應(yīng)動(dòng)態(tài)修正的卷積核參數(shù)。
提出一種自適應(yīng)改進(jìn)池化算法。首先初始化池化參數(shù),也就是卷積核的參數(shù)p,訓(xùn)練過程中通過卷積操作得到池化值,然后在訓(xùn)練迭代過程中使用梯度下降法更新參數(shù)p,通過不斷的迭代學(xué)習(xí)不斷的優(yōu)化參數(shù),最終實(shí)現(xiàn)自適應(yīng)池化操作。
文中的自適應(yīng)池化算法主要分為三個(gè)階段。
(1)輸入人臉圖像灰度矩陣,通過卷積神經(jīng)網(wǎng)絡(luò)的映射關(guān)系輸出對(duì)人臉表情類別的預(yù)測值。
(2)根據(jù)預(yù)測值和真實(shí)的結(jié)果值,通過損失函數(shù)計(jì)算出二者差值。一般在卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程中常用的損失函數(shù)有SVMLoss和SoftmaxLoss,文中采用后者,具體表達(dá)式為:
(6)
其中,y為最終的預(yù)測值;θ為神經(jīng)元之間的權(quán)值;1{}為示性函數(shù),當(dāng){}內(nèi)的表達(dá)式為真則取1,否則取0,表達(dá)式第二項(xiàng)為權(quán)重衰減項(xiàng)。
在每次訓(xùn)練迭代的過程中,根據(jù)Loss值調(diào)整網(wǎng)絡(luò)模型參數(shù)達(dá)到損失函數(shù)的最小值,也就是神經(jīng)網(wǎng)絡(luò)的預(yù)測值能夠最接近實(shí)際的結(jié)果。
(3)根據(jù)損失函數(shù)通過梯度下降法更新池化參數(shù)p,目的是找到最優(yōu)的池化參數(shù),即損失函數(shù)的極小值。具體公式為:
pn+1=pn-γn·f(pn)
(7)
其中,γ為步長或?qū)W習(xí)率;f()為損失函數(shù)。
這樣通過不斷的迭代更新逐步收斂到損失函數(shù)的極值,也就得到了池化算法的參數(shù)值。
根據(jù)表情識(shí)別的具體情況設(shè)計(jì)了一種卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),其中整個(gè)網(wǎng)絡(luò)模型由輸入層、隱層、輸出層組成,其中隱層包括4層卷積層、2層池化層、1層全連接層共7層。首先數(shù)據(jù)層的輸入數(shù)據(jù)為96*96的人臉灰度矩陣,前2層卷積層(C1和C2)都是使用步長為1,大小為5*5的卷積核,后兩層卷積層(C3和C4)的卷積核步長為1,大小為3*3,兩層池化層(S1和S2)的池化窗口大小為2*2,步長也為2。從第一層卷積層開始每層神經(jīng)網(wǎng)絡(luò)輸出的特征圖譜數(shù)量分別為32、64、64、128、128、128,然后還包括擁有300個(gè)神經(jīng)元的全連接層。最后的輸出層為Softmax層,包含7個(gè)神經(jīng)元,分別對(duì)應(yīng)7種表情。
在CK+[13]人臉表情數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)。首先在CK+數(shù)據(jù)集中每個(gè)樣本的不同表情有一個(gè)漸變過程,為了保證數(shù)據(jù)的有效性,對(duì)每個(gè)樣本的不同表情最多只選取表情達(dá)到峰值的三張圖像。最終在整個(gè)CK+數(shù)據(jù)集中一共選取了981張表情圖像,其中高興(354張)、驚訝(249張)、憤怒(135張)、厭惡(177張)、悲傷(84張)、蔑視(54張)、恐懼(75張)。然后對(duì)選取后的數(shù)據(jù)集按照1∶5的比例,將數(shù)據(jù)分為訓(xùn)練集和測試集,其中為了加強(qiáng)實(shí)驗(yàn)數(shù)據(jù)的有效性,在區(qū)分訓(xùn)練集和測試集時(shí),必須確保同一個(gè)樣本的表情不會(huì)同時(shí)出現(xiàn)在訓(xùn)練集和測試集中。
為了驗(yàn)證提出的動(dòng)態(tài)自適應(yīng)池化算法的有效性,在相同卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中采用不同的池化算法,在訓(xùn)練集和數(shù)據(jù)集上分別進(jìn)行實(shí)驗(yàn)并比較,其結(jié)果如表1所示。
表1 不同池化策略和表情識(shí)別率
表1中自適應(yīng)池化算法的初始化參數(shù)為1/c2(c為池化域的大小),可以知道在訓(xùn)練開始時(shí),自適應(yīng)池化算法本質(zhì)上就是平均池化算法,原本平均池化算法在三種經(jīng)典的池化策略中準(zhǔn)確率最低只有82.6%,但是自適應(yīng)池化算法經(jīng)過不停的參數(shù)優(yōu)化,最終卷積神經(jīng)網(wǎng)絡(luò)模型的預(yù)測結(jié)果不僅要高于原本的平均池化策略,而且還略高于隨機(jī)池化策略(83.17%),僅次于最大值池化策略(86.53%)。經(jīng)過訓(xùn)練后不同池化域的參數(shù)如圖4所示。
圖4 訓(xùn)練后不同池化域的參數(shù)
由圖4可知,經(jīng)過訓(xùn)練后的池化域參數(shù)并不是固定的1/c2,而是根據(jù)訓(xùn)練過程中的損失函數(shù),不斷優(yōu)化得到,不同的池化區(qū)域參數(shù)都不相同??梢钥闯?,文中提出的動(dòng)態(tài)自適應(yīng)池化對(duì)于卷積神經(jīng)網(wǎng)絡(luò)在表情識(shí)別中是切實(shí)有效的,并且當(dāng)初始化條件等價(jià)于平均池化時(shí),可以明顯看出自適應(yīng)池化算法的優(yōu)越性。
當(dāng)使用自適應(yīng)池化算法時(shí),在池化域大小為2*2的情況下,分別使用不同的初始化參數(shù)進(jìn)行多次實(shí)驗(yàn),其結(jié)果如表2所示。
表2 不同初始池化參數(shù)和表情識(shí)別率
在表2中可以明顯看出,當(dāng)初始化池化參數(shù)取1時(shí),表情識(shí)別的最終識(shí)別率達(dá)到最高值為94.23%,遠(yuǎn)遠(yuǎn)超出表1中使用最大值池化操作的86.53%。結(jié)合表1和表2可以知道,提出的基于動(dòng)態(tài)自適應(yīng)池化的卷積神經(jīng)網(wǎng)絡(luò)在表情識(shí)別中,相對(duì)于使用傳統(tǒng)的池化算法具有更好的表情識(shí)別率。
在卷積神經(jīng)網(wǎng)絡(luò)中池化操作的主要作用有兩個(gè):降低特征維度;聚合上層特征,避免過擬合現(xiàn)象。而傳統(tǒng)池化方法中最大值池化和隨機(jī)池化在聚合上層特征過程中存在丟失信息嚴(yán)重的情況,平均池化操作則會(huì)弱化特征信息,缺乏靈活性。針對(duì)傳統(tǒng)池化策略存在的缺點(diǎn),提出一種自適應(yīng)池化算法,不僅能夠完全考慮到池化域中所有的特征信息,并且能夠根據(jù)損失函數(shù)不斷優(yōu)化池化參數(shù)?;谧赃m應(yīng)池化算法構(gòu)建了卷積神經(jīng)網(wǎng)絡(luò)并用于表情識(shí)別,在CK+數(shù)據(jù)集上的實(shí)驗(yàn)證明,使用動(dòng)態(tài)自適應(yīng)算法相比較傳統(tǒng)的池化算法,在表情識(shí)別中具有明顯的優(yōu)勢(shì),能夠顯著提高表情識(shí)別率。