人臉識別綜述

 

人臉識別是圖像分析與理解最重要的應用之一,所謂人臉識別,就是利用計算機分析人臉視頻或者圖像,並從中提取出有效的識別信息,最終判別人臉對象的身份。人臉識別的研究能夠追溯到20世紀 60年代末期,主要的思路是設計特徵提取器,再利用機器學習的算法進行分類。2012深度學習引入人臉識別領域後,特徵提取轉由神經網絡完成,深度學習在人臉識別上取得了巨大的成功。下面以時間爲順序,梳理下人臉識別各算法的發展歷程。
1、傳統算法
(一)基於幾何特徵
一、原理
人臉由眼睛、鼻子、嘴巴、下巴等部件構成,這些部件的形狀、大小,以及各部件在臉上的分佈各異,構成各類各樣的人臉,利用這些部件的形狀和結構關係的幾何描述,作爲人臉識別的特徵。好比:眼角點、鼻尖點和兩個嘴角點,構造若干特徵向量。特徵向量一般包括人臉指定兩點間的距離、曲率、角度等。
1973年,Kelly’s and Kanade’s PhD theses,第一篇人臉識別的paper,
 
 
二、優缺點
(1)優勢
算法識別速度快,須要的內存小。
(2)缺點
通常幾何特徵只描述了部件的基本形狀與結構關係,忽略了局部細微特徵,形成部分信息的丟失,更適合於作粗分類,並且目前已有的特徵點檢測技術在精確率上還遠不能知足要求。
(二)基於全局信息(holistic method)
基於幾何特徵的方法,萃取人臉部件的輪廓和幾何關係,並無用到圖片中的其餘信息,爲了提升識別準確度,全局算法應運而生,全局算法的特徵向量,包含人臉圖像上全部部分的信息。
按照對全局特徵處理方法的不一樣,介紹下面兩種方法
一、PCA(Principal Components Analysis)
a.提出背景:
照片的識別,能夠當作特徵向量相互匹配的過程。若是2張100*100的照片,在各個維度上都相近,那麼咱們能夠認爲,這兩張照片屬於同一我的。可是以100 * 100的照片爲例,數據維度10000維,數據維度過高,計算機處理複雜度高,須要將維度下降(由於10000維裏面數據之間存在相關關係,因此能夠除去重複維度信息,而保持信息不丟失)
b.降維方法
 
 
 
下降維度後,再拿這個壓縮過的向量作識別便可。典型的方法有egienface等。
 
 
PCA所做的是將數據映射到最方便表示這組數據的座標系上,映射時沒有利用任何數據分類信息。作PCA實際上是在信息損失儘量低的狀況下,將數據降維。若是在降維的時候加入分類信息,效果會不會更好?
二、LDA(Linear Discriminant Analysis線性判別分析)
 
 
左圖是PCA,它所做的只是將數據映射到,最方便表示這組數據的座標軸上。分類效果可能通常。
右圖是LDA,能夠明顯看出,在增長了分類信息以後,兩組輸入映射到了另一個座標軸上,有了這樣一個映射,兩組數據之間的就變得更易區分了(在低維上就能夠區分,減小了很大的運算量)。
LDA的典型方法有Fisher Linear Discriminant等,它求一個線性變換,使樣本數據中「between classes scatter matrix」(類間協方差矩陣)和「within classes scatter matrix」(同內協方差矩陣)之比的達到最大。
(三)基於局部信息
基於局部信息的的提取方法也叫Feature-based method。咱們考慮一種狀況,同一我的的2張照片,它們之間惟一的區別是其中一人的眼睛是閉着的。在總體方法中,全部的特徵向量的均可能不一樣(每個特徵向量都能看到全圖信息)。但在在基於特徵的方法中,大部分特徵保持不變,只有與眼睛周圍提取的特徵向量會不一樣。並且,咱們能夠在基於特徵方法中,將描述符設計爲對變化(例如縮放、旋轉或平移)保持不變。使其魯棒性更強
基於局部信息的典型算法是LBP(Local Binary Pattern,局部二值模式),由芬蘭的T. Ojala, M.Pietikäinen, 和 D. Harwood 在1994年提出,用於圖像的局部紋理特徵提取。
一、原理
原始的LBP算子定義爲在3*3的窗口內,以窗口中心像素爲閾值,將相鄰的8個像素的灰度值與其進行比較,若周圍像素值大於中心像素值,則該像素點的位置被標記爲1,不然爲0。這樣,3*3鄰域內的8個點經比較可產生8位二進制數(一般轉換爲十進制數即LBP碼,共256種),即獲得該窗口中心像素點的LBP值,並用這個值來反映該區域的紋理信息。以下圖所示:
 
 
LBP算子利用了周圍點與該點的關係對該點進行量化。量化後能夠更有效地消除光照對圖像的影響。只要光照的變化不足以改變兩個點像素值之間的大小關係,那麼LBP算子的值不會發生變化,因此必定程度上,基於LBP的識別算法解決了光照變化的問題(圖像光照變化不均勻時,各像素間的大小關係被破壞,對應的LBP模式也就發生了變化)。
原始的LBP提出後,研究人員不斷對其提出了各類改進和優化,使其具備旋轉不變等特性。
 
