本文授權轉載自公眾號“車輪上的電腦”,作者Max Tao
人臉識別,即生物特征識別技術(biometric recognition or biometrics) 是指利用個體與生俱來的生理特性(如指紋、人臉或面部、虹膜、掌紋、靜脈等)或長年累月形成的行為特征(如筆跡、聲音、步態等)來進行個人身份的鑒定。一般來說,該技術的便捷性和安全性遠高于口令、密碼等傳統身份鑒定方法。目前主流的生物特征識別技術有指紋識別、人臉識別、虹膜識別、語音識別、靜脈識別、聲紋識別等(參考圖1)。人臉是日常生活中最常見和最熟悉的生物特征。人臉識別技術被廣泛應用于安防、支付、考勤、金融等領域,其使用大大提升了人們生活的安全性和便捷性。與其他生物特征識別技術相比,人臉識別能夠得到廣泛應用,是因為具有以下的優勢:不像指紋識別需要用戶把手指放置到指紋識別機上,人臉識別無需接觸人體,直接通過攝像頭等前端設備采集人臉圖像信息。人臉識別的非接觸性為用戶帶來非侵擾性的體驗。首先人臉識別采集無需人工干預,可無感知自動采集人臉圖像;另外由于人臉屬于暴露在外的生物特征,對人臉圖像的采集相對來說易于被普通用戶接受。相對于需要特定采集設備的指紋識別或者虹膜識別等,人臉識別系統只需要攝像頭和計算機,結合相關的軟件算法就可以實現,性價比高。在目前移動終端以及智能終端已經得到廣泛使用的情況下,也易于擴展使用。
通過面部特征進行身份認證最早可追溯到19世紀70年代。一名叫貝迪永(Alphonse Bertillion)的巴黎警察根據人體特征,開發出了一種“人體測量學”(其中包括部分人臉特征)。他認為人到20歲,骨骼就會基本定型。通過記錄人的頭長、頭寬、中指長度、耳長、身高、坐高等多組數據,配上相應的面部照片,來比對識別罪犯。然而這種全人工的方法既費時費力,準確率也不高,急需自動化高精度的人臉識別系統。真正自動化的人臉識別系統的研究始于20世紀60年代,80年代隨著計算機技術和光學成像技術發展得到了提高。2008年北京奧運會就引入了人臉識別進行身份的快速核查。隨著人臉大數據積累(Facebook社交網站海量人臉數據打標簽)以及深度學習技術的快速發展,基于深度學習的人臉識別技術逐漸占據了研究和應用主流。2015年Google發表的論文FaceNet[3]在常用的人臉識別驗證集LFW上達到了99.63%的高精度。2017年蘋果IphoneX發布,第一次在手機端實現人臉解鎖功能,人臉識別技術迎來了一波研究和落地熱潮。大家應該都使用過手機的人臉解鎖功能,在第一次使用此功能的時候需要進行人臉注冊(圖3)得到人臉模板,這樣下次才可以在線進行人臉識別比對登錄(圖4)。人臉識別在使用的時候一般有三種模式,即1:1,1:N,M:N。一般用于人證核驗,可以理解為證明“你就是你”。例如在乘坐火車/飛機,銀行辦卡等場景下,通常需要驗證本人與其持有的身份證是否為同一個人。將一張人臉圖片與人臉特征庫中的所有人臉進行逐一比對。在人臉庫中搜索與其相似(人臉比對的相似度大于設定閾值)的圖片,即找出來“你是誰”。常用場景如疑犯追蹤,小區門禁,公司考勤等。兩個人臉庫進行對比。例如人臉庫A有M個人臉,人臉庫B有N個人臉。如果想要知道A庫和B庫有多少相同的人,就需要A庫中M個人臉與B庫中N個人臉進行逐一比對,相當于M個1:N相加的結果。從圖3和圖4可以看出,不管是注冊還是識別階段,基本都包括:人臉檢測、人臉關鍵點檢測、人臉對齊以及人臉特征提取這幾個重要步驟。本文先介紹一下人臉檢測技術。人臉檢測是指在給定的人臉圖像中準確定位出人臉的位置和大小。只有知道圖像中的人臉在哪里,才能開展后續的人臉相關任務。所以說人臉檢測是人臉相關算法及工程落地的基礎算法。人臉檢測可以看成是目標檢測的一個子集。目標檢測(或稱為通用物體檢測)針對的是多類別,人臉檢測是二分類,結果是人臉或非人臉。理論上,通用物體檢測算法都可以直接用來做人臉檢測,只需要改一下輸出類別即可。通用物體檢測考慮的是更廣泛通用的物體,具有場景復雜多變,物體形狀、背景、大小等都比人臉這種單一的類別更復雜。人臉檢測雖然類別單一,但也不是那么簡單,姿態、光照、遮擋(見圖5)以及極小人臉(見圖6)等都是人臉檢測里面的難點。基于通用物體檢測算法基礎,人臉檢測的問題可以針對性優化,如anchor設置、背景處理、抑制誤檢等。在具體介紹檢測算法前,先介紹下人臉檢測常用數據庫以及評測指標。常用的人臉檢測數據庫包括:FDDB[6]和WIDER FACE[4]。FDDB是全世界最具權威的人臉檢測評測數據庫之一,數據集完全公開,一共有2845張圖像,5171個人臉標注。包括不同姿勢、不同分辨率、旋轉和遮擋等人臉圖片,同時包括灰度圖和彩色圖。圖像分辨率較小,所有圖像的長邊縮放到450像素,也就是說所有圖像都小于450*450,最小標注人臉大小20*20。絕大多數圖像都只有一個人臉。一共有32203張圖像,393703個人臉標注,分訓練集(train)/驗證集(val)/測試集(test),分別占40%/10%/50%。數據集包括各種尺度,姿態,遮擋,表情,化妝,光照等人臉圖像,難度較大。圖像分辨率普遍偏高,所有圖像的寬都縮放到1024,最小標注人臉大小10*10,都是彩色圖像;平均12.2個人臉/圖,密集小人臉多。
WIDER FACE不公開測試集的標注結果(GT:ground truth),需要提交結果給官方評測,結果公平公正,而且測試集大,可靠性高。根據EdgeBox方法的檢測率WIDER FACE評測集被劃分為三個難度等級:Easy, Medium, Hard。算法可以在各個任務維度上進行評測,比如Hard等級非常適合評測小人臉。- 準確率(Precision)代表著預測為正的樣本中有多少是正樣本;
- 召回率(Recall)代表著總的正樣本中有多少被成功預測出來(預測為正)。
下面舉例來說明如何計算準確率和召回率。這里假設測試集中有100個正樣本和100個負樣本,100個正樣本有90個被正確預測為正,10個被錯誤預測為負;100個負樣本中有80個被正確預測為負,20個被錯誤預測為正:- TP(true positive)代表著正樣本被正確預測為正的數量,于是TP=90;
- TN(true negative)代表著負樣本被正確預測為負的數量,于是TN=80;
- FP(false positive)代表著負樣本被錯誤預測為正的數量,于是FP=20;
- FN(false negative)代表著正樣本被錯誤預測為負的數量,于是FN=10。
- 準確率Precision = TP/(TP+FP)=90/(90+20)=0.818
- 召回率Recall? ? = TP/(TP+FN)=90/(90+10)=0.900
前面提到的人臉檢測里只有人臉和背景兩類,那么如何用準確率和召回率去評價人臉檢測算法性能呢?人臉檢測一般輸出檢測框,就要定義出什么樣的檢測結果是正確的。一般情況下,當檢測框和GT的IOU(Intersection over Union)大于一個給定的閾值(如0.7)時,認為這張人臉被正確檢測到,基于這個前提,就可以按照二分類進行統計。繼續舉例來說明。假設實際測試集中有100張人臉,算法檢測出95個人臉框,其中有90是滿足閾值要求被認為是正確的,剩下的5個被認為是錯誤檢測。那么TP/TN/FP/FN分別計算如下:- TP:100個人臉被正確預測出來的人臉有90個,所以TP=90;
- FP:預測是人臉,實際是非人臉,即錯誤的檢測有5張,于是FP=5;
- FN:正樣本未被檢測出來,即漏檢,于是FN=100-90=10。
- 準確率Precision = TP/(TP+FP)=90/(90+5)=0.947
- 召回率Recall? ? = TP/(TP+FN)=90/(90+10)=0.900
根據不同的閾值,可以得到很多對準確率Precision和召回率Recall,即可以得到PR曲線,示例見圖7。ROC曲線是另一種評價二分類算法的指標。縱坐標為真正例率(True Positive Rate,TPR=TP/(TP+FN),橫坐標為假正例率(False Positive Rate,FPR=FP/(TN+FP))同樣根據不用閾值得到很多對TPR和FPR,即可以得到ROC曲線(見圖8)。接下來我們就具體介紹下人臉檢測算法。我們將整個人臉檢測算法分為三個階段:早期算法,AdaBoost框架以及深度學習框架。早期算法使用模板匹配技術,即用一個人臉模板圖像與被檢測圖像中的各個位置進行匹配,確定這個位置處是否有人臉;AdaBoost框架以2001年Viola和Jones設計的一種人臉檢測算法[7]為代表。其使用Haar-like特征和級聯的AdaBoost分類器,檢測速度較之前的方法有2個數量級的提高,并且保持了很好的精度,一般稱這種方法為VJ框架。VJ框架是人臉檢測歷史上第一個最具有里程碑意義的成果,奠定了基于AdaBoost目標檢測框架的基礎。深度學習方法出現以前工業界的方案基本都是基于VJ算法;隨著卷積神經網絡在圖像分類問題上取得成功之后,很快也被用于人臉檢測問題,在精度上大幅度超越之前的算法,逐漸成為研究和應用的主流。
圖片中人臉可能出現在任何位置,所以在檢測時用固定大小的窗口以一定的步長對圖像從上到下、從左到右掃描,這稱為滑動窗口技術(sliding window)。另外為了檢測不同大小的人臉,還需要對圖像進行縮放來構造圖像金字塔,對每張縮放后的圖像都用滑動窗口技術進行掃描。得到圖像子窗口后,提取相應的特征描述子。實際檢測使用比較多的特征描述子是2001年Viola和Jones提出的 Haar-like特征[7]。圖11是Haar-like特征的示意圖。Haar-like特征是白色矩形框內的像素值之和,減去黑色區域內的像素值之和。這種特征捕捉圖像的邊緣、變化等信息,各種特征描述在各個方向上的圖像變化信息。人臉的五官有各自的亮度信息,非常符合Haar-like特征特點。由于采用了滑動窗口掃描技術,并且要對圖像進行反復縮放掃描,得到的圖像非常多,而絕大部分窗口都是背景,即人臉是一個稀疏事件,如果能快速的背景圖像子窗口排除掉,則能大大提高目標檢測的效率。所以采用AdaBoost這樣的級聯分類器進行人臉檢測。這種思想的精髓在于用簡單的弱分類器在初期快速排除掉大量的非人臉窗口,同時保證高的召回率,最終能通過所有級弱分類器的窗口即認為包括人臉。圖12是分類器級聯進行判斷的示意圖:圖12 ?AdaBoost級聯分類器示例[7]:三個臭皮匠頂一個諸葛亮?卷積神經網絡在圖像分類問題上取得成功之后,很快被用于人臉檢測,在精度上超越之前的AdaBoost框架。此外直接用滑動窗口進行人臉檢測的方案計算量太大很難達到實時,使用卷積網絡進行人臉檢測的方法采用各種手段優化這個問題。Cascade CNN[8]借鑒AdaBoost人臉檢測器思想,其也包含了多個分類器,這些分類器采用級聯結構進行組織。不同的地方在于,Cascade CNN采用卷積網絡作為每一級的分類器。首先使用一個小型網絡12-net對輸入圖像進行密集人臉候選區域搜索,檢測區域是12×12,搜索步長是4個像素,快速排除90%的非人臉區域,剩余的檢測窗口送入12-calibration-net調整它的尺寸和位置。然后采用非極大值抑制(NMS)合并高度重疊的檢測窗口,保留下來的候選檢測窗口將會被歸一化到24x24送入24-net。24-net將進一步剔除掉剩下來的將近90%的檢測窗口。和之前的過程一樣,通過24-calibration-net矯正檢測窗口,并應用NMS進一步合并減少檢測窗口的數量。保留下來的候選檢測窗口也將會被歸一化到48x48送入48-net進行分類得到進一步過濾的人臉候選窗口。然后利用NMS進行窗口合并,送入48-calibration-net矯正檢測窗口作為最后的輸出(算法結構見圖13)。?圖13? Cascade CNN[8]算法pipeline一些論文認為,在人臉檢測中加入一些輔助任務構成多任務學習可以提高檢測性能。MTCNN[9]在人臉檢測任務中加入人臉關鍵點檢測,通過兩個任務協同提高檢測性能。同Cascade CNN一樣也是基于Cascade的框架。MTCNN總體來說可分為三個部分:P-Net、R-Net和O-Net(見圖14)。MTCNN利用一個淺層網絡P-Net快速產生候選窗口,利用一個稍微復雜網絡R-Net排除掉大量非人臉窗口,最后利用一個更強大的網絡O-Net進一步改善結果,并聯合輸出人臉關鍵點位置。與Cascade CNN[8]的12-net需要在整張圖片上做密集窗口采樣進行分類不同,MTCNN在測試第一階段的PNet是全卷積網絡(FCN, Fully Convolutional Networks),全卷積網絡的優點在于可以輸入任意尺寸的圖像,同時使用卷積運算代替了滑動窗口運算,大幅提高了檢測的效率。MTCNN算法在FDDB以及WIDER FACE上取得了當時SOTA的結果(見圖15)。詳情可參見論文[9]。圖15 MTCNN[9]評測的結果,(a) FDDB;(b-d) 3 subsets of WIDER FACE.在實際落地應用中,需要尋求實時性和準確性的折中,因為高準確率的網絡往往有大量的計算,速度較慢。FaceBoxes[10]是一個足夠輕量的人臉檢測器,由中科院李子青教授團隊2017年提出,如文章題目所指旨在實現CPU下的實時人臉檢測,圖16給出了相應的算法pipeline。其針對MTCNN存在的問題:1)檢測速度會受到人臉數量的影響;2)多階段訓練,過程復雜;3) 速度還是較慢,提出了以下幾個創新點:- 使用RDCL(Rapidly Digested Convolutional Layers)模塊快速降低特征圖大小,為檢測速度提供了保證: 通過適當的卷積核大小來快速縮小輸入空間大小,減少輸出通道的數量,使CPU設備上的FaceBoxes達到實時速度;
- MSCL(Multiple Scale Convolutional Layers)模塊使用多尺度特征圖預測,處理不同尺度下的人臉;
- 使用anchor稠密化策略,以提高小人臉的召回率。
圖16? FaceBoxes[10]算法pilelineVGA分辨率圖像輸入,單個CPU內核上(E5-2660v3@2.60)運行速度為20FPS,GPU(Titan X (Pascal))上125FPS。方法在FDDB上也取得了當時SOTA的結果(見圖17)。圖17? FaceBoxes[10]在FDDB上的實驗結果?2019年谷歌發布了一款專為移動 GPU 推理量身定制的輕量級且性能卓越的人臉檢測器——亞毫秒級的人臉檢測算法 BlazeFace[11]。它能夠在旗艦設備上以200-1000+FPS的速度運行。這種超實時性能使BlazeFace能夠應用于任何對性能要求極高的現實應用中,如手機上。方法的主要創新點為:- 受MobileNet啟發,提出極輕量級特征提取網絡BlazeBlock。具體的使用5*5卷積核代替3*3卷積核,不會帶來太大開銷,但是可以增大感受野。前置攝像頭下,人臉尺度變化較小,可以定義更加輕量級的特征提取,輸入圖像128*128,含有5個BlazeBlock和6個double BlazeBlock(見圖18)。
?圖18? BlazeBlock和double BlazeBlock結構圖 [11]- 優化的anchor 機制,在8*8特征圖尺寸處停止下采樣(見圖19),將8*8,4*4和2*2分辨率中的每個像素的2個anchor替換為8*8的6個anchor。由于人臉長寬比的變化有限,因此將anchor固定為1:1足以進行精確的人臉檢測。
圖19? Anchor計算: SSD (left) vs. BlazeFace [11]BlazeFace重點說明在手機終端真實應用中,檢測算法的加速,故沒有與但是SOTA(state-of-the-art)的算法在公開數據集上精度的比較,而只是在谷歌的私有數據集上與MobileNetV2-SSD進行了比較。圖20是比較結果,精度高于MobileNetV2-SSD,在iPhone XS上的速度也從2.1ms降到0.6ms。另外可以看到BlazeFace在不同的手機上也獲得了很大的速度提升。人臉識別技術經過多年的發展,內涵已極為豐富并且應用廣泛。本次為大家講解了人臉識別的發展歷史、技術流程以及重點介紹了人臉檢測算法,希望借此幫助大家理解、認識如今我們已經習慣使用的人臉識別功能。下次,我們將繼續為大家講解人臉識別的另一關鍵技術——人臉關鍵點檢測算法。我們下期見!
引用附錄:
[1]科普文章丨生物特征識別:確認過“掌紋” 找到對的人
http://www.ioa.cas.cn/kxchb/kpzp/kpwz/202112/t20211222_6325383.html
[2]Adjabi, Insaf, et al. "Past, present, and future of face recognition: A review." Electronics 9.8 (2020): 1188.
[3]Schroff, Florian, Dmitry Kalenichenko, and James Philbin. "Facenet: A unified embedding for face recognition and clustering." Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.
[4]http://shuoyang1213.me/WIDERFACE/
[5]Hu, Peiyun, and Deva Ramanan. "Finding tiny faces." Proceedings of the IEEE conference on computer vision and pattern recognition. 2017.
[6]http://vis-www.cs.umass.edu/fddb/index.html
[7]Viola P, Jones M. Rapid object detection using a boosted? cascade of simple features[C]//Proceedings of the 2001? IEEE computer society conference on computer vision? and pattern recognition. CVPR 2001. IEEE, 2001, 1: I-I.
[8]Li, Haoxiang, et al. "A convolutional neural network cascade? for face detection." Proceedings of the IEEE conference on? computer vision and pattern recognition. 2015.
[9]Zhang K, Zhang Z, Li Z, et al. Joint face detection and? alignment using multitask cascaded convolutional? networks[J]. IEEE Signal Processing Letters, 2016, 23(10):? 1499-1503.
[10]Zhang S, Zhu X, Lei Z, et al.? Faceboxes: A CPU real-time face? detector with high accuracy[C]//2017? IEEE International Joint Conference on? Biometrics (IJCB). IEEE, 2017: 1-9.
[11]Bazarevsky, Valentin, et al. "Blazeface: Sub-millisecond? neural face detection on mobile gpus." arXiv preprint? arXiv:1907.05047 (2019).
[12]https://www.52cv.net/?p=1006
[13]https://www.nist.gov/programs-projects/face-recognition-grand-challenge-frgc
[14]https://www.cs.cmu.edu/~deva/papers/face/face-cvpr12.pdf
[15]https://www.tugraz.at/institute/icg/research/team-bischof/lrs/downloads/aflw/
[16]https://ieeexplore.ieee.org/document/6751298
[17]https://ibug.doc.ic.ac.uk/resources/300-W/
[18]Belhumeur, P., Jacobs, D., Kriegman, D., Kumar, N.. ‘Localizing parts of faces using a consensus of exemplars’.? In Computer Vision and Pattern Recognition, CVPR. (2011).
[19]X. Zhu, D. Ramanan. ‘Face detection, pose estimation and landmark localization in the wild’, Computer Vision and Pattern Recognition (CVPR) Providence, Rhode Island, June 2012.
[20]Vuong Le, Jonathan Brandt, Zhe Lin, Lubomir Boudev, Thomas S. Huang. ‘Interactive Facial Feature Localization’, ECCV2012.
[21]Messer, K., Matas, J., Kittler, J., Luettin, J., Maitre, G. ‘Xm2vtsdb: The ex- tended m2vts database’. In: 2nd international conference on audio and video-based biometric person authentication. Volume 964. (1999).
[22]https://wywu.github.io/projects/LAB/WFLW.html
[23]https://facial-landmarks-localization-challenge.github.io/
[24]T.F. Cootes, C.J. Taylor, D.H. Cooper, et al. Active Shape Models-Their Training and Application[J]. Computer Vision and Image Understanding, 1995, 61(1):38-59.
[25]G. J. Edwards, T. F. Cootes, C. J. Taylor. Face recognition using active appearance models[J]. Computer Vision—Eccv』, 1998, 1407(6):581-595.
[26]Dollár P, Welinder P, Perona P. Cascaded pose regression[J]. IEEE, 2010, 238(6):1078-1085.
[27]Sun Y, Wang X, Tang X.? Deep convolutional? network cascade for? facial point detection,? CVPR. 2013: 3476-3483.
[28]Zhang Z, Luo P, Loy C C, et al. Facial? landmark detection by deep multi-task learning, European conference? on computer vision. Springer, Cham,? 2014: 94-108.
[29]https://towardsdatascience.com/understanding-auc-roc-curve-68b2303cc9c5
[30]O. Jesorsky, K. J. Kirchberg, and R. Frischholz. Robust face detection using the hausdorff distance. In Proc. AVBPA, 2001.
[31]P. N. Belhumeur, D. W. Jacobs, D. J. Kriegman, and N. Kumar. Localizing parts of faces using a consensus of exemplars. In Proc. CVPR, 2011.
免責聲明:本文系網絡轉載,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請第一時間告知,我們將立即刪除內容!本文內容為原作者觀點,并不代表本公眾號贊同其觀點和對其真實性負責。