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