通過LBP處理後的以下所示
 
 
二、Pipeline
a、首先將檢測窗口劃分爲16×16的小區域(cell);
b、計算每一個像素點的LBP值
c、而後計算每一個cell的直方圖
d、最後將獲得的每一個cell的統計直方圖進行鏈接成爲一個特徵向量,也就是整幅圖的LBP紋理特徵向量
而後即可利用SVM或者其餘機器學習算法進行分類。
2、深度學習算法
由於對人臉識別的許多規律或規則進行顯性的描述至關困難,而神經網絡方法則能夠經過學習,得到這些規律的隱性表達,它的適應性更強。2012年深度學習在ILSVRC大放異彩後,不少研究者都在嘗試將其應用在本身的方向,目前深度學習在人臉識別中也取得了很是好的效果。
(一)DeepFace
DeepFace是Facebook在2014年的CVPR上提出來的,後續出現的DeepID和FaceNet也都體現DeepFace的身影,能夠說DeepFace是CNN在人臉識別的奠定之做。下邊介紹DeepFace的基本框架。
一、網絡架構
 
 
DeepFace的架構並不複雜,層數也不深。網絡架構由6個卷積層 + 2個全鏈接層構成。
二、Pineline
從實現過程,理解網絡
a、圖片的3D對齊
輸入原始圖片,講過3D對齊後,令人臉的正面朝前(圖g)
 
 
3D對齊技術能夠將圖像從2D空間,映射到3維空間,獲得人臉特徵3維空間的分佈,進而能夠獲得人臉在2D空間下,各類角度的特徵分佈。
Recongnition任務中,正面照片的分辨效果最好,圖g輸出人臉的正面圖片用來作識別的input,圖h輸出人臉在45度角下的2D圖,用來展現3D對齊的在各個角度下的2D的輸出樣例。
b、前3層採用傳統的conv提取信息
經過3層共享權值的卷積,每一層在整張圖片上,提取本層的特徵(同一層內,提取的是同一維度上的特徵,由於filter同樣)
 
 
在這裏,介紹下共享權重卷積和非共享權重卷積。
1)共享權重
1個卷積核,提取1個特徵,卷積核在input圖上滑動,提取不一樣區域的同1種特徵(叫作卷積層的參數共享),不一樣的卷積核,在不一樣特徵的維度上,對input進行特徵提取。大部分咱們看到的卷積都是這種結構。參數量少,計算速度快。
 
 
不一樣的pixel對應的filter相同
若是1個卷積核大小是「5*5*1」,一個圖對應的參數是5*5*1, feature map上輸出的是,不一樣部位,同一維度上的特徵。
2)非共享權重( Local-Conv),也叫局部鏈接卷積
 
 
不一樣的pixel對應的filter不一樣。
若是1個卷積核大小是「5*5*1」,則1個128*128大小的圖上,會有124*124個這樣的filter,對應的參數數量是124*124*5*5*1,參數量劇增。由於不一樣的filter提取的是不一樣維度上的特徵,因此feature map上輸出的是不一樣部位,不一樣維度上的特徵。
這樣作的理由是,由於input裏面人臉通過了3D對齊和2D映射,輸入的圖片是矯正後的正面人臉,各特徵點的position都固定下來了,人臉部不一樣位置(鼻子,嘴巴,....)的特徵不一樣,用不一樣的filter來學習效果更好。
c、後3層conv,採用局部鏈接層,提取不一樣維度上的特徵。
後3層,採用Local-Conv,提人臉不一樣位置上的各類不一樣特徵,由於Local-Conv參數量巨大,因此須要使用超大的數據庫進行訓練。DeepFace採用的是Facebook本身作的SFC數據集,有4030我的的440萬張人臉數據。因此用在這裏正好~
 
 
d、過全鏈接層,獲取圖像全局信息
1)過卷積生成的feature map送入第7層,第7層爲全鏈接層,能夠感覺到上一層傳過來的圖像的全部信息。
之因此人臉識別的各類架構裏面,大部分都含有這一層,緣由是,全鏈接層能夠捕捉到人臉距離較遠區域的特徵之間的關聯性。好比,眼睛的位置和形狀,與嘴巴的位置和形狀之間的關聯性,這種關聯性,能夠contribute to最後一步的recognition score.
2)在第7層對全部特徵進行了L2歸一化,使其值域落在【0,1】之間,以減弱圖像對光照的敏感性.爲何歸一化以後就能夠減小圖像對光照的敏感性?
 
 
個人是這樣理解的,歸一化以前,光照強的圖像(如右圖)對應的值高,好比左圖中某一點a的像素值爲100,左圖上像素值最大的是200,右圖的光線更強,與a點相對應的點a’像素值爲110,右圖上像素值最大的是220,通過歸一化後,左圖右圖同一點的值,也就相同了。
e、輸出4030類的識別結果。
用softmax輸出4030種人物的分類信息
三、網絡特色
a、提出了3D對齊
3D對齊和3D-2D映射在這裏不敷述,paper中以爲這樣作,對最後的準確率提高幫助較大。可是如今的網絡,在沒有采用3D對齊的前提下,也取得漂亮的score.
3D對齊這一塊能夠先放一放。
b、局部卷積。
局部鏈接的思想,就跟上面分析的同樣,比較好理解。至於這種方法在別的網路中work不work,後面paper看多了應該能有個更清楚的認識。
四、網絡成績
DeepFace在LFW數據集中進行人臉識別中取得了97.35%的好成績,該成績相對於傳統方法中依靠人工顯式的提取特徵,再進行分類的method,識別準確性得到明顯提升,再次證明了CNN在特徵提取方面的威力,此外該成績已經逼近人類在LFW數據集中97.5%的識別成績,性能卓越。
 
 
五、特徵度量
雖然網絡的output是個4030維的分類結果,paper中仍是提出了另外的度量2個圖片類似性的方法。
a、內積
文中直接計算兩個通過歸一化後的特徵之間的內積來計算2個圖像過backbone後的vector之間的距離,一開始有點不太懂,兩個圖片相同的話,內積是大仍是小?感受看內積大小分不出來2個圖片類似性啊?
後來想了想,這樣之因此work,是由於本網絡的特殊性。過第7層的fc層後,輸出的vector是個4096維的數據,網絡架構中採用了relu激活,這4096維中有75%的數據是0,4096維的vector構成了1個稀疏向量。基於這樣的前提,兩個不一樣的圖片,對應的不一樣位置上的0和非0元素相乘抵消,內積趨近於0,而類似的2個圖片,因爲0存在於2個vector相同的位置,非0元素也存在於2個vector相同的位置,0沒有和非零元素相抵消,對應的值較大。這樣就實現了圖片類似性的區分。
Paper中提到的另外2個距離度量算法。
b、X² similarity
按照下面公式乘就能夠了,比較簡單,沒啥好說的
 
 
 
 
權重參數是由SVM學來的
c、Siamese network孿生網絡
當神經網絡訓練完成後,將其除了L8外的其餘層複製爲兩份,分別輸入兩張人臉圖像,獲得特徵後,先計算兩個feature的絕對差值,而後將其輸入給一個新的全鏈接層(注意不是原來的L8,其只有一個神經元)來進行二分類,判斷兩張人臉是否身份相同
 
 
 
 
(二)DeepID
DeepID是一種特徵提取的算法,由港中文湯曉鷗團隊於2014年提出,發表於CVPR2014。其應用領域是人臉識別的子領域——人臉驗證,就是判斷兩張圖片是否是同一我的。以前的人臉驗證任務主要的方法是使用過完備的(over-complete)低層次特徵,結合淺層的機器學習模型進行的。過去的方法經常是將人臉提取出幾萬乃至幾百萬的特徵,而後將特徵進行降維,再計算兩個特徵的類似度,本文提出一種使用深度學習提取人臉深層次特徵(稱之爲DeepID)的方法。DeepID特徵由人臉分類任務學習獲得,此特徵能夠用於人臉驗證中,最終在LFW數據集上取得了97.45%的成績。
一、網絡架構
 
 
DeepFace的架構並不複雜,層數也不深。網絡架構由4個卷積層 + 1個全鏈接層構成。
二、Pineline
a、作patch
 
