人臉識別學習筆記一:入門篇

1、人臉識別概述
1.人臉識別的困難之處
  • 不一樣我的之間的區別不大:大部分人臉的結構都很類似,甚至人臉器官的結構外形都很類似。
  • 人臉的外形很不穩定:人的面部表情多變,不一樣的觀察角度、光照條件等都會影響人臉的視覺圖像。
2.人臉識別的典型流程
  • 人臉檢測(Face Detection):人臉檢測用於肯定人臉在圖像中的大小和位置,即解決「人臉在哪裏」的問題,把真正的人臉區域從圖像中裁剪出來,便於後續的人臉特徵分析和識別。html

    中星微AI刷新WIDER FACE人臉檢測世界紀錄

  • 人臉對齊(Face Alignment):同一我的在不一樣的圖像序列中可能呈現出不一樣的姿態和表情,這種狀況是不利於人臉識別的。因此有必要將人臉圖像都變換到一個統一的角度和姿態,這就是人臉對齊。算法

    人臉對齊例子

  • 人臉特徵表示(Feature Representation):人臉特徵表示是人臉識別中最爲重要的一步,它接受的輸入是標準化的人臉圖像,經過特徵建模獲得向量化的人臉特徵,最後經過分類器判別獲得識別的結果。數據庫

    一個完整的人臉識別流程

2、經常使用數據集

LFW:5749 人的13233張人臉圖像,其中有1680人有兩張或以上的圖像。網絡

YouTube Faces DB:面部視頻數據集,包含3425個視頻,1595個不一樣的人。框架

CASIA-FaceV5:500我的的25000張亞洲人臉圖片。less

其餘數據集及其下載連接:都是百度雲下載機器學習

3、人臉檢測算法介紹
1.基於模版匹配的算法

早期的人臉檢測算法使用了模板匹配技術,即用一我的臉模板圖像與被檢測圖像中的各個位置進行匹配,肯定這個位置處是否有人臉。而後可使用一些機器學習算法用於解決該問題,包括神經網絡,支持向量機等。以上都是針對圖像中某個區域進行人臉-非人臉二分類的判別。ide

這種方法的表明性成果是Rowley等人提出來的算法:用一個20*20的人臉模板圖像和被檢測圖像的各個位置進行匹配,每次在被檢測圖像上截取出一個20*20的滑動窗口,將模板和窗口進行比較,就能夠檢測窗口中是否包含人臉(模型參數的響應值高就說明包含人臉)。這種方法只能解決近似正面的人臉檢測問題,在其餘角度的人臉檢測效果並很差。函數

基於模版匹配的人臉檢測算法

爲了解決多角度檢測問題,Rowly等人提出來了一個新的方法:整個系統由兩個神經網絡構成,第一個網絡用於估計人臉的角度,第二個用於判斷是否爲人臉。角度估計器輸出一個旋轉角度,而後用整個角度對檢測窗進行旋轉,而後用第二個網絡對旋轉後的圖像進行判斷,肯定是否爲人臉。性能

多角度檢測的系統結構

Rowley的方法有不錯的精度,因爲分類器的設計相對複雜並且採用的是密集滑動窗口進行採樣分類致使其速度太慢。

2.基於AdaBoost框架的算法

boost算法是基於PAC學習理論(Probably Approximately Correct,機率近似正確)而創建的一套集成學習算法。其根本思想在於經過多個簡單的弱分類器,構建出準確率很高的強分類器,PAC學習理論證明了這一方法的可行性。

在2001年Viola和Jones設計了一種人臉檢測算法。它使用簡單的Haar-like特徵和級聯的AdaBoost分類器構造檢測器,檢測速度較以前的方法有2個數量級的提升,而且保持了很好的精度,這就是著名的VJ框架。VJ框架是人臉檢測歷史上第一個最具備里程碑意義的一個成果,奠基了基於AdaBoost目標檢測框架的基礎。

用級聯AdaBoost分類器進行目標檢測的思想是:用多個AdaBoost分類器合做完成對候選框的分類,這些分類器組成一個流水線,對滑動窗口中的候選框圖像進行斷定,肯定它是人臉仍是非人臉。

在這一系列AdaBoost分類器中,前面的強分類器設計很簡單,包含的弱分類器不多,能夠快速排除掉大量的不是人臉的窗口,但也可能會把一些不是人臉的圖像斷定爲人臉。若是一個候選框經過了第一級分類器的篩選即被斷定爲人臉,則送入下一級分類器中進行斷定,以此類推。若是一個待檢測窗口經過了全部的強分類器,則認爲是人臉,不然是非人臉。

