張文濤,陳嬋娟,王澤荔
(陜西科技大學機電工程學院,西安710000)
隨著人工智能技術的發展,基于深度學習的人臉識別算法愈加成熟。該類算法在現有人臉標準數據集上的正確識別率已經接近人類水平。然而,在實際視頻監控場景下,由于人體位置的移動和人臉角度的變化,導致監控攝像機采集到的人臉數據呈現多角度、多尺度的特點。當人臉與攝像機間的距離不確定時,人臉在單幀畫面中的尺寸也不確定。距攝像機越近,人臉尺寸越大。距攝像機越遠,人臉尺寸越小。
現有基于深度學習的人臉識別算法,其網絡模型的輸入尺寸往往是固定的。例如,在人臉識別算法FaceNet[1]中,其 NN1 模型的輸入尺寸為 220×220(單位:像素);其NN2模型的輸入尺寸為224×224;其NN3模型的輸入尺寸為160×160。在人臉識別算法LCNN[2]中,其Light CNN-29模型的輸入尺寸為144×144。
為了適應于已有基于深度學習的人臉識別算法模型的輸入尺寸,只能對視頻監控場景下采集到的人臉數據進行尺寸放縮(如圖1所表示)。圖像尺寸的放縮對圖像質量產生一定的損失。特別是在人臉識別任務中,放縮后的人臉圖像,其人臉特征信息會大量丟失,其不利于人臉識別算法在視頻監控場景下的應用。

圖1 不同距離下的人臉尺寸
針對這一實際問題,本文提出了一種基于深度學習的多尺度輕量化的人臉識別算法。首先,構建基于深度學習的人臉識別算法模型,實現端對端的人臉特征提取、分類。其次,借鑒空間金字塔池化思想,設計空間金字塔池化層,實現模型的多尺度輸入。再次,選用激活函數Maxout[3]優化模型,實現模型的輕量化。同時,鑒于現有人臉數據集的同一樣本單一尺度的局限性,本文提出一種多尺度的人臉數據集。首先,建立距攝像機不同距離下的三個采集點。然后在每個采集點上采集不同角度的人臉圖像,最后對采集到的人臉圖像進行數據預處理和分類整理。
本文提出的多尺度輕量化人臉識別算法模型不需要將人臉尺寸放縮到同一尺寸,因而可以解決由圖像尺寸縮放所導致的人臉特征信息丟失問題。此外,整個模型的參數量只有1906K,較少的參數量使得該算法對硬件要求更低,可遷移性更高,運行速度更快。本文提出多尺度的人臉數據集填補了現有人臉數據集單個樣本多個尺度的空缺,對現有基于深度學習的人臉識別算法的實現提供了更優的測試平臺。
卷積神經網絡(Convolutional Neural Network,CNN)[4]是一種專門用來處理具有相似網絡結構數據的神經網絡。該網絡一般由輸入層、卷積層、池化層、全連接層組成。輸入層是整個神經網絡的輸入,在處理圖像的卷積神經網絡中,它一般代表一張圖片的像素矩陣。卷積層的作用是對整個神經網絡的特征進行提取。卷積層可以看作是由若干個節點(神經元)組成的特征矩陣。每個節點可看作是一個濾波器。每個濾波器對上一層圖像進行卷積操作,從而實現對上一層圖像的特征提取。池化層通過池化函數使用某一位置的相鄰輸出的總體統計特征來代替網絡在該位置的輸出。池化層以卷積層為操作對象,其作用是有效提取卷積層特征,實現模型參數量的壓縮,進而防止網絡模型的過擬合。全連接層的每一個結點都與上一層的所有結點相連,用來把前邊提取到的特征綜合起來。由于其全相連的特性,一般全連接層的參數也是最多的。卷積神經網絡已被證明可用于各種高級視覺任務[5-7]以及各種圖形處理問題[8-10]中,并都取得了不錯的成績。
空間金字塔池化(Spatial Pyramid Pooling,SPP)[11]是作用于卷積層與全連接層之間的一種并行池化結構。該結構由三種不同大小的池化滑動窗口以不同大小的步長并行組成,并輸出一個固定的數據維度。固定大小的輸出維度使得網絡模型不再受限于輸入圖像的尺寸或比例。此外,空間金字塔池化通過對上層特征圖從不同的尺寸大小進行特征提取,再對提取到的特征進行聚合,從而可以有效的提取不同尺度的圖像特征信息。
卷積神經網絡在處理分類問題時,若為線性可分問題,則采用線性模型即可對目標類別做出很好的區分;若為線性不可分問題,就需要使用激活函數實現模型的去線性化。常用的激活函數有:Sigmoid函數、tanh函數、ReLU函數以及Maxout函數。其中,激活函數Maxout可以憑借更少的參數獲得一些統計和計算上的優勢。例如,如果由n個不同的線性過濾器描述的特征可以在不損失信息的情況下,用每一組K個特征的最大值來概括的話,那么下一層就可獲得K倍更少的參數量。
在模型設計過程中,由于卷積層、池化層對輸入圖像尺寸沒有限制,只有在最后的全連接層對輸入特征圖尺寸大小有要求。因此,借鑒空間金字塔池化思想,在網絡模型(圖2所示)第四個Maxout層之后加入一個SPP層,從而可以實現模型的多尺度輸入。在本文實驗部分中,三種不同尺度(80×80、120×120、240×240(單位:像素))的人臉圖像在輸入模型后,其Maxout 4層的特征圖大小分別為:8×8×192、13×13×192、28×28×192。對于特征圖 8×8×192,其SPP層的計算步驟如下:
(1)計算池化滑動窗口的大小和步長,具體計算公式如下:

