吳紀(jì)蕓 陳時欽
摘要:人臉檢測主要運用于機場、火車站等人口密集場所。目前常用的人臉檢測算法有MTCNN、YOLOV3、faster-RCNN、SSD等,但已有算法難以兼顧檢測速度和檢測準(zhǔn)確性。通過改進多任務(wù)級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)(MTCNN)人臉檢測算法,將MTCNN、YOLOV3、faster-RCNN等3個模型進行整合,減少內(nèi)存與顯存之間的數(shù)據(jù)搬運;然后動態(tài)修改Minsize值,減少圖像金字塔中圖片生成數(shù)量,并根據(jù)圖像相似度對輸入圖片進行不同處理以提高效率。改進后的MTCNN算法比傳統(tǒng)MTCNN算法識別速度提高將近40%,且正確率達(dá)到97%,可更好滿足現(xiàn)代社會對于人臉檢測的應(yīng)用需求。
關(guān)鍵詞:多任務(wù)級聯(lián)卷積神經(jīng)網(wǎng)絡(luò);最小人臉大小;圖像金字塔;自適應(yīng);人臉檢測
DOI:10.11907/rjd k.191728
中圖分類號:TP312 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-7800(2019)012-0078-04
0引言
人臉檢測技術(shù)應(yīng)用場景豐富,如通勤人臉打卡、機場、火車站等閘機通道;公安機關(guān)通過分布在各處的攝像頭,運用人臉檢測技術(shù)識別犯罪分子;高速公路通過攝像頭檢測查獲超速的司機等,人臉檢測技術(shù)已滲入眾多行業(yè),成為社會生活中不可或缺的一部分。
但在實踐中人臉識別技術(shù)還存在一些不足,如人臉檢測速度較慢,乘客無法快速通過閘機;高速抓拍系統(tǒng)有時無法抓拍到違章司機面部。除去硬件原因,人臉檢測算法速度與準(zhǔn)確率也有待改進。
目前常見的人臉檢測算法是多任務(wù)級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)(Multi-task Cascaded Convolutional Network,MTCNN),其檢測準(zhǔn)確性極高,且能檢測到正臉、側(cè)臉,一般只需具有眼睛、鼻子或嘴巴其中一種特征的照片即可識別,但缺點是檢測速度較慢。
MTCNN主要分4個步驟:首先將獲取到的圖像進行不同尺度的縮放,構(gòu)建一個圖像金字塔以檢測不同尺寸的人臉圖像;其次,將縮放后的圖片分別傳入PNet層,該網(wǎng)絡(luò)結(jié)構(gòu)主要獲得邊界框回歸向量以及人臉區(qū)域的候選窗口。通過非極大值抑制(NMS)去除重合度很高的候選框,并通過回歸向量進行校正;然后,從PNet層輸出數(shù)據(jù)再傳入RNet層,該網(wǎng)絡(luò)結(jié)構(gòu)依然通過邊界框回歸和NMS去掉高度重合的區(qū)域,但由于該網(wǎng)絡(luò)結(jié)構(gòu)與PNet網(wǎng)絡(luò)結(jié)構(gòu)有差異,增加了一個全連接層,所以會取得更好的抑制作用;最后,將RNet輸出的結(jié)果傳人ONet層,該層相比于RNet層增加了一層卷積層,所以對面部細(xì)節(jié)的處理更加精細(xì),其作用與RNet層一樣,但因為該層對人臉區(qū)域進行了更多的監(jiān)督,所以最后可輸出具有人臉特征的框圖。
MTCNN算法使用圖像金字塔,可適應(yīng)不同的人臉圖像,使經(jīng)過縮放的人臉圖片更接近訓(xùn)練時使用的圖片大?。?0*20),因此檢測準(zhǔn)確性很高,但也因此圖像縮放及各層間數(shù)據(jù)傳遞、內(nèi)存與顯存間傳遞時耗較大。
本文研究內(nèi)容是如何在現(xiàn)有MTCNN人臉檢測算法的基礎(chǔ)上,既提高檢測速率又保持原有準(zhǔn)確性?;贛TCNN算法的基本框架,研究該算法中最影響速度及準(zhǔn)確性的PNet模型,根據(jù)畫面相似度,決定是否改變傳人模型最小人臉大?。∕inSize),從而減少金字塔圖像數(shù)目;并將MTCNN 3個模型(PNet、RNet、ONet)合并在一起訓(xùn)練,整合成一個模型,減少數(shù)據(jù)從內(nèi)存到顯存的次數(shù),加快人臉檢測速度;且在圖像前處理時,判斷畫面是否改變,如果相似度大于95%,則使用上一輪輸出結(jié)果,可大幅提升人臉檢測速度,又不影響人臉檢測準(zhǔn)確性。在圖像預(yù)處理階段,將縮放后的金字塔圖像整合在一張4K(根據(jù)實際情況可以修改)大小的畫面上,同時傳人縮放后圖像的位置信息,與原算法將縮放后的圖片逐一導(dǎo)入模型塊的做法相比,速度大幅提升。
1MTCNN人臉檢測算法改進
1.1MTCNN算法思路改進
(1)動態(tài)修改最小人臉大小。MTCNN算法中3個階段時間占比如圖1所示,從圖中可以看出Pnet階段時耗最大,如果圖片超過720p,其圖像金字塔生成過程時耗最大,且后續(xù)還要將生成的多張圖片分別傳人后端進行計算。因此本文根據(jù)最耗時的PNet階段,動態(tài)優(yōu)化MinSize參數(shù)。從圖2可知,MinSize直接影響第一階段的循環(huán)次數(shù),本文根據(jù)模型后端輸出適合的MinSize值與圖像匹配(大圖用大的MinSize,小圖用小的MinSize),可直接減少預(yù)處理階段圖像縮放次數(shù),并且在圖片金字塔生成過程中,僅對上一次縮放結(jié)果再進行縮放,而不是對全圖進行縮放,可縮短縮放時間。
(3)將3個模型整合在一起。從表1可以看出。網(wǎng)絡(luò)復(fù)雜度越高,GPU相對于CPU的計算優(yōu)勢越明顯。MTCNN算法的3個階段均是復(fù)雜度較低的網(wǎng)絡(luò),因此GPU的優(yōu)勢無法真正發(fā)揮。另外,MTCNN算法第一階段生成的圖像金字塔會反復(fù)多次調(diào)用相對簡單的PNet、Rnet、ONet網(wǎng)絡(luò),導(dǎo)致數(shù)據(jù)反復(fù)在顯存與內(nèi)存間搬運,時耗甚至超過計算本身。因此將3個模型整合,可減少大量傳輸時間。
(3)相似度大于95%的圖像不再傳人模型。因為大部分從相機傳人的圖像是半靜止畫面,如靜止的人物或頭部等,無需將圖像經(jīng)過多重處理再傳人模型,因為即使再次傳人,得到的結(jié)果也幾乎與原圖輸出結(jié)果一致。
(4)將縮放后的圖片拼接在一起傳人模型。在圖像金字塔生成過程中將生成多張經(jīng)過縮放后的圖片,如果將圖片逐一傳人模型,將增加內(nèi)存到顯存的傳送次數(shù),拖慢算法速度。
1.2人臉檢測流程
(1)從相機(1080p)獲取圖片,默認(rèn)設(shè)置最小人臉大小(MinSize)為20。
(2)通過MinSize值,將縮放后的圖像金字塔圖片拼接在一張4K大小的圖片上,將拼接后的圖片及每張縮放圖片在4K圖片上的位置信息傳人模型中。
(3)通過歐式距離相減計算兩張圖片相似度,如果前后兩張圖片的相似度大于80%(因為實際從相機獲取的圖片多為半靜止畫面,畫面變動比較?。?,則使用上一輪從模型后輸出的MinSize,若相似度小于80%則設(shè)置為20。
(4)如果兩張圖片相似度大于95%,直接輸出上一張圖片的結(jié)果,不拼接圖片也不將數(shù)據(jù)輸入模型。
(5)重復(fù)以上所有步驟完成人臉檢測。具體流程如圖3所示,檢測結(jié)果如圖4所示。
(5)非極大值抑制NMS指通過某種方式抑制并非極大值的元素。使用該方法可快速去掉標(biāo)定為不準(zhǔn)確且重合度很高的預(yù)測窗口。
在模型初始階段,會框出很多重合的人臉候選框,使用非極大值抑制可去掉預(yù)測分?jǐn)?shù)比較低的窗口,選取分?jǐn)?shù)比較高的窗口,再將對應(yīng)的預(yù)測窗口從模型后端輸入。
具體實現(xiàn)方法如下:假設(shè)有6個預(yù)測的矩形框,并將其按概率從高到低排序,依次為a>b>c>d>e>f:①從概率最高的矩形框a開始,分別判斷從b到f與a的重疊程度是否大于預(yù)先設(shè)定的某個閾值;②假如b,c與a的重疊程度(IOU)超過閾值,則舍棄b與c,并標(biāo)記矩形框a為經(jīng)過篩選保留后的結(jié)果;③從剩下的矩形框d、e、f中,選擇概率最大的d,然后判斷d與e、f的重疊程度,如果重疊度大于設(shè)置的閾值,則舍棄并標(biāo)記d是經(jīng)過篩選保留下來的第二個矩形框;④重復(fù)以上步驟,直到找到需要的所有窗口。
2MTCNN模型重建與訓(xùn)練
(1)將原有的pnet、rnet、oflet 3個模型拼接在一起,pnet的輸出作為rnet的輸入,rnet的輸出作為onet的輸入;將pnet、rnet的輸出結(jié)果進行邊框回歸及非極大值抑制,再將處理后的數(shù)據(jù)傳人下一層。
(2)從網(wǎng)上人臉庫下載包含不同亮度、不同角度的人臉圖片,并將其轉(zhuǎn)換成20*20的圖片,同時根據(jù)人臉情況,將其分成人臉(00.45)、部分人臉(0.45-0.8)、非人臉(00.45)。
(3)將數(shù)據(jù)拼接在一張4K的圖像上,并將各張小圖的信息傳人模型中,直到結(jié)果收斂為止。
3算法驗證
首先在一個空曠教室的4個角落分別布置好攝像頭,并在教室里布置好桌椅。
要求30位志愿者坐在教室中進行不同的活動,利用相機將教室中的場景錄制下來,拍攝時間為120分鐘,預(yù)設(shè)場景包括:①全部并排坐著正對著相機,保持1分鐘的靜止?fàn)顟B(tài);②并排坐著并適當(dāng)轉(zhuǎn)動臉,80%的人臉對著相機,保持1分鐘的靜止?fàn)顟B(tài);③并排坐著,適當(dāng)轉(zhuǎn)動臉,50%的人臉對著相機,保持1分鐘的靜止?fàn)顟B(tài);④并排坐著,適當(dāng)轉(zhuǎn)動臉,30%的人臉對著相機,保持1分鐘的靜止?fàn)顟B(tài);⑤并排坐著,適當(dāng)轉(zhuǎn)動臉,10%的人臉對著相機,保持1分鐘的靜止?fàn)顟B(tài);⑥在①、②的基礎(chǔ)上調(diào)整光線亮度為正常亮度的4/5;⑦在①、②的基礎(chǔ)上調(diào)整光線亮度為正常亮度的3/5;⑧在①、②的基礎(chǔ)上調(diào)整光線亮度為正常亮度的2,5;⑨在①、②的基礎(chǔ)上調(diào)整光線亮度為正常亮度的i/5。⑩讓30位志愿者分別在房間里走動,不需要正對著相機,在志愿者走動的過程中,按步驟⑥一⑨調(diào)整光線亮度;⑩分別調(diào)整①一⑨中志愿者與相機的距離,使人臉大小分別為100*100、80*80、60*60、50*50、40*40、30*30、20*20。
按步驟①-⑩分別截取1分鐘的錄像,截取其中的圖片,并將其拼接成4k的圖片導(dǎo)人模型;需框出步驟①所得圖片中所有人臉,并且輸出的人臉分?jǐn)?shù)在0.8以上;框出步驟②-⑤所得圖片人臉,并且輸出的人臉分?jǐn)?shù)需在0.45.0.8之間(圖像中至少有一個人臉特征);框出步驟⑥-⑨所得圖片的人臉,但是分?jǐn)?shù)遞減;步驟⑩所得圖片根據(jù)情況,如果有一個人臉特征,均應(yīng)框出。
將步驟⑩中不同人臉大小的圖片拼接傳人模型,測試模型末端輸出的最小人臉大小,如果輸出結(jié)果不對,則需要再調(diào)整模型參數(shù)。
如果測試結(jié)果與預(yù)期結(jié)果不匹配,則根據(jù)本文人臉檢測步驟重新訓(xùn)練,直到結(jié)果與預(yù)期結(jié)果相同為止。
4結(jié)語
本文提出改進的MTCNN算法,通過動態(tài)設(shè)置最小人臉,整合3個模型于一體,并且根據(jù)歐式距離計算相似度,不再檢測相似度高的圖片,既極大提高了檢測速度,又保證了檢測正確性。同時本文算法準(zhǔn)確性依賴于訓(xùn)練樣本是否全面,算法需用到大量人臉數(shù)據(jù),還需訓(xùn)練不同光線、角度、長相的人臉,因此人臉庫是否全面,很大程度上影響算法現(xiàn)實檢測準(zhǔn)確性。與原MTCNN算法相比,優(yōu)化后的算法提高了近40%的速度,更能滿足社會需求。