分類器級聯進行判斷的示意圖

3.基於深度學習的算法

卷積神經網絡在圖像分類問題上取得成功以後很快被用於人臉檢測問題,在精度上大幅度超越以前的AdaBoost框架,當前已經有一些高精度、高效的算法。直接用滑動窗口加捲積網絡對窗口圖像進行分類的方案計算量太大很難達到實時,使用卷積網絡進行人臉檢測的方法採用各類手段解決或者避免這個問題。

  • Cascade CNN(Cascade Convolutional Neural Networks,級聯卷積神經網絡):Cascade CNN能夠認爲是傳統技術和深度網絡相結合的一個表明,和VJ人臉檢測器同樣,其包含了多個分類器,這些分類器採用級聯結構進行組織,然而不一樣的地方在於,Cascade CNN採用卷積網絡做爲每一級的分類器。

算法流程:

  1. 構建多尺度的人臉圖像金字塔,12-net將密集的掃描這整幅圖像(不一樣的尺寸),快速的剔除掉超過90%的檢測窗口,剩下來的檢測窗口送入12-calibration-net調整它的尺寸和位置,讓它更接近潛在的人臉圖像的附近。

  2. 採用非極大值抑制(NMS)合併高度重疊的檢測窗口,保留下來的候選檢測窗口將會被歸一化到24x24做爲24-net的輸入,這將進一步剔除掉剩下來的將近90%的檢測窗口。和以前的過程同樣,經過24-calibration-net矯正檢測窗口,並應用NMS進一步合併減小檢測窗口的數量。

  3. 將經過以前全部層級的檢測窗口對應的圖像區域歸一化到48x48送入48-net進行分類獲得進一步過濾的人臉候選窗口。而後利用NMS進行窗口合併,送入48-calibration-net矯正檢測窗口做爲最後的輸出。

Cascade CNN

  • MTCNN(Multi-task Cascaded Convolutional Networks,多任務卷積神經網絡):MTCNN是多任務的一個方法,它將人臉區域檢測和人臉關鍵點檢測放在了一塊兒。同Cascade CNN同樣也是基於cascade的框架,可是總體思路更加巧妙合理。MTCNN整體來講分爲三個部分:PNet、RNet和ONet。

    MTCNN網絡結構

算法流程:

  1. 首先按不一樣比例縮放照片,造成圖片的特徵金字塔做爲P-Net輸入。
  2. P-Net主要得到了人臉區域的候選窗口和邊界框的迴歸向量。並用該邊界框作迴歸,對候選窗口進行校準,而後經過NMS來合併高度重疊的候選框。
  3. 而後將候選框輸入R-Net網絡訓練,利用邊界框的迴歸值微調候選窗體,再利用NMS去除重疊窗體。
  4. O-Net功能與R-Net做用相似,只是在去除重疊候選窗口的同時顯示五我的臉關鍵點定位。
4、人臉識別算法介紹
1.早期算法
  • 基於幾何特徵的算法:人臉由眼睛、鼻子、嘴巴、下巴等部件構成,正由於這些部件的形狀、大小和結構上的各類差別才使得世界上每一個人臉千差萬別,所以對這些部件的形狀和結構關係的幾何描述,能夠作爲人臉識別的重要特徵。幾何特徵最先是用於人臉側面輪廓的描述與識別,首先根據側面輪廓曲線肯定若干顯著點,並由這些顯著點導出一組用於識別的特徵度量如距離、角度等。可是這類方法的精度通常都比較差。
  • 基於模板匹配的算法:從數據庫當中提取人臉模板,接着採起必定模板匹配策略,使抓取人臉圖像與從模板庫提取圖片相匹配,由相關性的高低和所匹配的模板大小肯定人臉大小以及位置信息。
  • 子空間算法:子空間算法將人臉圖像當成一個高維的向量,將向量投影到低維空間中,投影以後獲得的低維向量達到對不一樣的人具備良好的區分度。子空間算法的典型表明是PCA(Principal Component Analysis,主成分分析)和LDA(Linear Discriminant Analysis,線性判別分析)。PCA的核心思想是在進行投影以後儘可能多的保留原始數據的主要信息,下降數據的冗餘信息,以利於後續的識別。LDA的核心思想是最大化類間差別,最小化類內差別,即保證同一我的的不一樣人臉圖像在投影以後彙集在一塊兒,不一樣人的人臉圖像在投影以後被用一個大的間距分開。PCA和LDA最後都歸結於求解矩陣的特徵值和特徵向量。PCA和LDA都是線性降維技術,但人臉在高維空間中的分佈是非線性的,所以可使用非線性降維算法,典型的表明是流形學習和核(kernel)技術。流形學習假設向量點在高維空間中的分佈具備某些幾何形狀,而後在保持這些幾何形狀約束的前提下將向量投影到低維空間中,這種投影是經過非線性變換完成的。
