人臉識別演算法調研
1.神經網路:
來源:人的大腦
發展至今,一共有三波浪潮:
1957年~1969年 Perceptrons:無法解決異或問題
1985年~1990年 Neural Networks(BP):被svm幹掉
2006年~今天 Deep Neural Networks(DBN)
DNN:Geoffrey Hinton
CNN:Yann LeCun
RNN:Yoshua Bengio
優點:
(1)使用的和人腦相同的構造
(2)非常容易擴充套件模型容量和資料規模
(3)無需人工提取特徵,端到端
(4)規律的擬合到資料的擬合
問題:
太多的trick,都是依靠直覺提出來的,需要有solid學習機制和理論支援
2.機器學習的常用概念:
準確率:它表示的是預測為正的樣本中有多少是對的
召回率:針對我們原來的樣本而言的,它表示的是樣本中的正例有多少被預測正確了
過擬合:訓練集錯誤率很低,但測試集錯誤率很高。
迴歸:連續型數值,諸如識別人臉關鍵點、房價預測等
分類問題:諸如判斷性別
3.傳統機器學習演算法
(1)分類問題:
logistic(sigmoid):二分類問題
z = w0x0+w1x1+w2x2+w3x3+...+wnxn
svm支援向量機:
adaboost元演算法:
對其他多個分類器進行組合的一種方式,每個分類器具有一定的權重
(2)迴歸問題:
線性迴歸:
(3)聚類問題:
k-means:
4.CNN(卷積神經網路)
LeNet-5網路結構,如下:
區域性感知:
引數共享、多卷積核:
池化操作:取最大,取均值等
卷積過程:
5.國內外主流人臉識別演算法對比:
FaceNet:Google
與其他的深度學習方法在人臉上的應用不同,FaceNet並沒有用傳統的softmax的方式去進行分類學習,然後抽取其中某一層作為特徵,而是直接進行端對端學習一個從影象到歐式空間的編碼方法,然後基於這個編碼再做人臉識別、人臉驗證和人臉聚類等。
網路架構:
特點:
- 去掉了最後的softmax,而是用元組計算距離的方式來進行模型的訓練。使用這種方式學到的影象表示非常緊緻,使用128位足矣。
- 元組的選擇非常重要,選的好可以很快的收斂。
DeepFace:Facebook
網路架構:
特點:
先是使用3D模型來將人臉對齊,從而使CNN發揮最大的效果
沒有用太多的Max-pooling層,因為太多的Max-pooling層會使得網路損失影象資訊。
後面三層都是使用引數不共享的卷積核,之所以使用引數不共享,有如下原因:
- 對齊的人臉圖片中,不同的區域會有不同的統計特徵,卷積的區域性穩定性假設並不存在,所以使用相同的卷積核會導致資訊的丟失
- 不共享的卷積核並不增加抽取特徵時的計算量,而會增加訓練時的計算量
- 使用不共享的卷積核,需要訓練的引數量大大增加,因而需要很大的資料量,然而這個條件本文剛好滿足。
DeepId:共有三代,第一代DeepID,第二代DeepID2,第三代DeepID2+
人臉預處理:
網路架構:
特點:
該結構與普通的卷積神經網路的結構相似,但是在隱含層,也就是倒數第二層,與Convolutional layer 4和Max-pooling layer3相連,鑑於卷積神經網路層數越高視野域越大的特性,這樣的連線方式可以既考慮區域性的特徵,又考慮全域性的特徵。
DeepID2相對於DeepID有了較大的提高。其主要原因在於在DeepID的基礎上添加了驗證訊號。
DeepID2+相比於DeepID2,將DeepID層從160維提高到512維,同時將DeepID層不僅和第四層和第三層的max-pooling層連線,還連線了第一層和第二層的max-pooling層。
6.人臉識別技術分類:
(1)檢測:
傳統人臉檢測:
特徵提取:LBP/HOG/Harr
訓練:Adaboost/SVM
識別:滑動視窗
深度學習在人臉檢測上的應用:
(2)屬性分析:
傳統框架:
深度學習的應用:基於CDNN的人臉屬性識別框架
(3)驗證和識別:
基本框架:
7.傳統機器學習演算法與深度學習在影象識別上的不同
最大不同:深度學習輸入影象原資料即可,而傳統機器學習演算法,需要對影象做很多的操作,諸如:灰度化、歸一化等等,最後才把處理好的特徵送到機器學習演算法中去訓練。
深度學習:
(1)Advantages:準確度高,效果好
(2)Disadvantages:需要龐大的計算資源,這也是為什麼近幾年才開始又火起來的原因
8.CPU vs GPU
CPU:更適合邏輯複雜的運算,序列的運算
GPU:快取和控制單元很小,計算單元多,適合邏輯不復雜的大規模並行運算
9.常用分類:
sigmoid:二分類問題