其中Kernel_size表示池化滑動窗口的大小,Stride表示池化滑動窗口的步長;W、h分別為Maxout 4層特征圖的寬度和高度;n表示輸出池化層滑動窗口的大小;表示求取大于的最小整數表示求取小于的最大整數。

圖2 輕量化多尺度人臉識別算法模型
(2)按照步驟(1),依次計算出當n取1時,n取2時,n取4時,Kernel_size和Stride的值。
(3)按照步驟(2)中計算出的結果依次對Maxout 4層進行三次池化操作,池化后的特征圖分別為四維矩陣[N,1,1,192]、[N,2,2,192]、[N,4,4,192]。其中 N 表示單次輸入模型的樣本數。
(4)分別對步驟(3)中的特征圖進行維度變換,即將一個四維矩陣轉為一個二維矩陣。轉換后的特征矩陣分別為:[N,1×1×192]、[N,2×2×192]、[N,4×4×192]。
(5)對步驟(4)中的特征矩陣進行特征合并,即可得到一個固定維度的二維矩陣[N,(1×1+2×2×4×4)×192]。
特征圖 13×13×192、28×28×192 的計算方法與之類似。通過以上步驟即可完成多尺度輕量化人臉識別模型的SPP層結構運算,從而解決模型的多尺度輸入問題。多尺度池化層運算流程如圖3所示。
在模型設計過程中,考慮到現有基于CNN人臉識別算法模型,具有層數多、參數量大、所需訓練數據量多等特點,由此導致算法在實際應用中受限于計算機的處理能力。針對該問題,本文在模型設計過程中,選用Maxout作為激活函數,從而可以在網絡模型性能不變的基礎上實現模型的輕量化。具體設計方法如下:
(1)對于卷積層之后的激活函數,這里將其設定為Maxout層(O=conv,K=2)。其中參數 O=conv,表示激活函數Maxout所作用對象為卷積層,參數K=2表示激活函數Maxout作用后的卷積層通道數為原來的1/2。具體計算步驟如下:
①設當前卷積層為一個四維張量A=[N,w,h,c],其中N表示每一次輸入網絡模型的樣本個數,w表示當前卷積核的寬度,h表示當前卷積核的高度,c表示當前卷積核的通道數。
②按照四維張量A第四維度上卷積層的特征加權和的大小,取其前c/K個最大值所對應的通道數作為輸出。即輸出四維張量B=[N,w,h,c/K]。

圖3 多尺度池化層運算流程圖
(2)對于全連接層之后的激活函數,這里將其設定為 Maxout層(O=FC,K=2)。其中參數 O=FC,表示激活函數Maxout所作用對象為全連接層,參數K表示激活函數Maxout作用后的全連接層的維度為原來的1/2。具體計算步驟如下:
①設當前全連接層為一個二維張量C=[N,c],其中N表示每一次輸入網絡模型的樣本個數,c表示當前全連接層的維度。
②按照二維張量C第二維度上全連接層上的節點(神經元)值的大小,取其前c/K個最大值所對應的通道數作為輸出。即輸出二維張量D=[N,c/K]。
目前國內外現有人臉數據庫按照其數據來源可分為實際環境下的人臉數據和模擬實際環境下的人臉數據。西安交通大學人工智能與機器人研究所的東方人臉數據庫(XJTU人臉庫)[12]就是一種在室內環境下模擬部分實際場景(不同光照條件、不同拍攝角度)進行人臉圖像采集的數據庫。Labeled Faces in the Wild(LFW)[13]人臉數據庫中的人臉圖像主要來自實際復雜環境下采集的人臉數據(主要來源于新聞圖片)。然而,現有人臉數據庫均沒有針對實際視頻監控下人臉距攝像機不同距離下所產生不同尺度人臉圖像的問題建立數據集。
針對上述問題,本文提出了一種多尺度人臉數據集。該數據集共采集并整理了50位志愿者的45000幅人臉圖像,每位志愿者拍攝900張不同距離不同角度的人臉圖像。該數據集設定的拍攝距離分別為3米、6米、9米。具體的采集方式如圖4所示。每個采集點距攝像機的距離固定且采集角度不同。攝像機采集到的數據為視頻信息,需要對其進行數據預處理。具體流程如下:(1)通過視頻分幀代碼對采集到的視頻按照每秒30幀的幀率進行分幀處理。(2)采用人臉檢測算法MTCNN[14]對每幀圖像進行人臉檢測、人臉對齊(具體過程如圖5所示)。(3)對采集到的人臉圖像進行歸一化處理。本文采用分而治之的思想,對3米的人臉圖像尺寸歸一化到240×240(單位:像素),6米的人臉圖像尺寸歸一化到120×120,9米的人臉圖像尺寸歸一化到80×80。人臉數據集的示例樣本如圖6所示。根據本文實驗要求將多尺度人臉數據集按照一定比例分為訓練集和測試集,如表1所示。

