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