1. 程式人生 > >人臉特徵提取DeepID 1.0深度網路解讀

人臉特徵提取DeepID 1.0深度網路解讀

標籤: 深度學習 人臉校驗 DeepID

1.概述

文章名稱:Deep Learning Face Representation from Predicting 10,000 Classes
文章來源:2014CVPR
文章作者:Yi Sun, Xiaogang Wang, Xiaoou Tang
簡要介紹:人臉校驗是人臉識別中很重要的一部分,在經過人臉檢測、人臉對齊之後,我們要開始判斷兩張人臉究竟是否是同一張臉。本文所採用的方法,簡要來說,就是通過深度神經網路來提取人臉深層次的抽象的特徵,這種特徵抽象到可以區別出兩張不同的人臉,在提取出特徵後,再用分類器進行分類,文章採用了兩種分類方法以突出特徵提取網路的能力和效果,採用的兩種方法分別為:聯合貝葉斯人臉校驗( Joint Bayesian)

神經網路方法(neural network)。其中第一種方法聯合貝葉斯是一種超有效的人臉校驗演算法,是傳統貝葉斯臉演算法的提升,過些日子我仔細研究後會另開一篇部落格專門寫,公式不好推啊。。。

2.整體演算法流程描述

Deep hidden IDentity feature(DeepID)是一種特徵提取的演算法,這種網路一經訓練好後,可以提取出輸入人臉圖片的深層次特徵,用作者論文中的話來說,就是可以非常有效地完成多分類任務。這個多分類任務怎麼理解呢,就是說,在提取出了特徵以後,如果網路後面再加上一個softmax層,那麼即使是分10000個類(10000個不同的人臉),網路也可以有效地區別它們。簡而言之概括一下,這個訓練好的DeepID網可以將輸入圖片轉換成160維的特徵向量(實際上是160

×2×60維的特徵向量,具體為什麼後面再說),然後根據這個特徵採用分類演算法進行分類,比如用聯合貝葉斯或者一個分類用的神經網路,當然也可以用一個softmax層進行分類,作者標題中的10000class實際上就是softmax層實現的。

2.1 DeepID網特徵提取+softmax分類

下圖就是這個特徵提取DeepID網+softmax分類的示意圖,看圖的方式是從下至上,最下面的face patches是網路的輸入,實際上,這個網路是由120個卷積神經網路(實際上是60個引數不同的網,但是由120個輸入,所以算是120個網)並行而成的,比如最左邊的網路的輸入層輸入的圖片是這個人臉圖片的偏左臉的部分,然後經過卷積層1、2、3、4逐步提取特徵,最後一個卷積層接一個全連線層,這個全連線層由160個神經元組成,它的輸出也就是這張輸入圖片的160維特徵向量。之後這個特徵向量連結一個10000維的softmax層,也就是分成10000類,10000個神經元每一個的輸出都是屬於該類的概率,哪個值最大,就說明這張圖片屬於那類的概率大,這就是傳統的softmax的功能。這裡有一點我不太清楚,因為作者是120個這種網路,也就是說最後會有120個softmax層,它們是並行結構,那麼最終這120個softmax的輸出是怎麼聯絡在一起的呢,是這120個softmax的10000個節點一一對應相加然後歸一化求概率麼,還是單純的進行投票操作呢?留個疑問。

image_1bgft7ng714qd12kp1324qp1r6k9.png-86kB

2.2 DeepID網特徵提取+人臉校驗

這一部分整個演算法的流程和前面在DeepID前的所有過程都是相同的,不同之處在於,在提取出每一張影象的160維特徵向量後,不連線softmax層,而是將120個160維特徵向量連線在一起(再次說明,120是因為原始的一張人臉圖片被取出了120塊不同大小的人臉部分,但都是同一張圖片的),組成一個19200維的特徵向量,這個19200維的特徵向量,就是這張圖片的deepID特徵。
之後,如果要進行人臉校驗的話,我們會有兩張人臉圖片,提取它們各自的19200維的deepID特徵,之後採用聯合貝葉斯演算法或是神經網路進行分類,判斷它們是否是同一張臉。

3.DeepNets的訓練過程

其實,DeepID網路結構很簡單,看起來和非常經典的LeNet很相似,因此它的訓練也不復雜,首先詳細介紹它的網路結構。
網路結構示意圖如下:

image_1bgg9rvs4pu113r34c2vtt15g613.png-49.5kB

還是想說很像LeNet啊。

一個DeepID網(就是前面的120個之一)包含4個卷積層(每一個都帶有最大池化層)以及一個全連線層(也就是DeepID的160維特徵),在訓練網路時後面還要加上softmax層,不然不能給標籤沒法訓練了,當然訓練出網路後在測試資料上可以不加softmax,只到全連線層後就直接使用特徵。

