朱國(guó)華,徐 昆
(江漢大學(xué)人工智能學(xué)院,湖北 武漢 430056)
人臉檢測(cè)問題源自于人臉識(shí)別,人臉識(shí)別是當(dāng)今最為有效和最受歡迎的驗(yàn)證手段之一,被廣泛應(yīng)用于手機(jī),電腦,門禁等設(shè)備上。隨著人臉識(shí)別被廣泛地應(yīng)用,人臉檢測(cè)也開始作為一個(gè)單獨(dú)的問題被重視起來(lái)。一般情況下,人臉檢測(cè)系統(tǒng)面臨的使用情形復(fù)雜,它必須能夠在不同的環(huán)境識(shí)別出人臉,這要求它在有著較高識(shí)別率之外還必須能夠?qū)Σ煌沫h(huán)境進(jìn)行適應(yīng)。目前人臉檢測(cè)與人臉識(shí)別相關(guān)的技術(shù)被用在各種領(lǐng)域,它在信息檢索、目標(biāo)監(jiān)測(cè),目標(biāo)追蹤,自動(dòng)駕駛等方面也有著重要的學(xué)術(shù)價(jià)值與應(yīng)用價(jià)值[1]。
HOG是目標(biāo)檢測(cè)領(lǐng)域中的常用算法,它通過(guò)計(jì)算圖像的梯度方向與大小,從而獲得圖像關(guān)于梯度的統(tǒng)計(jì)描述子。算法具有光照不變性,平移不變性和旋轉(zhuǎn)不變性等特點(diǎn)[2]。在它們基礎(chǔ)之上而改進(jìn)的算法,如:文獻(xiàn)[3]中通過(guò)內(nèi)嵌一個(gè)支持向量機(jī)(SVM)分類器的HOG特征提取歸一化模塊,來(lái)提高行人檢測(cè)的準(zhǔn)確性和計(jì)算效率;文獻(xiàn)[4]中通過(guò)人體目標(biāo)圖像的局部二值模式(LBP)與HOG分層融合的GEI識(shí)別算法,來(lái)提高再步態(tài)識(shí)別上的檢測(cè)識(shí)別率。可以說(shuō),HOG以及基于它之上而改進(jìn)的算法在目標(biāo)檢測(cè)等領(lǐng)域中有著非常重要的位置。
隨著深度學(xué)習(xí)模型AlexNet在ImageNet比賽中奪冠,各種深度學(xué)習(xí)模型被應(yīng)用于人臉檢測(cè)等計(jì)算機(jī)視覺問題上[5]。深度學(xué)習(xí)算法通過(guò)卷積神經(jīng)網(wǎng)絡(luò)對(duì)圖像進(jìn)行掃描,具有很好的平移不變性和尺度不變性,如:R-CNN、Fast-RCNN等[6]。針對(duì)Fast-RCNN對(duì)小目標(biāo)物體檢測(cè)效果不好的問題,R-FCN使用全卷積網(wǎng)絡(luò)ResNet來(lái)減少對(duì)圖像同一區(qū)域的重復(fù)采樣,從而提升了特征提取與分類的效果[7]。Mask R-CNN通過(guò)雙線性差值 RoIAlign 算法對(duì)Faster R-CNN做出改進(jìn),使得對(duì)目標(biāo)人臉的進(jìn)度達(dá)到了像素級(jí)[8]。有些深度學(xué)習(xí)算法可以將檢測(cè)和識(shí)別融合到一步之中,算法直接讀入原始圖像并輸出人臉檢測(cè)和人臉識(shí)別的結(jié)果,這樣可以大大簡(jiǎn)化認(rèn)證過(guò)程步驟,如:DeepFace、DeepID、FaceNet等[9]。深度學(xué)習(xí)算法計(jì)算復(fù)雜,相較于傳統(tǒng)算法有著更高的識(shí)別或是檢測(cè)正確率。不過(guò),深度學(xué)習(xí)算法一般來(lái)說(shuō)運(yùn)算量大,需要有大量的數(shù)據(jù)來(lái)進(jìn)行訓(xùn)練擬合,并且還有著解釋性較弱等缺點(diǎn)。
目前基于原始HOG的改進(jìn)算法僅使用梯度信息來(lái)提取特征描述符,從而造成模型不穩(wěn)定,并且在面對(duì)模糊圖像和邊緣光滑圖像時(shí),不能有效地提取圖像信息。為了進(jìn)一步提高HOG算法的穩(wěn)定性與檢測(cè)效果,針對(duì)原始HOG算法的不足之處提出一種改進(jìn)的HOG算法,將HOG算法提取的信息與圖像的單元均值,方差等進(jìn)行融合,從而提出一種全新的更加有效的HOG算法。之后再將HOG與SVM算法相結(jié)合,通過(guò)多尺度檢測(cè)和非極大抑制算法,使SVM模型可以泛化到任意尺度進(jìn)行人臉檢測(cè)。最后設(shè)計(jì)了對(duì)比試驗(yàn)并給出了其實(shí)驗(yàn)結(jié)果,對(duì)比分析了在不同參數(shù)設(shè)置下原始HOG算法與新算法的檢測(cè)效果,實(shí)驗(yàn)證明改進(jìn)的HOG算法相較于原始算法在人臉檢測(cè)的正確率上有明顯提升。
圖1 HOG特征提取過(guò)程中圖像的變化
圖2 改進(jìn)的HOG算法流程圖
HOG最初是Dalia等提出的一種用于行人檢測(cè)的算法,后來(lái)被研究應(yīng)用于人臉檢測(cè)等領(lǐng)域。由于顏色在目標(biāo)檢測(cè)問題中所起的作用非常小,因此HOG算法忽略圖像中顏色信息的影響,首先對(duì)圖像進(jìn)行灰度化。為了保證光照不變性,再對(duì)整個(gè)圖像進(jìn)行全局歸一化。HOG算法在圖像中大小一致并且密集的cell單元計(jì)算梯度大小與方向并進(jìn)行統(tǒng)計(jì),然后在block范圍內(nèi)進(jìn)行合并和局部歸一化來(lái)提高HOG算子的特征描述能力,其處理效果如圖1所示。
HOG算法流程如下:
1) 對(duì)原始圖像進(jìn)行灰度化,;
2) 對(duì)原始圖像進(jìn)行歸一化,通常是使用Gamma校正法,這樣可以抑制圖像局部陰影和光照帶來(lái)的影響;
3) 計(jì)算圖像每一個(gè)像素的梯度大小與梯度方向;
4) 將圖像切割成大小相同的單元;
5) 對(duì)每一個(gè)單元的梯度信息進(jìn)行統(tǒng)計(jì),得到它的統(tǒng)計(jì)描述直方圖。通常是用8個(gè)方向?qū)μ荻刃畔⑦M(jìn)行統(tǒng)計(jì),這梯度直方圖所代表的向量便是它的描述子;
6) 將相鄰的cell單元的統(tǒng)計(jì)特征向量進(jìn)行合并,得到每一個(gè)block的特征向量;
7) 將圖像內(nèi)的所有block的描述子合并起來(lái)就可以得到該原始圖像的HOG特征描述子,即特征向量;
8) 將訓(xùn)練集提取出來(lái)的HOG特征向量供SVM模型訓(xùn)練,得到基分類器;
原始HOG算法對(duì)圖像特征的提取過(guò)于簡(jiǎn)單,僅僅是對(duì)圖像的梯度信息做統(tǒng)計(jì),而沒有考慮其它信息,如均值,方差等。為了在圖像中提取出更為有效的信息,改進(jìn)的HOG算法基于多種維度信息,不僅提取出了圖像中代表了圖像的梯度信息的HOG特征,同時(shí)還提取出了每一個(gè)單元的均值與方差信息,它們分別代表了圖像的大小與波動(dòng)的信息,最后,將圖像每一個(gè)單元的均值與標(biāo)準(zhǔn)人臉每一個(gè)單元的均值進(jìn)行比較,它代表圖像與一般臉的差值信息,其處理流程如圖2所示。
新算法步驟如下:
1) 在全局歸一化的基礎(chǔ)上,計(jì)算每一個(gè)cell單元的均值,方差;
2) 計(jì)算訓(xùn)練集所有圖像的平均值;
3) 計(jì)算原始圖像與平均值圖像的差值,取絕對(duì)值;
4) 計(jì)算差值圖像每個(gè)cell的均值;
5) 將(1),(4)得到的特征展開,再與原始HOG特征結(jié)合;
用blockH表示block塊的高度,blockW表示block塊的寬度,blockStrideH表示block塊在高度方向上的間隔,blockStrideW表示block塊在寬度上的間隔,cellH表示cell單元的高度,cellW表示cell單元的高度。
原始HOG算法,處理一張(height-width)格式的圖像進(jìn),其特征數(shù)為
featureNum=
((height-blockH)÷blockStrideH+1)×
((width-blockW)÷blockStrideW+1)
(1)
在新算法中,每張圖像特征數(shù)的計(jì)算方式為
eatureNum=
((height-blockH)÷blockStrideH+1)×
((width-blockW)÷blockStrideW+1)+
(height÷cellH)×(width÷cellH)×3
(2)
提取出了訓(xùn)練集的特征向量之后,需要有一個(gè)基分類器對(duì)人臉,和非人臉進(jìn)行判斷。支持向量機(jī)(SVM)是統(tǒng)計(jì)學(xué)習(xí)中一個(gè)經(jīng)典的二分類算法[10],使用它可以很好地解決這個(gè)問題,其基本思想如下:
給定樣本集:D={(x1,y1),(x2,y2),…,(xn,yn)},yi∈(1,-1)。線性分類器基于樣本D在特征空間中找到超平面來(lái)分開二類樣本,在二維特征空間其分類效果如圖3所示。對(duì)于可能存在的多個(gè)超平面,算法要找到使得間隔最大化的超平面。最后經(jīng)過(guò)推導(dǎo),它等于以下優(yōu)化問題
(3)
s.t.yi(wTxi+b)≥1,i=1,2,…,n
(4)
使用核技巧,也可以將它用于非線性問題上。對(duì)于一般的數(shù)據(jù)集,有時(shí)并不存在任何超平面可以分割正反樣本,這時(shí)需要對(duì)SVM進(jìn)行軟間隔設(shè)置,允許它在一定程度上犯錯(cuò)。在本文后面,將討論不同軟間隔設(shè)置對(duì)于模型正確率的影響。
圖3 SVM分類原理圖
訓(xùn)練一旦完成,支持向量機(jī)就只能對(duì)特定長(zhǎng)度的特征向量進(jìn)行檢測(cè)。如果在訓(xùn)練中使用8*8的cell單元,則SVM也只能檢測(cè)8*8大小的目標(biāo)。要想使用它檢測(cè)出一張圖片中不同大小尺度的人臉,還需要使用多尺度檢測(cè)與非極大抑制。
多尺度檢測(cè)算法可以消除圖像尺度差異帶來(lái)的影響,通過(guò)對(duì)圖像進(jìn)行縮小,并且在每一張縮小的圖像上進(jìn)行掃描檢測(cè),從而發(fā)現(xiàn)不同大小的目標(biāo)。要實(shí)現(xiàn)多尺度檢測(cè),通常的做法是使用相對(duì)坐標(biāo)來(lái)記錄矩陣的位置。如以圖像的左上角為原點(diǎn),向下,向右為正方向,如果一個(gè)矩陣上下左右的坐標(biāo)分別為(u,d,l,r),則它的相對(duì)坐標(biāo)可以表示為(u/H,d/H,l/W,r/W)。通過(guò)對(duì)圖像不斷的進(jìn)行縮放,可以將圖像中的人臉縮放到檢測(cè)器可以檢測(cè)出來(lái)的大小,然后記錄人臉的相對(duì)坐標(biāo),最后,對(duì)所有人臉坐標(biāo)通過(guò)以上過(guò)程的逆轉(zhuǎn)換,便可以編程(H,W)尺度下的絕對(duì)坐標(biāo)。
假設(shè)有一個(gè)訓(xùn)練好的分類器classifier可以對(duì)(h,w)大小的圖像進(jìn)行檢測(cè),對(duì)于人臉圖像輸出1,對(duì)于非人臉圖像輸出0,現(xiàn)在輸入一張(H,W)尺度大小的圖像,則多尺度檢測(cè)的描述過(guò)程如下:
多尺度檢測(cè)算法:
position=None
while true:
滑動(dòng)窗口遍歷圖像得到圖像片段fragment
if 滑動(dòng)窗口出界:
break
if classifier(fragment)=1:
添加fragment的相對(duì)位置到position
else:
進(jìn)入下一個(gè)窗口,更新fragment
非極大抑制算法將圖像中重合率過(guò)高的目標(biāo)位置進(jìn)行抑制,只保留置信度最高的目標(biāo),這樣就可以消除相鄰區(qū)域內(nèi)的同一識(shí)別目標(biāo)。要實(shí)現(xiàn)非極大抑制算法,首先要對(duì)兩個(gè)矩陣的相交面積進(jìn)行計(jì)算。因?yàn)閮蓚€(gè)矩陣如果相交,那么它們的相交部分也是一個(gè)矩陣,這樣,就可以通過(guò)計(jì)算相交部分的wide和height來(lái)計(jì)算相交分布的面積。然后,對(duì)于輸入的一系列矩陣坐標(biāo),假設(shè)有n個(gè)矩陣的坐標(biāo),先計(jì)算它們的相交面積矩陣,這是一個(gè)n*n的矩陣。先找出相交面積最大的兩個(gè)矩陣,如果它們的重合部分的面積達(dá)到一定的比例,如1/4的矩陣面積,則對(duì)這兩個(gè)矩陣進(jìn)行非極大抑制,即消除它們中置信度較小的一個(gè)。一直持續(xù)這一過(guò)程,直到任意兩個(gè)矩陣的相交面積都達(dá)到要求,其抑制過(guò)程如圖4所示。
非極大抑制算法:
input::矩陣位置P,置信度R
output:非極大抑制后的矩陣位置
while True:
if P中任意兩個(gè)矩陣的相交面積小于它們最小值的二分之一:
break;
else:
得到相交面積最大的兩個(gè)矩陣P[i],P[j]
if R[i]>R[j]:
P中刪j號(hào)元素, R中刪除j號(hào)元素
else:
P中刪除i號(hào)元素, R中刪除i號(hào)元素
本文采用LWF數(shù)據(jù)集進(jìn)行訓(xùn)練與驗(yàn)證。LFW是一個(gè)大型人臉數(shù)據(jù)集,它總共包含13000多張圖片。其中,1600個(gè)人以上包含了至少兩張人臉。該人臉數(shù)據(jù)集包含許多文件夾,每一個(gè)文件夾代表同一個(gè)人在不同狀態(tài)下的人臉圖像,本文使用它的前3000張人臉圖像作為正例。同時(shí),從互聯(lián)網(wǎng)上采集了3000張不包含人臉的圖像作為反例。因此,本文一共使用了6000張圖像參與學(xué)習(xí)與驗(yàn)證,并且這6000張圖像統(tǒng)一壓縮到64*64大小,處理效果如圖(5)所示。
圖5 LWF數(shù)據(jù)集示例
將6000張圖像中的3000張供給SVM模型進(jìn)行訓(xùn)練,另外300張用于測(cè)試。本文使用線性SVM進(jìn)行訓(xùn)練和檢測(cè),其中設(shè)置軟間隔參數(shù)C=0.5.在原始HOG算法中,默認(rèn)的blockStride與cellSize相同,實(shí)驗(yàn)在PC臺(tái)式機(jī),win10下研究進(jìn)行。本文研究了在不同cellsize情況下,不同算法對(duì)正確率的影響,其實(shí)驗(yàn)結(jié)果如圖6所示。
圖6 實(shí)驗(yàn)結(jié)果注:a)左上為使用原始HOG算法(算法1),b)右上為使用cell均值算法(算法2),c)左下為使用cell方差算法(算法3),d)右下為去中心化后的cell均值算法(算法4)
從以上實(shí)驗(yàn)數(shù)據(jù)可以看出,算法1,算法2在不同cellSize大小下精確度較高,算法3,算法4的精確度隨cellSize大小變化波動(dòng)較大。在綜合考慮運(yùn)算量與精確度的情況下,本文在算法1,算法2,算法3,算法4中最后使用的cellSize大小分別為(8,8),(8,8),(2,4),(4,8)。在上述參數(shù)設(shè)置下,新算法與原始算法的對(duì)比結(jié)果如圖7所示。
圖7 原始HOG算法與改進(jìn)的HOG算法的對(duì)比曲線
通過(guò)以上實(shí)驗(yàn)數(shù)據(jù)可以看出,在不同cellSize尺度下,改進(jìn)的HOG算法相較于原始算法均有著更高的正確率。在cellSize尺度較小時(shí),根據(jù)式(1)和式(2),兩種算法提取的特征數(shù)都很多,計(jì)算量都很大,可以從原始圖像提取充分的信息,它們?cè)隍?yàn)證集上的表現(xiàn)差異不大,新算法只稍微優(yōu)于原始算法。在cellSize尺度大于(8*8)時(shí),兩種算法提取的特征數(shù)和計(jì)算量以O(shè)(cellSize[0]×cellSize[1])的方式下降,此時(shí)改進(jìn)的HOG算法明顯優(yōu)于原始算法。在cellSize為(16*16)時(shí),新算法比原始算法高1.7%。最后,針對(duì)新算法中cellSize為(8*8)的情況,研究了在SVM中,不同軟間隔設(shè)置對(duì)正確率的影響,結(jié)果如圖8所示??梢钥闯觯涢g隔參數(shù)設(shè)置C=0.01時(shí),其識(shí)別率最高,達(dá)到99.6%。
圖8 懲罰因子C與正確率的關(guān)系圖
本文提出了一種經(jīng)過(guò)單元均值與方差等信息而改進(jìn)的HOG算法,HOG算法使用圖像的梯度信息對(duì)圖像進(jìn)行描述,描述信息過(guò)于單一,且只進(jìn)行了局部歸一化,不能有效的消除全局明暗差異帶來(lái)的影響。新的算法在原始HOG算法提取的特征的基礎(chǔ)上,還加入了全局歸一化后的單元均值,單元方差等信息,從而有效地解決了以上問題。本文使用LWF人臉數(shù)據(jù)集,在不同cellSize大小下,對(duì)原始HOG算法和新HOG算法做出了對(duì)比。實(shí)驗(yàn)結(jié)果表明,經(jīng)過(guò)改進(jìn)后HOG算法在不同的cellsize參屬下的準(zhǔn)確率都要高于原始算法,特別是在cellSize尺度較大時(shí)效果提升明顯。相較于深度學(xué)習(xí)算法,HOG算法解釋性強(qiáng),具有強(qiáng)大的特征提取能力。但其檢測(cè)正確率和穩(wěn)定性不如深度學(xué)習(xí)算法,之后的研究可將它們結(jié)合,從而使算法的性能達(dá)到新的高度。