李麗平,許營坤,王嘉航
(1.浙江商業(yè)職業(yè)技術學院 財會金融學院,浙江 杭州 310053;2.浙江工業(yè)大學 計算機科學與技術學院,浙江 杭州 310023)
人臉檢測是一種基于人工智能(AI)的計算機技術,其作用是在數(shù)字圖像中查找和識別人臉。該技術不僅作為面部跟蹤、面部分析和面部識別等應用程序的第一步發(fā)揮著關鍵作用,而且在人證比對、安防、娛樂和社交網(wǎng)絡等領域起到重要作用,同時在手機、數(shù)碼相機等電子產(chǎn)品中可以使用該技術,檢測并定位人臉。該技術支持姿勢、表情、位置、方向、夜晚和膚色等復雜環(huán)境,從正面和側面等多個角度檢測人臉的位置。在人臉識別過程中,人臉檢測是整個人臉識別算法的第一步。
人臉檢測算法的輸入是一幅圖像,輸出是若干個包含人臉的矩形框坐標(x,y,w,h)。早期人臉檢測算法采用模板匹配,即用人臉的模板圖像匹配待檢測的圖像的各個位置,匹配內容是提取的特征,根據(jù)特征判斷該位置是否存在人臉。經(jīng)過早期后,機器學習算法被用于該問題,包括神經(jīng)網(wǎng)絡、支持向量機等。其中,Rowley等[1-2]提出的多層感知器模型人臉檢測和Viola等[3]提出的VJ算法具有代表性,這些方法雖然在人臉檢測領域早中期的意義重大,但是隨著卷積神經(jīng)網(wǎng)絡CNN的提出及廣泛應用,CNN在人臉檢測技術上有了很大的突破,在準確度上明顯超越之前的AdaBoost框架。Hand等[4]總結了近年來基于深度學習的人臉檢測發(fā)展歷程。Zhan等[5]在2016年ECCV會議上提出了一種基于級聯(lián)架構的多任務卷積神經(jīng)網(wǎng)絡MTCNN,其可以同時完成人臉檢測和人臉對齊任務。在工程實踐上,MTCNN是一種檢測速度和準確率均較高的算法,應用范圍較廣。研究發(fā)現(xiàn):在MTCNN三層級聯(lián)網(wǎng)絡結構中,P-Net不僅耗時最多,約占75%,而且圖片越大,耗時越長,其次是R-Net耗時較多。另外發(fā)現(xiàn)噪點比較多的夜間圖像,由于噪點多的問題,導致P-Net誤檢率高。吳紀蕓等[6]通過整合不同網(wǎng)絡模型,改進了多任務卷積神經(jīng)網(wǎng)絡,通過動態(tài)修改Minsize值,提出了一種改進的MTCNN人臉檢測算法。改進后的算法減少了圖像金字塔中圖片生成的數(shù)量,達到優(yōu)化網(wǎng)絡的目的。賈小碩等[7]在MTCNN基礎上設計了MT-Siam網(wǎng)絡,引用了SiameseNet并設計輕量化的Siam相似度判斷因子,提升復雜背景下人臉檢測效率。薛晨等[8]采用Retinex理論對圖像進行增強,提高MTCNN在不同光照場景下的人臉檢測精度。
筆者研究在MTCNN人臉檢測算法的基礎上,提高檢測速度和檢測精度。針對MTCNN三層級聯(lián)網(wǎng)絡結構中P-Net和R-Net耗時較多的問題,提出一種改進的基于錨框稀疏圖像金字塔的MTCNN人臉檢測方法,采用錨框的思路增加生成框的密度,減少圖像金字塔層數(shù),構建基于錨框的稀疏圖像金字塔,從而提高P-Net檢測速度;采用深度可分離卷積的思路來改進R-Net網(wǎng)絡結構,去掉池化層,修改前2個卷積層的步幅,修改第3個卷積層為可分離卷積,降低R-Net模型的參數(shù)計算量,進而提高R-Net檢測速度。同時,在P-Net檢測前進行一次中值濾波,減少圖像噪點,降低P-Net誤檢率。在Windows和Android平臺,使用CPU處理器,采用單線程方式進行對比實驗測試。實驗結果表明:改進的MTCNN在檢測精度略提升的情況下,在Windows和Android平臺的檢測速度均提升一倍,應用價值較高。
MTCNN主要分4個步驟:生成圖像金字塔,進行3個逐級遞進的級聯(lián)網(wǎng)絡P-Net、R-Net和O-Net訓練。
原始圖像縮放成不同的尺度,生成圖像金字塔,將縮放后的圖像輸送入P-Net、R-Net和O-Net 3個子網(wǎng)絡中進行訓練,目的是可以檢測到不同尺寸的人臉,從而實現(xiàn)多尺度目標檢測。
P-Net是一個人臉區(qū)域的候選網(wǎng)絡。網(wǎng)絡的輸入設置為12×2×3的圖像。經(jīng)過3層卷積層后,確定12×12圖像中的人臉,并且給出人臉框和人臉關鍵點信息,利用非極大值抑制算法(Non-maximum suppression,NMS)校準邊框,去除多余邊框。
網(wǎng)絡輸出有兩部分。第一部分輸出向量大小為1×1×2,即兩個值,判斷圖像中的人臉。第二部分顯示了框的確切位置,一般被稱為框回歸。P-Net導入的12×12的圖像塊對應的人臉并非全部為正方形。如:12×12的圖像偏左或偏右,這時需要計算當前框所在位置相對于完美人臉框位置的偏移,偏移大小為1×1×4。第三部分給出面部的5個關鍵點位置。5個關鍵點分別對應鼻子、左眼、右眼、左嘴巴和右嘴巴的位置。每個關鍵點用兩維來表示,因此,輸出是大小為1×1×10的向量。
R-Net用于否決P-Net生成大部分錯誤的檢測框,該方法應用了檢測框回歸和NMS合并的檢測框。將P-Net候選框對應原圖并截取,同時,將截取圖像縮放到24×24×3,作為R-Net的輸入,網(wǎng)絡的輸出與P-Net相同。
由網(wǎng)絡結構可知:R-Net網(wǎng)絡的結構與P-Net網(wǎng)絡不同,增加了一個全連接層從而微處理圖像的細節(jié)化,過濾重復且不符合要求的候選框,并且利用NMS進行候選框合并處理。
O-Net更進一步篩選檢測框,與R-Net的處理方法一致,將上一層的輸出候選框的人臉區(qū)域縮放到48×48×3作為O-Net的輸入,網(wǎng)絡的輸出是一樣的,包括N個邊界框的坐標信息,score以及關鍵點位置。由網(wǎng)絡結構可知:這一層比R-Net層多一個卷積層,因此可以得到更加精細的處理結果。
從P-Net到R-Net再到O-Net,輸入到網(wǎng)絡的圖像越來越大,卷積層的通道數(shù)也越來越多,網(wǎng)絡的深度(層數(shù))也越來越深,因此檢測人臉的準確率也越來越高。在檢測之前,需要通過中值濾波進行降噪處理。中值濾波是處理中心像素點的鄰域,其處理方式不能線性表達式表示。某個像素點的濾波結果就是用濾波器包圍的圖像區(qū)域中像素的灰度值的中值來替代該像素的值。計算式為
f(x,y)=median(x,y)∈sxy{g(x,y)}
(1)
式中:f(x,y)為濾波輸出;sxy{.}為以(x,y)為中心的濾波窗口中的所有坐標點;g(x,y)為坐標點(x,y)處的灰度值;median(.)為中值濾波處理。通過上述處理,減少圖像噪點,從而降低P-Net誤檢率。
在完成濾波處理后,進行MTCNN訓練過程,該過程包含3個任務,分別是人臉和非人臉的分類、人臉檢測框的回歸以及面部關鍵點的定位。
首先,人臉和非人臉的分類任務,使用交叉熵損失函數(shù),計算式為
(2)
然后,檢測框回歸的任務,采用歐幾里得損失函數(shù),計算式為
(3)
最后,人臉關鍵點定位的任務,采用歐幾里得損失函數(shù),計算式為
(4)
(5)
同時,提出一種在線的困難樣本挖掘方法,降低了人工選擇樣本的難度和工作量。該方法記特征距離D的對角線元素為d1={dii}i=1,2,…,n;非對角線元素為d2={dij}i,j=1,2,…,n。在每步迭代過程中消除冗余的負樣本,該方法得到的特征距離D是對稱矩陣。為避免樣本重復,僅挑選D的上半角矩陣參與訓練:d0={dij}i,j=1,2,…,ni 因為P-Net網(wǎng)絡是通過單尺度(12×12)圖像訓練,所以想要識別各種尺度的人臉,需要應用圖像金字塔技術。首先將原圖等比縮放(12/minsize);然后按縮放因子factor(如0.709)用上一次的縮放結果不斷縮放,直至最短邊小于或等于12。每種尺度的圖像均需要輸入模型。采用圖像金字塔,在不同分辨率下檢測不同尺寸的目標,該方法主要缺點是增加了計算量,主要原因是生成的“金字塔”層數(shù)越多,P-Net計算耗時越多。 因此,針對上述問題,采用多尺度密集錨框檢測不同尺度的目標,從而減少圖像金字塔層數(shù)。該方法在SSD,YOLO系列等優(yōu)秀的目標檢測模型中得到了廣泛應用。 通過遍歷輸入圖像的像素框,選出正確的目標框,并調整位置和大小,完成目標檢測任務。如圖1所示,以一個錨點為中心,生成3種尺寸的正方形的框(灰色、黑色、灰色中的正方形框),對每個正方形框生成2種擴展尺度的框(每種顏色的另外2個長方形),共生成9個錨框。 圖1 錨框示意圖 錨框的尺寸和長寬比的設計難度大,常見的設計方式有以下3種:1)人為經(jīng)驗選取;2)k-means聚類;3)作為超參數(shù)進行學習。YOLOv3算法[9]中錨框的長寬比是通過分析COCO數(shù)據(jù)集中對象長寬比,使用k-means估算得到的。YOLOv5算法[10]中錨框的長寬比是一個超參數(shù),可以在模型的配置文件中配置。 采用錨框的思路,增加生成框密度,減少檢測金字塔層數(shù),生成基于錨框的稀疏圖像金字塔,從而提高檢測速度,改進對照圖如圖2所示。選用APN24來替代P-Net,APN24網(wǎng)絡結構體如圖3所示。 圖2 圖像金字塔改進對照圖 圖3 APN24網(wǎng)絡結構 該網(wǎng)絡的輸入為一個24×24×3圖像,網(wǎng)絡輸出的第一部分用于判斷圖像中是否存在人臉。輸出向量大小為1×1×2×k,即2k個值,其中k表示錨框數(shù)量。網(wǎng)絡輸出的第二部分是人臉框位置偏移量,偏移量采用Fast-RCNN的方式,即中心點偏移值和寬高對數(shù)偏移值,輸出向量大小為1×1×4×k,即4k個值,其中k表示錨框數(shù)量。 深度可分離卷積方法[11-13]在MobileNet系列中得到了深入的應用。深度可分離卷積由深度卷積和逐點卷積兩個部分組成。深度卷積的一個卷積核負責一個通道,一個通道只由一個卷積核進行卷積,具體情況如圖4所示。逐點卷積的操作與常規(guī)卷積操作相似,其卷積核大小為1×1×M,其中M是前一層的通道數(shù),具體情況如圖5所示。 圖4 深度卷積示意圖 圖5 逐點卷積示意圖 假設存在這樣一個場景,上一層有一個5×5大小,3個通道的特征圖,需要通過卷積操作,輸出4個通道的特征圖,并且尺寸大小前后一致。對比常規(guī)卷積和可分離卷積的參數(shù)量和計算量的差異,具體情況如表1所示。 起初只是要求將打亂順序的有絲分裂各個時期的細胞進行排序,這樣的設計可以考查學生對細胞有絲分裂各個時期特點的掌握程度;之后增加對細胞中染色體、染色單體和D N A分子的數(shù)目變化這一重點內容,在游戲的過程中,這對學生具有足夠的挑戰(zhàn)性。在游戲設計過程中也不應該將太多的知識點包含進來,因為這樣將會使游戲的難度過大。 表1 常規(guī)卷積和可分離卷積的參數(shù)量和計算量的差異 常規(guī)卷積的參數(shù)量:3×3×3×4=108;計算量:3×3×3×4×5×5=2 700 FLOPs??煞蛛x卷積的參數(shù)量:3×3×3+1×1×3×4=41;計算量:3×3×3×5×5+1×1×3×4×5×5=975 FLOPs。相同大小的輸入,同樣相同大小的輸出,可分離卷積的參數(shù)量是常規(guī)卷積的約1/3,計算量是常規(guī)卷積約1/3。采用可分離卷積改造R-Net網(wǎng)絡結構,去掉池化層,將前兩個卷積層的步幅修改為2,第3個卷積層修改為可分離卷積層,網(wǎng)絡結構的改進情況如圖6所示。 圖6 R-Net網(wǎng)絡結構改進對照圖 對比R-Net網(wǎng)絡結構和改進的R-Net網(wǎng)絡結構的參數(shù)量和計算量的差異,具體情況如表2所示。改進的R-Net網(wǎng)絡結構的計算量約為原來的1/3,從而提高R-Net檢測速度。 表2 R-Net和改進的R-Net的參數(shù)量和計算量的差異 從WIDER Face數(shù)據(jù)集隨機裁剪獲取正樣本、負樣本和部分樣本,從CelebA數(shù)據(jù)集隨機裁剪獲取關鍵點人臉,用于模型訓練。FDDB數(shù)據(jù)集用于模型測試。 1)WIDER Face數(shù)據(jù)集是人臉檢測基準數(shù)據(jù)集。該數(shù)據(jù)集的圖像來源為WIDER數(shù)據(jù)集,從數(shù)據(jù)集隨機挑選32 203張圖像并進行人臉標注,總共標注了393 703個人臉數(shù)據(jù)。同時,每張人臉均附帶詳細信息,包括模糊程度、遮擋、表情、光照和姿態(tài)等。這些人臉在遮擋、妝容、姿勢、尺度、表情和光照上均存在較大的差異。在數(shù)據(jù)集中方面,根據(jù)事件場景的類型分為了61類。對于每個事件類別,隨機選擇40%,10%,50%的數(shù)據(jù)分別作為訓練、驗證和測試集。 2)CelebA數(shù)據(jù)庫是CelebFacesattribute的縮寫,是一個大規(guī)模的人臉屬性數(shù)據(jù)集,擁有超過200 000張人臉圖像,每張圖像有40個屬性標注,該數(shù)據(jù)集中的圖像覆蓋了大部分的姿勢變化和雜亂的背景。該數(shù)據(jù)集可用作人臉關鍵點定位、人臉屬性檢測和人臉識別等計算機視覺任務的訓練和測試集。 3)FDDB數(shù)據(jù)集被廣泛用于人臉檢測方法評價,其是最具權威的人臉檢測評測平臺之一。圖像大部分是名人在自然環(huán)境下拍攝的圖像。該數(shù)據(jù)共有5 171張人臉圖像,包含彩色圖像和灰度圖像。圖像的人臉采用橢圓標注。這些人臉以各種狀態(tài)出現(xiàn),包括罕見姿勢、低分辨率、遮擋和失焦情況。 訓練環(huán)境:操作系統(tǒng)采用的是Ubuntu 18.04,編程語言采用的是Python3.6,深度學習框架為Tensorflow-GPU 1.15.0,GPU加速工具為CUDA 10.0。硬件配置主要包括CPU為2張Intel Xeon Silver 4210@2.20 GHz,GPU為2張NVDIA GeForce RTX 2080 Ti@11 GB,RAM為64 GB。 網(wǎng)絡模型:改進的MTCNN由APN24、修改后的R-Net和O-Net3級網(wǎng)絡結構組成,訓練多個任務(人臉/非人臉分類、包圍盒回歸、人臉關鍵點位置)的人臉框檢測和關鍵點檢測算法。選用APN24來替代P-Net,采用錨框思路增加生成框密度,減少圖像金字塔層數(shù),構造基于錨框的稀疏圖像金字塔,錨框數(shù)選用n=4。對R-Net的卷積層進行深度可分離卷積改造,去掉池化層,將前2個卷積層的步幅修改為2,第3個卷積層修改為可分離卷積;從而減少參數(shù)量和計算量,用于提高R-Net檢測速度。O-Net網(wǎng)絡結構保持不變。 由于網(wǎng)絡級聯(lián),在訓練時按照APN24、修改后R-Net和O-Net的順序進行訓練。因此,前面網(wǎng)絡性能對后面的網(wǎng)絡產(chǎn)生影響。在每個網(wǎng)絡訓練前都會生成訓練樣本,由前面網(wǎng)絡生成第2個和第3個網(wǎng)絡訓練樣本。為了提高算法精度,網(wǎng)絡使用在線挖掘困難樣本策略進行訓練。即每個mini-batch所有樣本損失值的前70%的樣本loss值用于計算后向傳播。 APN24采用和P-Net一樣截取圖像切片的方式進行訓練,因為使用了多錨框思想,每個圖像切片需要為每一個錨框都分配一個label值和一組回歸值。筆者項目中錨框數(shù)n=4,因此每個圖像切片有n(4+1)=20個標簽數(shù)據(jù)(和YOLO相似)。 為了使樣本采樣充分且分布均勻,獲得真實人臉對應不同尺寸錨框的樣本,正樣本和部分樣本的采樣方式:1)在真實人臉框附近獲取IOU>0.5的隨機選框;2)將選框中心固定,尺寸縮放scale^i(i=0,1,2,3)倍,獲得裁切框;3)計算裁切框對應的各個錨框,并計算其與真實人臉框的IOU;4)將裁切框縮放至24×24并保存圖像和標簽;循環(huán)式(1~4),生成正樣本和部分樣本。 負樣本的采樣包括兩部分:一是在原圖中隨機尺度隨機位置切片;二是仿照正樣本和部分樣本的方式在真實人臉附近選取隨機選框,其作用是采集到真實人臉附近的困難負樣本。 當生成APN24訓練樣本數(shù)據(jù)時,回歸值特征采用Fast-RCNN的方式,即輸出中心點偏移值和寬高對數(shù)偏移值,正樣本、部分樣本、負樣本的IOU閾值分別設置為0.5,0.3,0.2;當生成R-Net和O-Net樣本數(shù)據(jù)時,采用傳統(tǒng)MTCNN的方式,即輸出邊界偏移值,正樣本、部分樣本、負樣本的IOU閾值分別設置為0.65,0.4,0.3。 當APN24和R-Net訓練時,正樣本、部分樣本、負樣本的數(shù)據(jù)比例為1∶1∶3;當O-Net訓練時,正樣本、部分樣本、負樣本的數(shù)據(jù)比例為1∶1∶1,其原因是R-Net檢測出的候選框中負樣本比例較低。 測試環(huán)境:前向推理框架使用OpenCVDNN模塊。Windows平臺:Windows 10操作系統(tǒng),處理器為Intel(R)Core(TM)i7-1165G7@2.80 GHz 2.80 GHz,編譯工具為Visual studio 2015;Android平臺:Android 7操作系統(tǒng),處理器為RK3399雙核Cortex-A72及四核Cortex-A53@1.8 GHz,編譯工具為Android Studio。用C++語言開發(fā)。 采用FDDB數(shù)據(jù)集對MTCNN和改進的MTCNN在Windows和Android平臺使用CPU處理器,采用單線程方式進行算法對比測試,測試結果如圖7和表3所示。由測試結果可以看出:改進的MTCNN在檢測精度得到了提升的情況下,檢測速度提升幅度較大。 表3 MTCNN和改進的MTCNN在單線程情況下的速度對比測試結果 圖7 MTCNN和改進的MTCNN精度對比測試結果 為了進一步分析設計方法的性能,驗證設計方法的收斂性,改進算法前后的對比結果如圖8所示。圖8中:深色實線為MTCNN算法濾波處理收斂性曲線;深色段虛線為MTCNN算法整體收斂性;深色點虛線為MTCNN算法的卷積層收斂性曲線;淺色曲線為改進的MTCNN算法曲線,其對應的收斂性曲線與MTCNN算法一致。由圖8可知:MTCNN算法改進前,所有狀態(tài)在50次迭代時達到收斂。改進的MTCNN算法在25次迭代時達到了收斂效果,算法的濾波處理收斂性在20次迭代時達到了收斂狀態(tài),其他處理過程在25次時達到收斂狀態(tài)。兩種方法相比,改進后比改進前迭代降低了25次,因此,測試結果表明改進的MTCNN的人臉檢測方法有效提高了算法的收斂性。 圖8 MTCNN和改進的MTCNN收斂性對比測試結果 為了提高人臉檢測效果和檢測速度等,提出了基于錨框稀疏圖像金字塔的MTCNN人臉檢測方法。該方法引入錨框思路,構建基于錨框的稀疏圖像金字塔,采用深度可分離卷積的思路改進R-Net網(wǎng)絡結構,實現(xiàn)人臉檢測。通過實驗分析可知:改進方法的人臉檢測耗時最低平均值僅為8.5 ms,在迭代25次時達到收斂狀態(tài)。因此,測驗結果驗證了筆者算法框架的合理性。在未來的研究中,將進一步對網(wǎng)絡結構進行優(yōu)化,使用更多的數(shù)據(jù)集對網(wǎng)絡模型進行訓練,提高人臉的檢測能力和檢測效率。3 改進MTCNN
3.1 基于錨框的稀疏圖像金字塔
3.2 深度可分離卷積
4 實驗結果
4.1 訓練和測試數(shù)據(jù)集
4.2 網(wǎng)絡模型訓練
4.3 測試結果
5 結 論