網路的輸入是39×31×k大小的長方形或者是31×31×k大小的正方形,k是代表圖片的通道數。
之後進入第一個卷積層,卷積核大小是4×4×k,得到394+1×(314+1)×(kk+1)=36×28×1的輸出,因為該層由20個卷積核,得到了20個特徵圖,也就是36×28×20了。之後接最大池化層層,變成18×14×20,之後接一個ReLU激勵函式。後面卷積層和池化層的操作都類似,就不一一計算了,不過有一點要提及,每一個池化層結束後都由ReLU的激勵函式存在,因為ReLU函式由更強的擬合能力和效果(相比於sigmoid來說)。

直到第四個卷積層加池化層後,我們得到2×1×80的輸出,之後應該接全連線層,也就是我們的DeepID特徵層,此處DeepID層固化為160個神經元。這裡與往常不一樣的是,作者將這個全連線層不僅和第四卷積層連線,還連線到了第三卷積層上,原因是不僅由於第四卷積層神經元數量過少,而且第四卷積層的特徵相比與第三層更全域性,為了獲得多層次的特徵,所以要也需要第三卷積層提取的特徵。因此這個全連線層的公式為:

yj=max(0,ix1iw1i,j+ix2iw2i,j+bj)
其中上標1代表第三卷積層的神經元和權值,上標2代表第四卷積層的神經元和權值。

全連線層後也加一個ReLU層增加非線性擬合的能力。

全連線層後是一個10000類的softmax層,沒什麼說的,公式如下:

yi=exp(yi)nj=1exp(yj)
其中yj=160i=1xiwi,j+bj
之後用梯度下降法和反向傳播法可以更新權值,就不再介紹了。

4.人臉的特徵提取

網路訓練好了自然就要開始用它提取特徵,前面第三節詳細描述了訓練一個DeepID網的過程,而實際上,對於一張人臉圖片,我們要訓練的DeepID網可不止一個,足有60個,每個網有兩個輸,也就是同一個網會有兩個輸入和兩個輸出,要計算兩次,具體是怎麼回事呢,下面介紹。

對於一張人臉圖片,在經過人臉檢測和人臉對齊之後,作者按照瞳孔和嘴的位置對所有訓練樣本進行了對齊(保證後面的切片工作是同一尺度下的),然後根據特徵點的位置,進行了切塊提取,下圖上半部分就是對一張人臉在10個位置下的提取,然後每一個位置的切塊提取還會有三個不同的尺度,這就得到了同一張人臉的30個不同的部位人臉圖,下圖下半部分就是某兩個位置的三個不同尺度的圖。

image_1bggc7qll1au71fra1c9r1h3gvqf1g.png-199.2kB

有了30個不同部位人臉圖後,當然此時著30個不同部位人臉圖還都是RGB影象,我們還需要灰度影象上的特徵,因此每一個部點陣圖還要有一份灰度圖版的,因此30又翻個倍,變成了60。

之後,作者將每一個部位人臉圖進行水平翻轉。也就是同一個部位人臉圖又多出了一個和它一樣的但是翻轉形式的圖,所以就變成了120張圖。這裡要提一句,在兩個眼睛特徵點處的圖和兩個嘴角特徵點處的圖不是進行翻轉,而是進行對稱操作。

上面的過程可能有點繁瑣,總結一下,一張完整的人臉圖片,作者將它根據特徵點提取處10個不同部位人臉圖,之後每個部位人臉圖有三個尺度,就變成了30個人臉圖,之後由於RGB影象和灰度影象都需要,每個圖又翻倍,變成60個人臉圖,之後每一張圖作對稱或水平翻轉,變成了120個圖。

有了120個同一張臉的不同部點陣圖後,我們將同一個圖(包括翻轉前和翻轉後)的兩張圖輸入一個網路,因此就是60個網路,每個網路有兩次輸入輸出的計算(翻轉前和翻轉後)。最後在DeepID層得到一張人臉的特徵向量大小是160×2×60

5.人臉校驗的兩種方法

人臉校驗當然有很多種方法,這裡說的兩種是論文中提及的,一種叫聯合貝葉斯,一種是神經網路來分類。
在每一張人臉圖片都已經提出DeepID特徵的基礎上,我們取兩張圖片來進行人臉校驗,也就是取它們的DeepID特徵,然後放入到分類器中。
講到這裡其實和DeepID網路本身就沒什麼關係了。因此就不細說。下面附上用神經網路來分類的網路結構圖,輸入就是兩張圖的DeepID特徵對應連線在一起,然後就是單純的區域性連線和全連線,最後輸出0或1表示兩個類中的一個。

image_1bggdaemrg9tedkmto3qupt020.png-69.5kB

這裡再附上作者兩種分類方法的測試準確率曲線對比圖。

image_1bggdchjs1bjb1egr12clld717cr2d.png-30.7kB

下面是作者把DeepID特徵視覺化的結果,也是可以挺明顯的看出不同人臉提取的特徵不一樣哈。

image_1bggdeag66co1jbe19lshab1f462q.png-69.6kB