理解參考:張雨石博客
- DeepID1 (Linkface 孫禕)
參考論文:Deep Learning Face Representation from Predicting 10,000 Classes
CVPR 2014,LFW 準確率 97.20%
主要思想:通過深層網絡學習high-level的特徵表達,利用深層網絡,泛化能力強,容易拓展到未見過的新身份類別。
輸入: 圖片的一個patch
輸出: 10000身份類中的一個類別
爲什麼是10000的分類器,不用二分類? 爲了學習到更有區分能力和簡潔的特徵。
雖然提升了訓練難度,利用神經網絡的強學習能力,同時學習得到的特徵具有一定的泛化能力。爲了證明這點,作者將訓練的softmax輸出層由136增加到4349個,然後觀察分類能力以及之後的人臉識別能力。然後發現,準確率幾乎都是隨着識別種類的翻倍而線性增長的,效果提升很明顯。
爲什麼DeepID神經元數量固定爲160個,比分類輸出差那麼多?因爲DeepID層只有160維,遠遠小於其分類類別,這樣會形成壓縮之後的密集特徵。 作者試圖把4349個輸出作爲特徵,後續的測試慘不忍睹。我理解的是這樣做特徵太稀疏,特徵之間的相關性太強。
trick:
- 引入了外部數據集CelebFaces和CelebFaces+,因爲LFW雖然身份多,但是很多身份只有一張人臉,更適合測試一些。
- 輸入圖像的處理。拿到一張圖像,選取60個patch分別訓練60個模型,並行學習,每個模型提取2✖️160維的DeepID特徵。
這裏"2"的解釋:patch本身和它的水平翻轉。???疑問:是對原patch水平翻轉還是對DeepID之前那一層的輸出矩陣水平翻轉????
60個patch怎麼來的:先裁剪10個regions,基礎上分別選取3個scales,基礎上再分別選取兩種顏色(RGB和灰度)
這樣特徵總維數就是160✖️2✖️60。
爲什麼要multi-scale? 我理解的是圖像的尺度大能一覽圖像的全貌,小可以關注一些細節信息,這一點可能對學習有幫助。
如圖,上部分爲10個regions的示例,下部分爲3cales的示例。
-
face representation 使用自己設計的Multi-scale ConvNets結構,提取high-level特徵
-
face verification 使用 Joint Bayesian 或者 Neural Network,經作者實驗證明前者更好。
① face detection:學習5個關鍵點(眼睛、鼻尖、兩個嘴角)
② face alignment:根據兩個眼睛和兩個嘴角的中點,做相似變換(保持形狀不變,大小和方向可變),全局對齊面部。
③ face representation:
對於對齊的人臉,選取60個patch
- 輸入:如果patch爲長方形,輸入尺寸爲39✖️31✖️k;如果patch爲正方形,輸入尺寸爲31✖️31✖️k( k爲1時爲灰度圖像,k爲3時爲RGB圖像)
- C1:卷積核爲4✖️4✖️k,20個,特徵圖爲36/28✖️28✖️20
- M2:池化窗口爲2✖️2,特徵圖爲18/14✖️14✖️20
- C3:卷積核爲3✖️3✖️20,40個,特徵圖爲16/12✖️12✖️40
- M4:池化窗口爲2✖️2,特徵圖爲8/6✖️6✖️40
- C5:卷積核爲3✖️3✖️40,60個,特徵圖爲6/4✖️4✖️60
- M6:池化窗口爲2✖️2,特徵圖爲3/2✖️2✖️60
- C7: 卷積核爲2✖️2✖️60,80個,特徵圖爲2/1✖️1✖️80
- F8(DeepID): 可以形成高度緊湊和預測性的一些特徵。
拉平爲160維的特徵=10regions✖️3scales✖️2(RGB and Gray)✖️2 (翻轉)
值得注意的是CNN最後一層DeepID層不僅和C7直接相連,也和M6相連,作者將之稱爲Multi-scale ConvNets。爲什麼連接兩層,是因爲:C7神經元數量少,攜帶的信息比較少,使用M6可以減少信息損失。這一步的具體做法是:先將C7和M6這兩層拉平(flatten),然後分別和DeepID層全連接,經過ReLU激活函數後的輸出就是DeepID特徵。如公式所述:
上標1表示M6,上標2表示C7
其中,使用Relu作爲激活函數跟在每個卷積層後面,代替Sigmoid,是因爲:gradient的性質不同,Relu的gradient大多是常數,有助於解決深層網絡的收斂問題;而Sigmoid的gradient比較平緩,接近於0,容易造成梯度消失的問題。
④ face verification:
1) Joint Bayesian 聯合貝葉斯
輸入:兩張圖像的DeepID特徵向量
輸出:二分類結果(是or不是)
參考論文:Bayesian Face Revisited: A Joint Formulation,ECCV 2012
在LFW上 準確率達92.4%
聯合貝葉斯模型可表示爲,表示類間差異,表示類內差異,都符合高斯分佈,且由訓練數據估算得到。人臉驗證通過對數似然比實現。
使用PCA降維,將兩張人臉聯合建模,利用EM算法求解條件概率,後面是具體的推導:
基於普通的 Bayesian Face 的方法:
注意:這裏寫錯了,改爲
作者經過實驗證明,聯合貝葉斯可以增加兩張人臉的可分性。
詳細EM算法求解的過程見這篇文章,沒有搞懂,先跳過????????
關於協方差的解釋:
協方差的意義是度量兩個隨機變量的相關性,正值爲正相關,負值爲負相關。
兩個性質:
其中 , 可以看出協方差矩陣是一個沿着對角線對稱的變量,且對角線爲各個變量的方差。
2 ) Neural Network 神經網絡
驗證用神經網絡只是一個三層的淺層網絡,輸入是成對的圖像patches,640(一對圖像水平翻轉)*60(patch)維,輸出層是2分類結果輸出(是or不是)。
CVPR 2014
trick:
-
使用Supervised Descent Method(SDM)算法來檢測關鍵點
-
在DeepID2的softmax層(softmax作爲識別信號)後添加了驗證信號Logistic Regression作爲最終的目標函數,可以有效減小類內距離
-
使用 前-後向貪婪( forward-backward greedy) 算法來選擇更有效的DeepID2向量,降低冗餘,節省驗證時間
關於與SDM算法:
求解非線性最優化問題的兩個難點:
-
方程不可微,或者計算量太大
-
Hessian矩陣太大,或者不是正定矩陣
通過學習得到了一系列下降的方向和該方向上的尺度,使得目標函數以非常快的速度收斂到最小值,迴避了求解Jacobian矩陣和Hessian矩陣。
參考論文:Supervised descent method and its applications to face
alignment, CVPR 2013
現實中可能不會有足夠的計算資源去一次訓練所有的樣本,於是就有了上面右圖的方法,更新每一個daerta(x),每次都會找到一個局部最小值(作爲監督),然後不斷迭代,減少最小值之間的誤差距離(也就是損失函數曲線變得越來越平緩),最終就會找到全局最小值。
① face detection: 通過SDM算法來學習21個關鍵點
② face alignment:基於21個關鍵點做相似變換,全局對齊
③ face representation:
公式表達:
- 識別信號 :softmax層,n=8192
其中 f 爲DeepID2特徵向量,t爲groud truth的類別,是softmax參數,是目標概率分佈(),是預測概率分佈。 - 驗證信號:
1)基於L2的驗證信號:
其中,和是兩個圖像的DeepID2特徵,表示ground truth是否爲同一身份,={m}是需要學習的參數(m不能簡單通過梯度下降更新,因爲梯度可能爲0,可以通過最小化先前N個訓練對的驗證錯誤來更新,N經過實驗證明可取 200, 00)。
同一身份時,需要最小化兩個DeepID2的L2距離;不同身份時,設置一個閾值m,使得L2距離儘可能大於閾值m。即前者減小了類內距離,後者增加了類間距離。取1/2倍L2距離的平方是爲了便於求梯度。
2)基於L1的驗證信號:
3)基於餘弦相似度的驗證信號:
其中表示餘弦相似度(通過測量兩個向量的夾角來度量相似性
,),={w,b}是需要學習的參數。
實驗結論:
-
經過實驗證明,λ在0.05周圍時,驗證信號精確度最高
這裏超參數λ的作用:λ=0,只有識別信號,λ->∞,只有驗證信號。
-
DeepID的訓練集人數越多,最後的驗證率越高。
-
對不同的驗證信號,包括L1,L2,cosin等分別進行了實驗,發現L2 最好。
④ face verification:
使用前-後向貪婪算法來選擇更有效的DeepID2特徵來節省時間,降低冗餘。
論文中,作者對一張圖片裁剪400個patch,其位置、比例、顏色通道、水平翻轉都有所不同,用前-後向貪婪算法選擇25個DeepID2特徵向量(如下圖所示),拉平成25✖️160=4000維,再用PCA降維成180。
再送入聯合貝葉斯,得出結果(是or不是)。
解釋前-後向貪婪算法:
前向和後向都屬於特徵選擇的範疇。
前向選取(Forward Selection),首先,初始化特徵子集F爲空集,然後對不屬於F的特徵,計算添加該特徵之後模型提升的精度,選取其中提升精度最大的特徵添加到F中,循環以上操作直至精度不再提升。
後向淘汰(Backward Elimination),與前向選擇相反,後向淘汰將F初始化爲所有特徵的集合,每次選取一個特徵,計算不考慮該特徵的時候模型的精度,若精度提升,則將該特徵剔除F,直至精度不再下降。
3.DeepID2+
參考論文:Deeply learned face representations are sparse, selective, and robust,CVPR 2014
LFW 準確率99.47%
trick:
- 訓練數據集Merge了celebFaces+和WDRef數據集,總共290000副人臉圖片,12000個人;
- 特徵圖個數由原來的20、40、60、80增加到128,最終產出512維DeepID2+的特徵(原始160維);
- 在每個卷積層都增加了監督信息,不僅和第三層第四層的max-pool層連接,還連接了第一層和第二層的max-pool層,通過連接max-pool層的一個512維的全連接實現。 (是否可以解決上週intermediate supervision淺層標籤如何設置的疑問???)
網絡結構:
Id(識別信號)、Ve(驗證信號)表示監督信號,相當於損失函數
LFW 準確率 99.53%
改進:採用圖像識別方面當時最新的網絡結構,且層數加深(更加Deep試試)
trick:
- 在pooling層之前堆疊卷積層或inception層,有助於學習具有更大感受野和更復雜非線性的特徵,同時能限制參數數量。但是準確率提升不大(99.47%->99.53%),可能因爲網絡還不夠深。
感受野的定義是:卷積神經網絡某層的神經元在前一層映射的區域大小。
關於更大的感受野:例如,3x3 是最小的能夠捕獲像素八鄰域信息的尺寸。兩個 3x3 的堆疊卷基層的有限感受野是 5x5 ;三個 3x3 的堆疊卷基層的感受野是7x7,故可以通過小尺寸卷積層的堆疊替代大尺寸卷積層,並且感受野大小不變。我理解的是越大的感受野,越能提取更多的上下文信息,提取的特徵更爲高層(high-level)一些。
感受野計算:
RF = 1 #待計算的feature map上的感受野大小
for layer in (top layer To down layer):
RF = ((RF -1)* stride) + fsize
爲什麼使用Inception?隨着網絡深度增加, 容易過擬合併且參數量太大,可以通過增加寬度的方式緩解。
- Self-supervised Multi-level Face Model Learning for Monocular Reconstruction at over 250 Hz,CVPR 2018,馬克斯-普朗克研究所和斯坦福大學合作完成 ,Oral
論文鏈接
trick:
- 自監督的損失函數
僅憑一張圖片,重構臉部 3D 模型,是非常有難度的。斯坦福大學研究者針對這一挑戰,建造了一種多層人臉模型,將 3D 形態模型正則化的優點和經驗糾正空間的外部泛化相結合,能夠更好地推廣到現實世界的人臉建模中,同時運行頻率超過 250 Hz。
- The Devil of Face Recognition is in the Noise ,ECCV 2018
論文鏈接
發現:
在CVPR 2018的paper中,很多提到了3D&2D、GAN、fiducial point/landmark、loss。