王乾琛
(江西理工大學(xué) 電氣工程與自動化學(xué)院,江西 贛州 341000)
隨著人工智能的飛速發(fā)展以及機器視覺的出現(xiàn),通過處理生活中出現(xiàn)的各種圖像,就能夠完成對生物的識別以及對各類數(shù)據(jù)的采集;結(jié)合機器視覺和機器學(xué)習(xí),通過處理人臉圖片信息可以實現(xiàn)年齡的識別和預(yù)測。
由于機器學(xué)習(xí)存在誤差問題,無法細致地學(xué)習(xí)數(shù)據(jù)深層次的具體特征。在1976年由馬頓和薩爾喬首次提出深度學(xué)習(xí)一詞,他們指出深度學(xué)習(xí)就是學(xué)者對于學(xué)習(xí)資料要更加偏向于意向性的領(lǐng)悟,是通過模仿人類的視覺神經(jīng)網(wǎng)絡(luò)系統(tǒng),分層次地逐步對數(shù)據(jù)信息進行理解和學(xué)習(xí);通過學(xué)習(xí)數(shù)據(jù)各個層次的特征加深對數(shù)據(jù)本身內(nèi)容的理解,以便對于新的數(shù)據(jù)進行更為深入和全面的預(yù)測。
1987年由Alexander Waibel等提出了第一個卷積神經(jīng)網(wǎng)絡(luò)(TDNN),在之后的時間里卷積神經(jīng)網(wǎng)絡(luò)不斷地發(fā)展成為深度學(xué)習(xí)的代表性模型之一,它在提取和識別圖片特征方面有著顯著的優(yōu)勢,因此基于深度學(xué)習(xí)中的卷積神經(jīng)網(wǎng)絡(luò)模型來實現(xiàn)年齡的識別與預(yù)測是現(xiàn)在的主流研究方向[1]。人類年齡預(yù)測的實現(xiàn)帶來了很多的便利,它可以被應(yīng)用于各類的人機交互系統(tǒng),使得對個人身份的識別更加有效快捷,隨之而來的年齡預(yù)測APP軟件也會受到很多女性群體的喜愛。
深度學(xué)習(xí)作為機器學(xué)習(xí)的分支,是解決復(fù)雜問題的一個有效方法,它是通過人工神經(jīng)網(wǎng)絡(luò)的概念去完成給定的任務(wù),而不是通過特定的規(guī)則去完成任務(wù),所以不需要明確的編程,而正是這種模糊的控制卻可以準(zhǔn)確地完成任務(wù),相較于傳統(tǒng)的機器學(xué)習(xí)優(yōu)勢更加突出[2]。
深度學(xué)習(xí)領(lǐng)域主要使用的是Python語言,它具有三大特點:具有高效的高級數(shù)據(jù)結(jié)構(gòu),是面向?qū)ο蟮木幊蹋且环N解釋性語言。因此,Python語言有著很大的應(yīng)用范圍,它也因為有龐大的標(biāo)準(zhǔn)庫,適用于各種源碼,故也是深度學(xué)習(xí)所使用的最佳語言。
構(gòu)建深度學(xué)習(xí)的基本模型一般分為以下五大步驟:(1)對于將要解決的問題進行抽象化的理解;(2)要著重挑選數(shù)據(jù)集,這里采用的數(shù)據(jù)集是開放數(shù)據(jù)集—飛漿AI studio中的名為archive(3)和train的兩個數(shù)據(jù)集,這兩個人臉年齡數(shù)據(jù)集較為小眾,但多數(shù)人口為亞洲人,并且不同年齡階段的人臉區(qū)分較為仔細和嚴格[3];(3)對數(shù)據(jù)集的預(yù)處理和特征值的提??;(4)對于模型的訓(xùn)練;(5)對于模型的評估。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)通常包含以下四層:卷積層、線性整流層、池化層和全連接層。其中卷積層是卷積神經(jīng)網(wǎng)絡(luò)最為核心的部分,它主要完成對圖像的特征提?。恢缶矸e層輸出結(jié)果,通過線性整流層進行非線性映射;池化層負責(zé)降采樣;最后全連接層將局部特征結(jié)合起來變成全局特征,用來計算每一類的得分,給出預(yù)測準(zhǔn)確率[4]。
本次實驗主要使用的卷積神經(jīng)網(wǎng)絡(luò)模型是由卷積層、最大池化層以及激活層相互協(xié)調(diào)配合實現(xiàn)的,具體結(jié)構(gòu)如圖1所示。
圖1 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
首先輸入將要卷積的圖片對象,緊接著就進入輸入層,然后開始尺度變換和比例縮放。在完成這些準(zhǔn)備工作后就會進入卷積層,并加入激活函數(shù);卷積結(jié)束后開始第一次池化,這里采用最大池化法,緊接著再進行一次卷積池化操作。通過反復(fù)的卷積、激活以及最大池化操作,能夠完成對圖片特征的真實、細致提取。之后通過Flatten層將多維輸入一維化并進入全連接層,再通過Softmax函數(shù)完成對提取特征信息的0-1概率生成,就會出現(xiàn)最終的年齡預(yù)測準(zhǔn)確率結(jié)果[5]。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)的核心在于卷積,卷積以不同的參數(shù)來描述不同的抽象程度,使之更接近于原始圖像的特征抽象,它的具體公式如公式(1)所示。
一般來說,CNN模型在卷積層完成任務(wù)后就會進入池化層,池化層即為降采樣,它會獲得一個區(qū)域內(nèi)的典型特征,這樣做的目的是為輸入進行抽象的描述,對特征進行降維,抽象的最大價值就是提取輸入的顯著特征而忽略細節(jié)特征[6]。對于池化層比較傳統(tǒng)的兩大池化法為最大值池化法和平均值池化法,其中最大值池化法的應(yīng)用較為普遍,它能夠有效地減小卷積層所帶來的均值偏差,比較適應(yīng)紋理特征;而平均池化法對于紋理、平滑和邊緣的特征容易丟失,但卻可以有效地避免噪聲[7]。
Pycharm作為一款優(yōu)秀的集成開發(fā)環(huán)境(IDE),它具有代碼的自動補全功能,適宜新手學(xué)習(xí)和編寫Python語言。而提起Pycharm就必須提起它所配套使用的Anaconda,Anaconda是開源的Python發(fā)行版本,它包含了Python180多個科學(xué)包[8]。因此,Pycharm與Anaconda的結(jié)合給Python語言創(chuàng)造了一個良好的編譯環(huán)境。
本次實驗共需五大軟件包,分別為tensor flow、pyqt5、pillow、opencv-python以及 matplotlib,其中 pyqt5、pillow和opencv-python主要用于圖像處理以及圖形化界面的設(shè)計,matplotlib則是為了繪制圖表做準(zhǔn)備;而其中最為關(guān)鍵的就是tensor flow-gpu-2.3.0,它是一個強大的面向數(shù)據(jù)流的開源軟件庫,是許多深度學(xué)習(xí)框架中的一種,而深度學(xué)習(xí)框架是深度學(xué)習(xí)領(lǐng)域中一個非常大的庫,它的里面涵蓋了基礎(chǔ)的網(wǎng)絡(luò),這樣就在很大程度上方便了程序的編寫,同時應(yīng)用顯卡來運行程序可以極大地提升程序的運行效率[9]。
本次實驗過程主要分為四個步驟,首先是對人臉數(shù)據(jù)集進行劃分,將人臉數(shù)據(jù)集“1-3”“4-6”“7-9”“10-12”“13-15”“16-18”“19-25”“26-35”“36-45”“46-55”“56-70”“71-”共12個年齡階段,按照8:1:1比例分為訓(xùn)練集(train)、驗證集(validate)、測試集(test)三部分。其次是對年齡預(yù)測模型進行訓(xùn)練,其中主要是對CNN模型進行訓(xùn)練,使其驗證集成功率達到90%以上。對測試模型進行訓(xùn)練的同時生成熱力圖。最后是搭建年齡預(yù)測窗口,并產(chǎn)生效果圖,具體如圖2所示。
圖2 19~25歲人臉圖像預(yù)測效果
對于實驗結(jié)果,主要是看訓(xùn)練模型的準(zhǔn)確率以及其是否能寬泛地應(yīng)用于一切人臉圖像的識別。訓(xùn)練模型的準(zhǔn)確率主要經(jīng)歷了三個階段,分別為CNN驗證集準(zhǔn)確率從20%到55%再到73%以及最后到93%。最終的實驗結(jié)果熱力圖如圖3所示。
圖3 最終實驗結(jié)果熱力圖
圖3熱力圖的每一個小格都代表了一個準(zhǔn)確率,橫坐標(biāo)代表預(yù)測的標(biāo)簽,縱坐標(biāo)代表真實標(biāo)簽[10];顏色越深則代表它的準(zhǔn)確率越高,因此通過大體的顏色分布可以看出,除19~25歲和26~35歲兩個年齡階段準(zhǔn)確率較低外,其他年齡段都達到了90%及以上的準(zhǔn)確率。這表明CNN模型對于圖像特征差異性的依賴,若圖像特征過于相似則無法準(zhǔn)確識別,這也是對于人臉圖像年齡進行分階段劃分的原因。
另外,對于CNN模型泛化能力的檢測,通過使用不參與CNN模型訓(xùn)練的測試集(test)圖片進行窗口預(yù)測,采用驗證測試集的12個年齡階段且每個階段隨機抽出五六張圖片的方法,發(fā)現(xiàn)準(zhǔn)確率仍然為90%左右,這就可以證實CNN模型有很好的泛化能力,不會出現(xiàn)過擬合現(xiàn)象。
本文主要論述了基于深度學(xué)習(xí)的年齡預(yù)測系統(tǒng)的設(shè)計,首先對年齡預(yù)測背景及現(xiàn)狀進行研究,之后對深度學(xué)習(xí)模型進行構(gòu)建和分析,對年齡識別問題進行抽象化的分析,這里主要是將其要識別的特征確定為人臉圖像。接著就是對于人臉信息進行數(shù)據(jù)集的收集,再對其特征進行提取,這就要依靠對圖片處理與識別有著優(yōu)良性能的卷積神經(jīng)網(wǎng)絡(luò)(CNN),最后對模型進行訓(xùn)練和評估。
對于CNN模型的訓(xùn)練經(jīng)歷了三個階段,在不斷優(yōu)化數(shù)據(jù)集以及調(diào)試模型程序的情況下最終實現(xiàn)了準(zhǔn)確率從20%到55%再到73%以及最終到93%的效果。同時,通過對實驗結(jié)果的分析可以發(fā)現(xiàn),卷積核的數(shù)量增多確實會提高卷積層對特征提取的細致性,從而提高識別的準(zhǔn)確率;但是,CNN模型也同樣過于依賴卷積核對局部特征的過濾提取,這導(dǎo)致局部特征相似的人臉圖片無法有較高的識別準(zhǔn)確率;而CNN中的池化層則提高了模型的泛化能力,不至于出現(xiàn)過擬合現(xiàn)象,最終實現(xiàn)基于深度學(xué)習(xí)的較好的年齡預(yù)測效果。