深度学习人脸检测与人脸识别
一、概述
1. 基本概念
人臉是個人重要的生物特征,業界很早就對人臉圖像處理技術進行了研究。人臉圖像處理包括人臉檢測、人臉識別、人臉檢索等。人臉檢測是在輸入圖像中檢測人臉的位置、大小;人臉識別是對人臉圖像身份進行確認,人臉識別通常會先對人臉進行檢測定位,再進行識別;人臉檢索是根據輸入的人臉圖像,從圖像庫或視頻庫中檢索包含該人臉的其它圖像或視頻。
2. 人臉檢測與識別的應用
- 實名認證
- 人臉考勤
- 刷臉支付、刷臉檢票
- 公共安全:罪犯抓捕、失蹤人員尋找
3. 傳統人臉檢測與人臉識別方法
1)人臉檢測
- 基于知識的人臉檢測法。它將典型的人臉形成規則庫對人臉進行編碼。通常, 通過面部特征之間的關系進行人臉定位。
- 基于模板匹配的人臉檢測法。存儲幾種標準的人臉模式, 用來分別描述整個人臉和面部特征;計算輸入圖像和存儲的模式間的相互關系并用于檢測。
- 基于特征的人臉檢測法。是在姿態、視角或光照條件改變的情況下找到存在的結構特征, 然后使用這些特征確定人臉。
- 基于外觀的人臉檢測法。與模板匹配方法相反, 從訓練圖像集中進行學習從而獲得模型(或模板) ,并將這些模型用于檢測。
2)人臉識別
- 幾何特征分析法。首先,提取目標的特征,并將所有得到的特征值組合形成一個向量;然后利用某種距離公式進行比較匹配。
- 主成分分析法。提取出圖像數據主成分,得到特征向量(特征臉)在進行比對和識別。主成分分析法原理簡單,容易編程實現,并且識別效果較好;但該方法易受光照、尺度、旋轉等因素影響。
- 彈性匹配法。屬于動態模板匹配法的一種,模板可有多種表示方法,該方法受圖像的形變影響小,且受光照、面部表情、圖像尺寸等因素的干擾較小,不足之處在于識別速度慢。
傳統人臉檢測、識別在特征提取、精確度、可擴展性方面均有諸多不足,進入深度學習時代后,逐漸被深度學習技術所取代。
二、人臉數據集介紹
1. SFC數據集
Social Face Classification(社交人臉分類,簡稱SFC)數據集是從一個流行的社交網絡中收集的人臉數據集,包括440萬張經過標記的人臉,來自4030人,每個人有800到1200張人臉圖像,其中每個身份的最新5%的臉圖像被排除在外進行測試。這是根據圖像的時間戳來完成的,以模擬通過老化進行的連續識別。
2. LFW數據集
Labeled Faces in the Wild(經標注的自然條件人臉,簡稱LFW)包含5749位名人的13323張網絡照片,這些照片分為6000對人臉,分為10組。常用作無約束環境中進行人臉驗證的基準數據集。
3. YTF數據集
YouTube Faces(YTF)收集了1595個主題的3425個YouTube視頻(LFW中名人的子集)。這些視頻被分成5000個視頻對和10個分割,用于評估視頻級別的人臉驗證在SFC中,人臉識別是由人來標記的,通常包含大約3%的錯誤。SFC數據集照片在圖像質量、光線和表情方面的變化甚至比LFW和YTF中名人的網絡圖像更大,后者通常是由專業攝影師而不是智能手機拍攝的。
4. CelebA數據集
Large-scale CelebFaces Attributes (CelebA)數據集是由香港中文大學湯曉鷗教授實驗室公布的大型人臉識別數據集。該數據集包含有200K張人臉圖片,人臉屬性有40多種,主要用于人臉屬性的識別。
5. WIDER Face數據集
2015年由香港中文大學發布,包含32203張圖像、393703張人臉,在面部的尺寸、姿勢、遮擋、表情、妝容和光照上都有很大的變化,自發布后廣泛應用于評估性能比傳統方法更強大的卷積神經網絡。
三、人臉檢測
1. MTCNN模型
Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks(基于多任務級聯卷積網絡的聯合人臉檢測與對準,MTCNN),是一個優秀的人臉檢測模型,該模型通過三個階段精心設計的深度卷積網絡,以粗略到精細的方式檢測面部位置。
1)步驟
第一階段:通過淺層CNN快速生成候選窗口。
第二階段:通過更復雜的CNN拒絕大量非面部窗口來細化窗口。
第三階段:使用更強大的CNN再次細化結果并輸出五個面部標志位置。
2)網絡結構
- Proposal Network(P-Net):提議網絡,該完全卷積網絡來獲得候選面部窗口及其邊界框回歸向量。 然后基于估計的邊界框回歸向量校準候選者。 之后,我們采用非最大抑制(NMS)來合并高度重疊的候選者。
- Refine Network(R-Net):精煉網絡(R-Net),它進一步拒絕大量錯誤候選者,使用邊界框回歸執行校準,并進行NMS。
- Output Network(O-Net):輸出網絡,這個階段類似于第二階段,但在這個階段,我們的目標是識別更多監督的面部區域。 特別是,該網絡將輸出五個面部坐標點。
3)訓練
MTCNN利用三項任務來訓練CNN探測器:
- 面部/非面部分類
- 邊界框回歸
- 面部標記定位
① 面部分類。學習目標被制定為二類分類問題。 對于每個樣本,使用交叉熵損失函數:
其中pip_ipi?是網絡產生的概率,表明樣本是網絡產生的概率,表明樣本xix_ixi?是一個人臉。 符號 yidet∈{0,1}y^{det}_i∈\{0,1\}yidet?∈{0,1}表示真實標簽。
② 邊界框回歸。對于每個候選窗口,我們預測它與最近的真實值之間的偏移(即邊界框的左邊,頂部,高度和寬度)。 學習目標被指定為回歸問題,我們對每個樣本使用歐幾里德損失xix_ixi?:
其中y^ibox\hat{y}_i^{box}y^?ibox? 是真實坐標。 有四個坐標,包括左上角,高度和寬度,因此yibox∈R4y^{box}_i∈ \mathbb{R}^4yibox?∈R4.
③ 面部標記定位。類似于邊界框回歸任務,面部標記檢測被公式化為回歸問題,我們最小化歐幾里德損失:
其中 y^ilandmark\hat{y}_i^{landmark}y^?ilandmark?是從網絡獲得的面部標記坐標,yilandmarky_i^{landmark}yilandmark?是第i個樣本的真實坐標。 有五個面部標志,包括左眼,右眼,鼻子,左嘴角和右嘴角,因此yilandmark∈R10y_i^{landmark} \in \mathbb{R}^1 0yilandmark?∈R10.
④ 多源訓練。由于在每個CNN中使用不同的任務,因此在學習過程中存在不同類型的訓練圖像,例如面部,非面部和部分對齊的面部。 在這種情況下,不使用一些損失函數(即,等式(1) - (3))。 例如,對于背景區域的樣本,僅計算LidetL_i{det}Li?det,而另外兩個損失設置為0.這可以直接使用樣本類型指示符來實現。 然后整體學習目標可以表述為:
其中?N是訓練樣本的數量,aja_jaj?表示任務重要性。 在P-Net和R-Net中使用(adet=1,abox=0.5,alandmark=0.5)(a_{det}=1,a_{box}=0.5,a_{landmark}=0.5)(adet?=1,abox?=0.5,alandmark?=0.5),而在O-Net中使用(adet=1,abox=0.5,alandmark=1)(a_{det}=1,a_{box}=0.5,a_{landmark}=1)(adet?=1,abox?=0.5,alandmark?=1)以獲得更準確的面部標記本地化. βij∈{0,1}\beta_i^j \in\{0,1\}βij?∈{0,1} 是樣本類型指示器。
4)結論
- 查準率:95.04%
- 召回率:85.1%
- 速度:99 FPS
四、單樣本學習模型
1. 孿生網絡
1)概述
孿生網絡(Siamese network)又稱“連體網絡”,有兩個結構相同(兩個網絡可以是CNN,也可以是LSTM等),且共享權值的子網絡。分別接受兩個輸入x1,x2x_1, x_2x1?,x2?,將其轉換為某種向量Gw(x1),Gw(x2)G_w(x_1), G_w(x_2)Gw?(x1?),Gw?(x2?),再通過某種距離度量的方式計算兩個輸出向量的距離EwE_wEw?.如下圖所示:
"孿生網絡"一詞的由來:
十九世紀泰國出生了一對連體嬰兒,當時的醫學技術無法使兩人分離出來,于是兩人頑強地生活了一生,1829年被英國商人發現,進入馬戲團,在全世界各地表演,1839年他們訪問美國北卡羅萊那州后來成為“玲玲馬戲團” 的臺柱,最后成為美國公民。1843年4月13日跟英國一對姐妹結婚,恩生了10個小孩,昌生了12個,姐妹吵架時,兄弟就要輪流到每個老婆家住三天。1874年恩因肺病去世,另一位不久也去世,兩人均于63歲離開人間。兩人的肝至今仍保存在費城的馬特博物館內。從此之后“暹羅雙胞胎”(Siamese twins)就成了連體人的代名詞,也因為這對雙胞胎讓全世界都重視到這項特殊疾病。
目錄
一、概述
1. 基本概念
2. 人臉檢測與識別的應用
3. 傳統人臉檢測與人臉識別方法
二、人臉數據集介紹
1. SFC數據集
2. LFW數據集
3. YTF數據集
4. CelebA數據集
5. WIDER Face數據集
三、人臉檢測
1. MTCNN模型
四、單樣本學習模型
1. 孿生網絡
2. 三元網絡(Triplet Network)
五、人臉識別
1. DeepFace(2014)
2. FaceNet(2015)
2)孿生網絡的用途
孿生網絡主要用于單樣本或樣本較少的模型訓練,用于衡量兩個輸入數據的相似程度。孿生網絡有兩個輸入(x1和x2x_1和x_2x1?和x2?),將兩個輸入到兩個相同且權重共享的網絡中,這兩個網絡分別將輸入映射到新的空間,形成輸入在新的空間中的表示。通過Loss的計算,評價兩個輸入的相似度。例如:
- 詞匯或文本的語義相似度分析;
- QA中question和answer的匹配;
- 簽名或人臉的比對、驗證。
例如,在人臉比對中,如果輸入的兩幅人臉圖像X1和X2X_1和X_2X1?和X2?為同一個人,那么映射到新的空間的兩個向量距離足夠小;反之,如果X1和X2X_1和X_2X1?和X2?不為同一個人,兩個向量距離足夠大。
3)損失函數
孿生網絡采用對比損失函數(contrastive loss),其表達式如下:
其中,DWD_WDW?被定義為姐妹孿生網絡的輸出之間的歐氏距離。DWD_WDW?歐式距離公式如下:
- GWG_WGW?是其中一個姐妹網絡的輸出。X1X_1X1?和X2X_2X2?是輸入數據對;
- Y值為1或0。如果模型預測輸入是相似的,那么Y的值為0,否則Y為1。當Y=0時(輸入是相似的),函數的值為前半部分;當Y=1時(輸入不相似),函數的值為后半部分;
- max()是表示0和m?Dwm-D_wm?Dw?之間較大值的函數;
- m是大于0的間隔值(margin value)。有一個邊際價值表示超出該邊際價值的不同對不會造成損失。這是有道理的,因為你只希望基于實際不相似對來優化網絡,但網絡認為是相當相似的。
2. 三元網絡(Triplet Network)
1)概述
Triplet Network是Siamese Network的一種延伸,要解決的問題與Siamese Network的基本一致,主要用于單樣本或樣本較少的模型訓練。與孿生網絡不同的是,Triplet Network采用三個樣本為一組:一個參考樣本(也稱為錨點樣本),一個同類樣本(正樣本),一個異類樣本(負樣本)。Triplet Network網絡將輸入映射到某個特征空間中,使得參考樣本與正樣本距離足夠小、與負樣本足夠大。
2)網絡結構
Triplet Network結構圖如下所示:
- Triplet Network由3個相同的前饋神經網絡(彼此共享參數)組成;
- 輸入x為參考樣本,x?x^-x?為負面樣本,x+x^+x+為正面樣本;
- 網絡會輸出兩個值:參考樣本與負面樣本、正面樣本的特征向量的距離。
3)損失函數
Triplet Network的損失函數稱為Triplet Loss(三元損失),包含參照樣本、正面樣本、負面樣本之間的距離。∣∣f(A)?f(P)∣∣2||f(A)-f(P)||^2∣∣f(A)?f(P)∣∣2表示參照樣本與正向樣本的距離,∣∣f(A)?f(N)∣∣2||f(A)-f(N)||^2∣∣f(A)?f(N)∣∣2表示參照樣本與負面樣本的距離。我們希望參照樣本與正向樣本的距離足夠小,與負面樣本的距離足夠大,即:
∣∣f(A)?f(P)∣∣2<=∣∣f(A)?f(N)∣∣2||f(A)-f(P)||^2 <= ||f(A)-f(N)||^2 ∣∣f(A)?f(P)∣∣2<=∣∣f(A)?f(N)∣∣2
為了避免兩個表達式為0的情況(同時為0也滿足該表達式),需要作出一些調整,參照樣本與正向樣本的距離值比起與負面樣本的距離需大于某個常數值,所以表達式變為:
∣∣f(A)?f(P)∣∣2+α<=∣∣f(A)?f(N)∣∣2||f(A)-f(P)||^2 + \alpha <= ||f(A)-f(N)||^2 ∣∣f(A)?f(P)∣∣2+α<=∣∣f(A)?f(N)∣∣2
其中,α\alphaα為一個超參數,稱為間隔(margin)。將等式右邊移項到左邊:
∣∣f(A)?f(P)∣∣2?∣∣f(A)?f(N)∣∣2+α<=0||f(A)-f(P)||^2 - ||f(A)-f(N)||^2 + \alpha <= 0 ∣∣f(A)?f(P)∣∣2?∣∣f(A)?f(N)∣∣2+α<=0
所以為了定義這個損失函數,我們取這個和0的最大值:
L(A,P,N)=max(∣∣f(A)?f(P)∣∣2?∣∣f(A)?f(N)∣∣2+α,0)L(A, P, N) = max(||f(A)-f(P)||^2 - ||f(A)-f(N)||^2 + \alpha, 0) L(A,P,N)=max(∣∣f(A)?f(P)∣∣2?∣∣f(A)?f(N)∣∣2+α,0)
在訓練中,為了使得效果更好,通常選擇更難訓練的三元組(A,P,N)(A, P, N)(A,P,N)進行訓練。所謂難訓練的三元組就是選擇的三元組d(A,P)d(A, P)d(A,P)很接近d(A,N)d(A, N)d(A,N),即d(A,P)≈d(A,N)d(A, P) \approx d(A, N)d(A,P)≈d(A,N),在訓練時竭力使式子右邊部分變大,左邊部分變小,使得左右至少有一個α\alphaα的距離。并且,比起隨機選擇的三元組,這樣的三元組還可以增加模型的學習算法的計算效率。
五、人臉識別
1. DeepFace(2014)
1)概述
DeepFace是Facebook研究人員推出的人臉驗證模型,是深度學習技術應用于人臉識別的先驅。模型深度9層,超過1.2億個參數。在LFW數據集上識別率達到97.25%,接近人類識別能力。
2)人臉對齊處理
和大多數模型一樣,DeepFace采用基準點檢測器指導對齊過程。在該模型中,使用了一個相對簡單的基準點檢測器,經過多次迭代來優化輸出。在每一次迭代中,通過訓練支持向量回歸器(SVR)從圖像描述中預測點的結構來提取基準點。
對齊步驟:
- 檢測人臉6個基準點(眼睛2個、鼻尖1個、嘴巴3個)
- 裁剪人臉部分
- 在裁剪出的人臉中,使用67個基準點進行三角剖分
- 將二維對齊裁剪圖像轉換為三維參考形狀
- 對三維形狀進行旋轉,生成正面二維圖像
3)網絡結構
DeepFace網絡結構如下圖所示:
- 輸入:152*152經過預處理3D對齊的3通道面部圖像
- 第一層:卷積層(論文中稱為C1),采用32個11*11卷積核進行卷積,輸出32個142*142的特征圖
- 第二層:池化層(M2),以步幅為2執行最大池化操作,輸出32個71*71的特征圖
- 第三層:卷積層(C3),采用16個9*9卷積核進行卷積,輸出16個63*63的特征圖
以上三層主要提取底層特征,例如簡單邊沿、紋理。
- 第四/五/六層:局部連接層(L4/L5/L6),濾波器組,像卷積層一樣,應用濾波器組,但是特征映射中的每個位置都學習不同的濾波器組。局部層的使用不會影響特征提取的計算負擔,但會影響訓練參數的數量。
- 第七/八層:全連接層(F7/F8),用來捕獲在面部圖像的遠處部分捕捉到的特征之間的相關性,例如眼睛的位置和形狀以及嘴的位置和形狀。最后一個全連接層在Softmax函數作用下產生K路輸出。
4)效果
-
LFW數據集實驗效果
DeepFace在LFW數據集上實驗準確率與效果圖ROC(Receiver Operating Characteristic)曲線如下所示:
-
YTF數據集實驗效果
DeepFace還在視頻級人臉驗證數據集上進行了進一步驗證。YouTube視頻幀的圖像質量通常比網絡照片差,主要是由于運動模糊或觀看距離。為每對訓練視頻創建50對幀,每個視頻一對,并根據視頻訓練對標記這些幀是否相同。DeepFace取得了91.4%的準確度,將先前的最佳方法的誤差減少了50%以上。如下圖所示:
5)計算效率
單核Intel 2.2GHz CPU,DeepFace每幅圖像運行0.33秒,包括圖像解碼、人臉檢測和對齊、前饋網絡和最終分類輸出。
2. FaceNet(2015)
1)概述
FaceNet是Google研究人員2015年推出的人臉識比對模型。其思想是將人臉照片轉換為128-D的向量,判斷向量之間的距離(差異),如果距離大于某個值,則認為不是同一個人的人臉圖像;如果距離小于某個值,則認為是同一個人的人臉圖像。
2)模型結構
FaceNet模型結構如下圖所示:
- 批量輸入層:輸入一個批次的樣本;
- 深度CNN:用來提取數據特征,然后進行L2標準化,輸出向量特征(嵌入)。該部分可以采用不同的CNN模型;作者原論文中給出了兩種CNN結構,并對性能進行了對比;
- 三元損失函數:接收特征向量,構建三元損失函數,使得Anchor-Positive之間的距離足夠小,Anchor-Negtive之間的距離足夠大。
3)損失函數
FaceNet采用三元損失函數,表達式如下:
∣∣f(xia)?f(xip)∣∣22+α<=∣∣f(xia)?f(xin)∣∣22||f(x_i^a)-f(x_i^p)||^2_2 + \alpha <= ||f(x_i^a)-f(x_i^n)||^2_2 ∣∣f(xia?)?f(xip?)∣∣22?+α<=∣∣f(xia?)?f(xin?)∣∣22?
?f(xia),f(xip),f(xin)∈T\forall f(x_i^a), f(x_i^p), f(x_i^n) \in \Tau ?f(xia?),f(xip?),f(xin?)∈T
其中,xiax^a_ixia?表示錨定樣本(參考樣本),xipx^p_ixip?表示正樣本,xinx^n_ixin?表示負樣本。∣∣f(xia)?f(xip)∣∣2||f(x_i^a)-f(x_i^p)||_2∣∣f(xia?)?f(xip?)∣∣2?表示參考樣本與正樣本間距離的L2范數(歐式距離)。T\TauT是訓練集中所有可能的三元組的集合,具有基數N。訓練優化的目標損失函數為:
∑iN[??∣∣f(xia)?f(xip)∣∣22?∣∣f(xia)?f(xin)∣∣22+α??]\sum_i^N[\ \ ||f(x_i^a)-f(x_i^p)||^2_2 - ||f(x_i^a)-f(x_i^n)||^2_2 + \alpha\ \ ] i∑N?[??∣∣f(xia?)?f(xip?)∣∣22??∣∣f(xia?)?f(xin?)∣∣22?+α??]
在訓練過程中,為了讓模型快速收斂,通常選擇難訓練的三元組樣本進行訓練,即argmax?xip(∣∣f(xia)?f(xip)∣∣22)argmax \ x_i^p(||f(x_i^a)-f(x_i^p)||^2_2)argmax?xip?(∣∣f(xia?)?f(xip?)∣∣22?)或argmin?xin(∣∣f(xia)?f(xin)∣∣22)argmin \ x_i^n(||f(x_i^a)-f(x_i^n)||^2_2)argmin?xin?(∣∣f(xia?)?f(xin?)∣∣22?). 實際訓練中,采用從小批量中選擇argmin和argmax,而不是所有樣本。
4)效果與性能
① 不同網絡結構及參數
網絡結構一:22層,140M(1.4億)個參數,1.6B(16億)次左右浮點運算
網絡結構二:基于GoogLeNet的初始模型。參數量減少了約20倍(約為6.6M~7.5M),每個圖像需要220M次浮點運算。
② 不同圖像質量的正確率
下表是不同壓縮率的JPEG圖像和不同分辨率圖像的正確率:
③ 不同嵌入維度的正確率
④ 不同數據集上準確率
- LFW數據集:使用額外的人臉對齊平均準確率達99.63%
- YFB數據集:平均準確率95.18%
總結
以上是生活随笔為你收集整理的深度学习人脸检测与人脸识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看不懂英文怎么办!学习编程,英语对初学者
- 下一篇: html时间选择控件火狐浏览器,火狐浏览