1)截區域
按照人臉特徵點的分佈,在1張輸入圖片上取10個區域,以下圖所示:
 
 
2)數據加強
(1)將每一個區域,resize成3中不一樣尺度的pic,以下圖所示:
 
 
(2)將圖像進行水平翻轉
 
 
(3)提取灰度圖
 
 
(4)patches總量
通過前3步的數據加強,此時的1張image,產生了10 * 3 * 2 * 2 = 120個區域,將每1個區域與其水平翻轉的區域,送入網絡,進行特徵提取。此步共訓練60個神經網絡。輸出160*2維的DeepID
 
 
3)增長patches效果
由下圖可見,增長patches數量後,網絡性能,相對於只用了1整張image的原始結構,提高明顯,感受就是數據加強的緣由。
 
 
 
b、過ConvNets
 
 
以1個區域的輸入爲例,若是區域是長方形,則resize成39*31,若是若是區域是正方形,則resize成31*31,假設本次輸入的區域是長方形,喂入網絡,如上圖所示。
 
 
 
圖片通過4層卷積,第3層,和第4層的feature map分別是3*2*60,和2*1*80維。將最後2層的feature map分別過全鏈接層,concatenate成1個160維的vector
 
 
Concatenate方式:在同一維度上疊加
不一樣hierarchy的Feature map疊加在一塊兒,分類器能夠看到多尺度的圖像。想當於聯繫了上下文,網絡性能更好。
 
 
DeepID自身的分類錯誤率在40%到60%之間震盪,雖然較高,但DeepID是用來學特徵的,並不須要要關注自身分類錯誤率。
 