2.人工特徵+分類器

第二階段的人臉識別算法廣泛採用了人工特徵 + 分類器的思路。分類器有成熟的方案,如神經網絡,支持向量機,貝葉斯等。這裏的關鍵是人工特徵的設計,它要能有效的區分不一樣的人。

描述圖像的不少特徵都前後被用於人臉識別問題,包括HOG(Histogram of oriented gradient,方向梯度直方圖)、SIFT(Scale-invariant Feature Transform,尺度不變特徵轉換 )、LBP(Local Binary Patterns,局部二值模式)等。它們中的典型表明是LBP特徵,這種特徵簡單卻有效。LBP特徵計算起來很是簡單,部分解決了光照敏感問題,但仍是存在姿態和表情的問題。

聯合貝葉斯是對貝葉斯人臉的改進方法,選用LBP和LE做爲基礎特徵,將人臉圖像的差別表示爲相同人因姿態、表情等致使的差別以及不一樣人間的差別兩個因素,用潛在變量組成的協方差,創建兩張人臉的關聯。文章的創新點在於將兩我的臉表示進行聯合建模,在人臉聯合建模的時候,又使用了人臉的先驗知識,將兩張人臉的建模問題變爲單張人臉圖片的統計計算,更好的驗證人臉的相關性,該方法在LFW上取得了92.4%的準確率。

人工特徵的巔峯之做是出自2013年MSRA的"Blessing of Dimisionality: High Dimensional Feature and Its Efficient Compression for Face Verification" ,這是一篇關於如何使用高維度特徵在人臉驗證中的文章。做者主要以LBP爲例子,論述了高維特徵和驗證性能存在着正相關的關係,即人臉維度越高,驗證的準確度就越高。

MSRA"Feature Master"

3.基於深度學習的算法

第三個階段是基於深度學習的方法,自2012年深度學習在ILSVRC-2012大放異彩後,不少研究者都在嘗試將其應用在本身的方向,這極大的推進了深度學習的發展。卷積神經網絡在圖像分類中顯示出了巨大的威力,經過學習獲得的卷積核明顯優於人工設計的特徵+分類器的方案。在人臉識別的研究者利用卷積神經網絡(CNN)對海量的人臉圖片進行學習,而後對輸入圖像提取出對區分不一樣人的臉有用的特徵向量,替代人工設計的特徵。

在前期,研究人員在網絡結構、輸入數據的設計等方面嘗試了各類方案,而後送入卷積神經網絡進行經典的目標分類模型訓練;在後期,主要的改進集中在損失函數上,即迫使卷積網絡學習獲得對分辨不一樣的人更有效的特徵,這時候人臉識別領域完全被深度學習改造了!

DeepFace由Facebook提出,是深度卷積神經網絡在人臉識別領域的奠定之做,文中使用了3D模型來作人臉對齊任務,深度卷積神經網絡針對對齊後的人臉Patch進行多類的分類學習,使用的是經典的交叉熵損失函數進行問題優化,最後經過特徵嵌入獲得固定長度的人臉特徵向量。Backbone網絡使用了多層局部卷積結構,緣由是但願網絡的不一樣卷積核能學習人臉不一樣區域的特徵,但會致使參數量增大,要求數據量很大,回過頭去看該策略並非十分必要。

DeepFace在LFW上取得了97.35%的準確率,已經接近了人類的水平。相比於1997年那篇基於卷積神經網絡的40我的400張圖的數據規模,Facebook蒐集了4000我的400萬張圖片進行模型訓練。

DeepFace

以後Google推出FaceNet,使用三元組損失函數(Triplet Loss)代替經常使用的Softmax交叉熵損失函數,在一個超球空間上進行優化使類內距離更緊湊,類間距離更遠,最後獲得了一個緊湊的128維人臉特徵,其網絡使用GoogLeNet的Inception模型,模型參數量較小,精度更高,在LFW上取得了99.63%的準確率,這種損失函數的思想也能夠追溯到早期的LDA算法。

FaceNet

相關文章
相關標籤/搜索