作者|Aniket Maurya
譯者|Flora
策劃|凌敏
過去十年,深度學(xué)習(xí)領(lǐng)域出現(xiàn)了許多先進(jìn)的新算法和突破性的研究,并且引入了新的計(jì)算機(jī)視覺算法。
這一切始于2012年的AlexNet。AlexNet是一個(gè)深度(卷積)神經(jīng)網(wǎng)絡(luò),它在ImageNet數(shù)據(jù)集(擁有超過1400萬張圖片的數(shù)據(jù)集)上取得了很高的準(zhǔn)確率。
人類是如何識(shí)別人臉的?
也許,人類大腦中的神經(jīng)元首先識(shí)別場(chǎng)景中的人臉(從人的體形和背景),然后提取面部特征,并通過這些特征對(duì)人進(jìn)行分類。我們已經(jīng)在一個(gè)無限大的數(shù)據(jù)集和神經(jīng)網(wǎng)絡(luò)上進(jìn)行了訓(xùn)練。
機(jī)器中的面部識(shí)別是以同樣的方式實(shí)現(xiàn)的。首先,我們采用面部檢測(cè)算法來檢測(cè)場(chǎng)景中的人臉,然后從檢測(cè)到的人臉中提取面部特征,最后使用算法對(duì)人進(jìn)行分類。
面部識(shí)別系統(tǒng)的工作流
1.人臉檢測(cè)
人臉檢測(cè)是物體檢測(cè)的一個(gè)特化版本,特別之處在于,它只檢測(cè)一種物體,即人臉。就像計(jì)算機(jī)科學(xué)里需要權(quán)衡時(shí)間和空間,機(jī)器學(xué)習(xí)算法也需要在推理速度和準(zhǔn)確性之間進(jìn)行權(quán)衡。現(xiàn)在有很多物體檢測(cè)算法,不同算法對(duì)速度和準(zhǔn)確性的取舍有所不同。
本文評(píng)估了如下幾個(gè)最先進(jìn)的物體檢測(cè)算法:
OpenCV(Haar-Cascade)
MTCNN
YoloV3和Yolo-Tiny
SSD
BlazeFace
ShuffleNet和Faceboxes
為了構(gòu)建一個(gè)強(qiáng)大的人臉檢測(cè)系統(tǒng),我們需要準(zhǔn)確且快速的算法,以滿足在GPU以及移動(dòng)設(shè)備上實(shí)時(shí)運(yùn)行的需要。
準(zhǔn)確度
在流媒體視頻的實(shí)時(shí)推理中,人們的面部可能有不同的姿勢(shì)、遮擋和照明效果。因此,算法能在不同的光照條件和不同姿態(tài)下精確檢測(cè)人臉非常重要。
在不同的姿態(tài)和光照條件下的人臉檢測(cè)
OpenCV(Haar-ascade)
我們從OpenCV的Haar-cascade實(shí)現(xiàn)開始,它是一個(gè)用C語言編寫的開源圖像處理庫(kù)。
優(yōu)點(diǎn):由于這個(gè)庫(kù)是用C語言編寫的,所以它在實(shí)時(shí)系統(tǒng)中的推理速度非常快。
缺點(diǎn):這個(gè)實(shí)現(xiàn)的問題是它無法檢測(cè)側(cè)臉,而且在不同姿態(tài)和光照條件下表現(xiàn)欠佳。
MTCNN
這種算法基于深度學(xué)習(xí)方法。它使用深度級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)(Deep Cascaded Convolutional Neural Networks)來檢測(cè)人臉。
優(yōu)點(diǎn):它比OpenCV的Haar-Cascade方法準(zhǔn)確性更高
缺點(diǎn):運(yùn)行時(shí)間較長(zhǎng)。
YOLOV3
YOLO(“You only look once”)是用于物體檢測(cè)的最先進(jìn)的深度學(xué)習(xí)算法。它由許多卷積神經(jīng)網(wǎng)絡(luò)組成,形成一個(gè)深度CNN模型(深度意味著模型架構(gòu)復(fù)雜性很高)。
原始的YOLO模型可以檢測(cè)80個(gè)不同的物體類別,而且檢測(cè)精度很高,而我們只需要用該模型檢測(cè)一個(gè)物體——人臉。我們?cè)赪iderFace(包含393,703個(gè)面部標(biāo)簽的圖像數(shù)據(jù)集)數(shù)據(jù)集上訓(xùn)練了這個(gè)算法。
YOLO算法還有一個(gè)微型版本,即Yolo-Tiny。Yolo-Tiny需要的計(jì)算時(shí)間比較少,但卻犧牲了一些準(zhǔn)確性。我們用相同的數(shù)據(jù)集訓(xùn)練了一個(gè)Yolo-Tiny模型,其邊界框(boundary box)結(jié)果并不一致。
優(yōu)點(diǎn):非常準(zhǔn)確,沒有任何缺陷。比MTCNN更快。
缺點(diǎn):由于具有巨大的深度神經(jīng)網(wǎng)絡(luò)層,它需要的計(jì)算資源更多。因此,該算法在CPU或移動(dòng)設(shè)備上運(yùn)行地很慢。在GPU上,它的大型架構(gòu)也需要耗費(fèi)更多的VRAM。
SSD
SSD(Single Shot Detector)也是一個(gè)類似YOLO的深度卷積神經(jīng)網(wǎng)絡(luò)模型。
優(yōu)點(diǎn):良好的準(zhǔn)確性。它可以檢測(cè)各種姿勢(shì)、光照和遮擋。良好的推理速度。
缺點(diǎn):比YOLO模型差。雖然推理速度較好,但仍不能滿足在CPU、低端GPU或移動(dòng)設(shè)備上運(yùn)行的要求。
BlazeFace
就像它的名字一樣,它是由谷歌發(fā)布的速度極快的人臉檢測(cè)算法。它接受128x128維的圖像輸入,推理時(shí)間是亞毫秒級(jí),已優(yōu)化到可以在手機(jī)中使用。它速度這么快的原因是:
YOLO和SSD用來檢測(cè)大量的類別,而BlazeFace不同,是一個(gè)專門的人臉檢測(cè)器模型。因此BlazeFace的深度卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)比YOLO和SSD的架構(gòu)小。
它采用的是深度可分離卷積層(Depthwise Separable Convolution),而不是標(biāo)準(zhǔn)的卷積層,這樣就降低了計(jì)算量。
優(yōu)點(diǎn):非常好的推理速度,且人臉檢測(cè)的準(zhǔn)確率高。
缺點(diǎn):這個(gè)模型的優(yōu)化目標(biāo)是對(duì)手機(jī)攝像頭獲取的圖像進(jìn)行人臉檢測(cè),因此它預(yù)期人臉會(huì)覆蓋圖像中的大部分區(qū)域,而當(dāng)人臉尺寸較小時(shí),它的識(shí)別效果就是很好。所以,當(dāng)對(duì)閉路電視攝像機(jī)獲取的(CCTV,Closed Circuit Tele Vision)圖像進(jìn)行人臉檢測(cè)時(shí),它表現(xiàn)得并不理想。
Faceboxes
Faceboxes是我們使用的最新的人臉檢測(cè)算法。與BlazeFace類似,它是一個(gè)小型的深度卷積神經(jīng)網(wǎng)絡(luò),只為檢測(cè)一種類別——人臉而設(shè)計(jì)。它的推理時(shí)間可滿足CPU上的實(shí)時(shí)檢測(cè)需求。它的準(zhǔn)確度可以與Yolo人臉檢測(cè)算法相媲美,而且,不管圖像中的人臉較大還是較小,它都可以精確地檢測(cè)。
優(yōu)點(diǎn):推理速度快,準(zhǔn)確性好。
缺點(diǎn):評(píng)估仍在進(jìn)行中。
2.特征提取
在檢測(cè)到圖像中的人臉后,我們對(duì)人臉進(jìn)行裁剪,并將其送入特征提取算法,該算法創(chuàng)建面部嵌入(face-embeddings)——一個(gè)代表人臉特征的多維(主要是128或512維)向量。我們使用FaceNet算法來創(chuàng)建面部嵌入。
嵌入向量代表一個(gè)人的面部特征。因此,同一個(gè)人的兩個(gè)不同圖像的嵌入向量之間的距離比較接近,而不同人的嵌入向量之間的距離比較遠(yuǎn)。其中,兩個(gè)向量之間的距離采用的是歐氏距離。
3.面部分類
在得到面部嵌入向量后,我們訓(xùn)練了一種分類算法,即K-近鄰(K-nearest neighbor,KNN)算法,根據(jù)一個(gè)人的嵌入向量對(duì)其進(jìn)行分類。
假設(shè)在一個(gè)組織中,有1000名員工。我們創(chuàng)建了所有員工的面部嵌入,并使用嵌入向量訓(xùn)練分類算法。該算法以面部嵌入向量作為輸入,以人的名字作為輸出返回。
在把圖片放到網(wǎng)上前,用戶可以采用過濾器修改圖片中的特定像素。人眼無法察覺這些變化,但它會(huì)讓面部識(shí)別算法覺得很困惑。——ThalesGroup
當(dāng)前,面部識(shí)別算法已經(jīng)取得了巨大的進(jìn)步。但這僅僅是技術(shù)革命的開始??梢韵胂笠幌拢磥砻娌孔R(shí)別算法和聊天機(jī)器人技術(shù)的聯(lián)合起來是多么強(qiáng)大。