將上文160維的vector送入soft-max進行分類,輸出10000分類的結果。60個網絡,各自對應各自預測的cls結果,以下圖所示:
 
 
三、利用DeepID作verification
原本覺得作完cls,這個paper就能夠結束了,然鵝,看了paper後面密密麻麻的2張,才意識到這個paper是關於verification的,之因此要作cls,主要是多分類的訓練,能夠提升ConvNet的提取特徵的能力,終其目的,仍是爲了拿到提取的特徵,作其關心的verification
 
a、用前面訓練好的網絡,對2張圖片作verification
每張照片,根據是否水平翻轉,分爲2組,每組有60個patches(10個區域,每一個區域3個size,每一個size有RGB和Grey2種模式)
將每1個區域與其水平翻轉對應的部分,聯合要對比的圖片的同一個區域,組着在一塊兒,送入網絡,進行特徵提取。此步調用了60個神經網絡。
 
 
每張輸入的160維vector,即爲那個區域的identity,可視化160維的數據以下,能夠看出相同人臉的identity類似度高,不一樣人臉的identity區別較大。
 
 
1張image通過網絡,輸出120(60個patches,每一個patch裏2張圖)*160=19200維vector,以此vector表徵人臉的identity。
將2張face的identity,送入joint Bayesian,判斷是否爲同1我的。
 
 
下面介紹一下classifier裏面的joint Bayesian分類器
b、Joint Bayesian
1)經典Bayesian Face
在介紹joint Bayesian以前,先看一下joint Bayesian出現以前,業界普遍使用的經典Bayesian Face,算法描述以下:
 
 
 
 
 
 
 
 
 
可是經典bayesian從2維投射到1維時,會喪失一些分區信息,致使在2維平面上可分的目標,在1維平面上變得不可區分。
 
 
從上圖中能夠看到,2-D的數據經過差分x-y映射到1-D上。O附近的點交錯在一塊兒, 使得在O附近的Class-1 和Class-2 沒法區分開來。這就是經典Bayesian Face的缺陷
 