圖4 采集方式

圖5 數據預處理

圖6 數據集示例樣本

表1 多尺度人臉數據集的組成
(1)前期準備
針對算法驗證要求,本文針對所提算法模型、所提多尺度人臉數據集設計了兩種人臉識別模型。分別為多尺度輕量化模型(Pyramid Lightweight-CNN model,PLC)和單一尺度輕量化模型(Single Lightweight-CNN model,SLC)。其模型的具體結構參數分別如表2、3所示。
(2)模型訓練方法設計
本文分別采用三種不同尺度的人臉數據集對設計好的模型進行交叉訓練。在第一個batch(單次輸入模型的樣本個數)中,選用80×80的人臉數據進行模型訓練,在第二個batch中,選用120×120的人臉數據進行模型訓練,在第三個batch中,選用240×240的人臉數據進行模型訓練,依次交叉往復訓練。

表2 多尺度輕量化CNN模型結構

表3 單一尺度輕量化CNN模型結構
本文實驗平臺的配置包括Intel i7-6700(8×3.40GHz處理器)、16GB 內存、GTX1080Ti顯卡以及Windows 10操作系統,并使用基于Python編程語言的TensorFlow[15]深度學習開源框架。
(1)訓練樣本
本文使用的訓練樣本是上文提到的多尺度人臉數據集,它包含50個人,約43500張不同角度、不同距離的人臉照片,本文使用此數據集用于模型訓練。
(2)測試樣本
本文使用的訓練樣本是上文提到的多尺度人臉數據集,它包含50個人,約1500張不同角度、不同距離的人臉照片,本文使用此數據集用于模型測試。
(3)實驗細節
針對本實驗數據集的特殊性,本文設計了6組實驗來對設計的多尺度輕量化CNN模型進行測試。這里需要提出的是,單一尺度輕量化CNN模型,在輸入不同尺度的圖片時,需要將其輸入尺寸統一縮放到80×80的尺寸大小。
建立好兩組模型之后,分別用3m、6m、9m的訓練樣本訓練兩組模型,實驗發現,在模型訓練過程中,多尺度輕量化模型收斂的速度更快(如圖7所示)。
以3m人臉數據集分別訓練單一尺度輕量化模型(Model-SLC)、多尺度輕量化模型(Model-PLC),對訓練完的模型進行保存,并分別用3m、6m、9m的人臉測試集對其測試,測試結果如表4所示。

圖7 兩組模型在同一數據集下的訓練效果圖

表4 不同測試集下的識別率
以6m人臉數據集分別訓練單一尺度輕量化模型(Model-SLC)、多尺度輕量化模型(Model-PLC),對訓練完的模型進行保存,并分別用3m、6m、9m的人臉測試集對其測試,測試結果如表5所示。

表5 不同測試集下的識別率
以9m人臉數據集分別訓練單一尺度輕量化模型(Model-SLC)、多尺度輕量化模型(Model-PLC),對訓練完的模型進行保存,并分別用3m、6m、9m的人臉測試集對其測試,測試結果如表6所示。

表6 不同測試集下的識別率
以3m、6m、9m人臉數據集分別訓練單一尺度輕量化模型(Model-SLC)、多尺度輕量化模型(Model-PLC),對訓練完的模型進行保存,并分別用3m、6m、9m的人臉測試集對其測試,測試結果如表7所示。

表7 不同測試集下的識別率
綜上,通過多組比對實驗,我們可以發現:在不同尺度下的人臉圖像測試集下,多尺度輕量化模型(Mod?el-PLC)要比單一尺度輕量化模型(Model-SLC)的識別率高。值得一提的是,輕量化多尺度網絡模型的參數量和輕量化單一尺度網絡模型的參數量一樣多。
本文提出的多尺度輕量化人臉識別算法模型不需要將人臉尺寸放縮到同一尺寸,因而可以解決由圖像尺寸縮放所導致的人臉特征信息丟失問題。此外,整個模型的參數量只有1906K,較少的參數量使得該算法對硬件要求更低,可遷移性更高,運行速度更快。本文提出多尺度的人臉數據集填補了現有人臉數據集單個樣本多個尺度的空缺,對現有基于深度學習的人臉識別算法的實現提供了更優的測試平臺。實驗結果表明,本文所提算法在距離條件變化的情況下取得較好的性能。