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