2)joint Bayesian
針對經典Bayesian Face出現的問題,中科大,港中文以及亞研院的4位同窗,在孫劍的指導下於2012年提出來joint Bayesian方法
 
 
 
 
c、神經網絡分類器
14年,當時的verification sota 分類器仍是joint Bayesian,神經網絡成績通常,做者試了這2種方法後,選擇了性能更優的joint Bayesian
 
 
四、網絡成績
DeepID相對於傳統的PCA方法,表徵能力進一步加強
 
 
DeepID在LFW數據集上取得了97.45%的準確率,相比於DeepFace的97.35%,得到了進一步的提升。ROC曲線以下:
 
 
五、數據指標
簡單的介紹下ROC,之前看的時候沒有仔細去弄明白這個指標,最近看好多paper上都有這個東西,查閱了資料,總結以下
ROC全名叫receiver operating characteristic curve,中文譯爲:接收者操做特徵曲線,用以說明二分類器在識別閾值變化時的診斷能力。
ROC將僞陽性率(FPR)定義爲 X 軸,真陽性率(TPR)定義爲 Y 軸。繪圖方法以下
a、統計樣本分類score
將一系列樣本,按照positive可能性得分,進行排序
 
 
b、計算真陽率和假陽率
以score做爲閾值,依次對排好序的樣本進行判斷,score > threshold, 則斷定爲Positive, 不然判爲Negative,每個threshold計算1次真陽率和假陽率,作出這個20個樣本的真陽率-假陽率對應圖。
 
 
c、ROC曲線優點
爲何要使用ROC呢?由於ROC曲線有個很好的特性:當測試集中的正負樣本的分佈變換的時候,ROC曲線可以保持不變。在實際的數據集中常常會出現樣本類不平衡,即正負樣本比例差距較大,並且測試數據中的正負樣本也可能隨着時間變化。下圖是ROC曲線和Presision-Recall曲線的對比:
 
 
(a)和(c)爲Roc曲線,(b)和(d)爲Precision-Recall曲線。(a)和(b)展現的是分類其在原始測試集(正負樣本分佈平衡)的結果,(c)(d)是將測試集中負樣本的數量增長到原來的10倍後,分類器的結果,能夠明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線變化較大。
六、小結
分類數提升,能夠學到表徵力更強的identity
 
 
 
 
用更多的分類來訓練網絡,測試的error rate持續下降。一開始還疑惑DeepID初衷是作verification,爲何一開始要用softmax作cls,其實緣由到這裏就明瞭了,分類越多,學到的160維的identity表徵力越強。
(三)DeepID_v2
港中文湯曉鷗團隊在DeepId_v1基礎上提出的新版本架構,發表於NIPS2014
一、Architecture
 
 
網絡架構基本上與DeepId_v1一致。
二、Pipeline
圖片被分紅20regions,每一個region有5scales,2RGB&Gray共10種模式,共生成200個pathes,進行水平翻轉,分別送入200個網絡中。
以1個55 * 47的RGB 模式patch爲例,過程和DeepID_v1類似,最後生成1個160維的向量。
用先後向貪心算法,從400個DeepID中,篩選出25個有效且互補的DeepID2向量,縮減計算規模,獲得160*25 = 4000的特徵值。
 
 
再利用PCA對此向量進行降維,獲得1* 180的向量,以此向量爲依據,作cls和verif,cls用交叉熵,verif用join Bayesian。
三、相比於DeepID_V1的改動
網絡結構沒有多大改動,重點是在loss計算上。衆所周知,表徵人臉的特徵最好能使不一樣的人臉之間的差別儘量大,使相同人臉的不一樣照片人臉之間差別儘量小。咱們但願獲得一個網路,這個網絡計算出來的特徵vector儘量知足上述條件。設計loss函數以下:
a、分類loss
 
 
F是特徵向量,θid是softmax層參數,t是label的分類結果。
b、Verification loss
 
 
1)類內loss
,input image和標籤數據是同一個分類,此時訓練網絡,使之與label中的特徵,儘量的相近。
 
 
 
2)類間loss
,input image和標籤數據屬於不一樣分類,
 
 
m爲超參數,事先指定好。由上圖知,當輸入的圖片的特徵vector,和label的vector差別很大,其L2距離超過m時,loss值爲0,網絡傾向於學習,使類間距離儘量的大的vector。
總Verification loss爲類間loss和類內loss的加權和,權重各爲0.5。
以前業界廣泛採用的方法是L1/L2範式和餘弦類似度,文中採用一種基於L2 Norm的損失函數。paper中做者測試了其餘幾種距離算法對準確率的影響,L2距離的性能最好。
 
 
c、cls和verif的組合
 
 
選取合適的λ,調整verif loss在總loss中的係數,當λ=0時,不計算verfi的loss,文中選取λ=0.5
四、網絡成績
LFW共有5749我的的數據,共13233張臉。數據集過小,paper中引入外部數據集CelebFace+,有10177我的的數據,共202599張臉。
爲充分利用從大量圖像塊中提取到的特徵,做者重複使用7次前項後向貪婪算法選取特徵,每次的選擇是從以前的選擇中未被留下的部分中進行選取。而後在每次選擇的特徵上,訓練聯合貝葉斯模型。再將這七個聯合貝葉斯模型使用SVM進行融合,獲得最佳的效果在LFW上爲99.15%。
 
 
 
相關文章
相關標籤/搜索