胡麗清,李啟明
(上海海事大學信息工程學院,上海 201306)
人臉檢測于20世紀70年代開始研究,前期的研究主要是為了人臉識別而服務,后來隨著人臉檢測技術的發(fā)展,人臉檢測獨立成為一個研究課題,研究人員也越來越多,技術也逐步成熟。
目前主流的人臉檢測技術主要有兩種:基于Ada-Boost算法的人臉檢測和基于深度學習[1]的人臉檢測[2],基于AdaBoost的人臉檢測算法由Viola[3]和Jones在2001年提出,并應用于人臉檢測中,其算法由于結果簡單,檢測率高、誤檢率低而被廣泛使用。但是基于Haar特征+AdaBoost人臉檢測算法仍有許多不足之處[4],如訓練分類器的時間較長,人臉檢測時間無法達到實時性要求等問題。隨后人們?yōu)榱烁倪MHaar特征,提出Haar-T[5]特征來進行人臉檢測,人臉檢測的正確率提高,但人臉檢測仍不能達到實時人臉檢測。后來人們?yōu)榱私档腿四槞z測的時間消耗,提出新的人臉圖像特征LBP特征,LBP是一種被用于來描述圖像局部紋理特征信息的算子。該算子是1994年Ojala,M.Pietik?inen[6],和D.Harwood提出的,LBP特征由于具有旋轉不變性和灰度不變性的優(yōu)點[7],從而被廣泛被用于提取圖像特征來進行目標檢測。2002年,Mottaleb[8]等人采用YCbCr[9]膚色模型來進行人臉檢測加速。2007年中科院對LBP特征進行改進,發(fā)明MB_LBP特征[10]用于目標檢測,并取得了不錯的成績,不過還是很難達到實時檢測。后來隨著硬件的快速發(fā)展,人們對深度學習的認識,網(wǎng)絡的層數(shù)越來越深,比較代表的網(wǎng)絡又Fast-RCNN、Alex-NET等。人們開始將深度學習應用于人臉檢測當中,并取得了不錯的成績。2016年OpitzM[11]等人將輸入的人臉照片分成多個窗口輸入到卷積神經(jīng)網(wǎng)絡,并計算每個窗口輸入的誤差,從而實現(xiàn)了基于卷積神經(jīng)網(wǎng)絡人臉檢測對部分遮擋人臉具有很好的魯棒性。后面隨著網(wǎng)絡的層數(shù)變得更深,人臉檢測的效果也變得更好,2017年,董蘭芳[12]等人把Fast-RCNN[13]網(wǎng)絡應用在人臉檢測中。該方法對復雜光照、部分遮擋、人臉姿態(tài)變化具有魯棒性,在非限制性條件下具有出色的人臉檢測效果[14]。但是基于深度學習的人臉檢測的問題主要是訓練模型的時間很長,對硬件要求很高,需要大量的GPU來進行加速,而且網(wǎng)絡中間的隱層復雜。
本文綜合考慮到人臉檢測訓練時間和檢測時間的大小,并對于同樣一張圖片24×24,Haar特征數(shù)量遠遠大于MB_LBP特征[15],因此為了克服OpenCV中訓練分類器時間過長,并能達到實時人臉檢測的要求,分類器的設計采用了MB_LBP特征和AdaBoost算法來訓練分類器,并為了達到實時的人臉檢測的要求,采用圖像金子塔法和膚色提取的方法減少輸入圖像的數(shù)據(jù)量和限定分類器滑動窗口的范圍,從而達到實時人臉檢測。
本文為了提高Haar特征人臉檢測的正確率和解決實時人臉檢測的問題,采用改進的LBP特征,MB_LBP特征來提取人臉圖像并構成分類器,通過圖像金字塔和膚色提取來對輸入圖像進行一系列的預處理操作,從而達到實時的人臉檢測,其系統(tǒng)流程圖如圖1所示。
圖1 人臉檢測流程圖
由圖1可知,本文主要的工作是對待測圖像進行預處理操作和分類器的設計。圖像預處理有圖像金字塔、均衡化、膚色提取等;分類器的設計采用的方法是MB_LBP特征+AdaBoost算法。
在人臉檢測中,有效圖像的預處理不僅可以提高人臉檢測正確率,還可以極大地縮減檢測時間。本文為了減小檢測時間,采用高斯圖像金子塔法來減少輸入圖像的數(shù)據(jù)量,并通過膚色提取來減少人臉檢測時窗口滑動的范圍來降低檢測時間。
(1)圖像金字塔
圖像金字塔對圖像處理有兩種方式,高斯金字塔是對圖像進行向下采樣處理,拉普拉斯金字塔則是對圖像進行重構。本文則是利用高斯金字塔,通過高斯平滑的方法對圖像進行濾波使其圖像的尺寸減少。圖像向下采樣過程要注意的采樣程度要適中,過大會導致檢測時間不能降低,圖像太小,則人臉檢測的正確率會減少。本文針對加州理工大學提供的人臉數(shù)據(jù)集進行測試,綜合考慮檢測正確率和實時性,確定將圖像向下采用,圖像尺寸為(320,240)最好。
(2)膚色提取
本文為了進一步減少檢測時間,采用膚色提取來初步檢測人臉范圍,并輸入人臉檢測的分類器來進行檢測。本文考慮到膚色模型YCbCr[16]模型亮度與色度是獨立存在,易于分離。膚色提取的方法采用的是YCbCr模型來提取人臉范圍。其中RGB圖像轉YCb-Cr圖像如式(1)所示:
本文為了克服不同圖片亮度的影響,將膚色提取固定閾值法進行改進,采用了動態(tài)閾值法,閾值計算如下:
設圖像的像素數(shù)為N,圖像的灰度范圍為[0,L-1],ni表示灰度級i的像素數(shù),pi為灰度級i的概率。則表達式為:
用閾值K把圖像的像素分成兩類,像素灰度值小于K的為背景類為C0,大于為目標類C1。
從而得出兩部分C0與C1兩部分的均值U0,U1:
其中 w0、w1為目標類 C0、C 的概率:
從而得出整幅圖像的均值:
由均值從而得出方差:
K值從0-255變化,通過上式計算的方差的最大值為最佳閾值分割,膚色提取效果如圖2中b圖所示。
圖2 膚色提取圖
后面為了消除噪聲帶來的誤差,采用形態(tài)學膨脹的操作來進行處理,效果如圖3中b圖所示,輸入圖像如圖3中c圖所示。
圖3 膨脹操作
本文分類器的設計是利用的方法是AdaBoost+MB_LBP,特征計算的方法采用積分圖的方式進行加速。
(1)AdaBoost算法
AdaBoost算法是一種自適應的迭代算法,其算法原理如下:
1)給定訓練樣本集 S,(X:正樣本;Y:負樣本)T 為訓練的最大循環(huán)次數(shù):
權重w1,i的第一個參數(shù)表示第幾輪迭代計算,第二個參數(shù)表示第幾個樣本。
3)迭代計算:
①訓練樣本的概率分布相當下,訓練弱分類器:
上式表明,第m次迭代計算得到的分類器,樣本分成兩種,-1和+1。其誤差和權重計算如下:
②計算弱分類器的錯誤率,使得誤差最?。?/p>
③計算該分類器的權重:
由該式子可知,誤差越小,分類器的權重越大。
④更新樣本權重分布:
每個樣本的權重計算如下:
Zm為規(guī)范化因子,其計算過程如下:
迭代計算完成,組合成弱分類器f(x):
經(jīng)T次循環(huán)后,得到T個弱分類器,按更新的權重疊加,最終得到的強分類器。
sign為符號函數(shù),因此最后強分類器輸出的結果為0或者為1。
(2)MB-LBP特征
MB_LBP特征又叫塊狀LBP特征,是LBP特征的改進版,LBP特征的編碼方式如圖4所示:
圖4 LBP編碼過程
由圖可知,每個圖像的3×3的區(qū)域為一個LBP特征,其值為8位二進制編碼,如上圖所示,其編碼之后特征值為126,而MB_LBP特征則是是由九個LBP特征組成,即圖5中一個gi代表一個LBP特征,MB_LBP特征的計算公式見式(20)。
圖5 MB_LBP特征
gi代表每個3×3的子區(qū)域的平均灰度值,s(x)是符號函數(shù)。圖6中b圖為整張人臉圖片計算得到的MB_LBP特征值。
圖6 人臉圖像特征MB_LBP
由圖可知,MB_LBP特征很好地描述圖像的紋理信息,并對圖像的邊緣、拐點、平坦區(qū)域都有很好的描述。
(3)分類器的訓練
由MB_LBP特征值得定義可知,特征值一共有28=256種情況。因此在此,本文采用多分支樹來作為本文的弱分類器,每個分支對應MB_LBP特征值,如式(21)所示:
Xi表示第X個樣本第i個 MB_LBP特征,由式(16)得到。aj表示相應的判決系數(shù),計算公式如公式(22)所示。
Yi表示訓練樣本,1代表正樣本,-1為負樣本,由此可知ai大于0則表示特征值為j的正樣本的可能性比較大。因此可設定閾值T來判別人臉。則分類器的訓練步驟如下:
對于給定的樣本,初始化權重wi=1/2N(N=(p,q)為正負樣本數(shù)量)。
迭代計算找到最優(yōu)弱分類器f(x),使得誤差最小。
輸出強分類器:
本次實驗的硬件平臺為Intel i5-5200U CPU@2.20GHz、8GB 內(nèi)存,軟件平臺為 Win7、OpenCV3.2+VS2015。選取的數(shù)據(jù)集測試數(shù)據(jù)集CMU+MIT、網(wǎng)絡下載和實際采集的照片,每張照片上的背景、表情、光照亮度以及人臉個數(shù)皆不一樣。實驗中視頻來源為實驗室同學拍攝。
本文用于訓練分類器的樣本包括13000正樣本,13000負樣本,采用Haar特征訓練分類器耗時18d11h23min,而采用 MB_LBP特征訓練則耗時為10d5h26min。
通過分析可知,對于同樣的訓練樣本大小(20×20),Haar特征數(shù)量為45891,而MB_LBP特征數(shù)量則為2049,因此訓練分類器的時間大大減少。
為了對比本文算法在人臉檢測的中準確率,選取數(shù)據(jù)集CMU+MIT部分照片(4000張)來進行測試。其實驗結果如表1所示:
表1 人臉檢測算法性能對比
由表1可見:經(jīng)過膚色提取后,檢測的正確率和效率都會得到提高。關于人臉圖像的描述能力,特征Haar<MB_LBP。這是因為MB_LBP特征有256種,而常見的Haar特征種類偏少,因此對圖像的描述能力較差。也正是由于MB_LBP特征種類很多,因此人臉特征描述地更加準確,因此誤檢率較低。
本文在測試人臉檢測時間上,選取數(shù)據(jù)集CMU+MIT部分照片(1000張),進行測試,其實驗結果如下表所示:
表2 人臉檢測時間對比
由表2可知,本文算法由于采用圖像金字塔和膚色提取,人臉檢測時間大大降低,可以達到實時人臉檢測的效果。
本文為了進一步證明實時人臉檢測,將本文基于圖片的人臉檢測改成基于視頻的人臉檢測。部分視頻幀檢測效果如圖7所示。
圖7 視頻部分幀檢測效果
本文由于采用的是MB_LBP特征,因此對旋轉角度人臉也有很好的魯棒性,本文對人臉四個不同方向的旋轉人臉進行檢測,以及多人臉照片進行檢測。旋轉人臉照片如圖8所示,多人臉檢測照片如圖9所示。
圖8 旋轉人臉檢測效果
圖9 多人臉檢測
本文提出了一種基于OpenCV實時人臉檢測。通過采用MB_LBP特征來替換傳統(tǒng)的Haar特征訓練分類器,來降低分類器的訓練時間,并在輸入圖像后采用圖像金字塔向下采樣減少輸入分類器的數(shù)據(jù)量和膚色提取來減少分類器滑動窗口滑動的范圍,從而極大程度降低檢測時間。本文實驗證明,本文人臉檢測算法,不僅可以提高人臉檢測的正確率,還能達到實時的人臉檢測,并對旋轉人臉檢測具有魯棒性。