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