人臉是人體最重要的生物特徵之一,而人臉研究主要集中在人臉識別方面,人臉的表達模型分為2D人臉和3D人臉。2D人臉識別研究的時間相對較長,方法流程也相對成熟,在多個領域都有使用,但由於2D信息存在深度數據丟失的局限性,無法完整的表達出真實人臉,所以在實際應用中存在著一些不足,例如識別準確率不高、活體檢測準確率不高等。
3D人臉模型比2D人臉模型有更強的描述能力,能更好的表達出真實人臉,所以基於3D數據的人臉識別不管識別準確率還是活體檢測準確率都有很大的提高。
2D人臉識別、3D人臉識別現狀如何?
2D人臉識別現狀
2D人臉識別的優勢是實現的算法相對比較多,有一套比較成熟的流程,圖像數據獲取比較簡單,只需一個普通攝像頭即可,所以基於2D圖像數據的人臉識別是目前的主流,在安防、監控、門禁、考勤、金融身份輔助認證、娛樂等多種場景中都有應用。
2D人臉識別根據其技術發展可分為兩大類:傳統人臉識別、基於神經網絡人臉識別:
1. 傳統人臉識別
傳統人臉識別主要採用數學方法,從圖像矩陣中提取對應的特徵,該特徵一般為尺度不變特徵,常用的算法有SURF、SIFT、HARRIS、GFTT等。
2. 基於神經網絡人臉識別
目前2D人臉識別算法在各個人臉識別挑戰賽、在各種的開源數據集上測試的識別準確率已經達到了99.80%(人臉識別算法insightface在LFW數據集上的測試結果),識別準確率甚至可以跟人類相媲美,但在苛刻的金融環境僅作為一種輔助手段,人臉識別之後還需要別的驗證手段,如輸入手機號等。
這是為什麼?
因為2D人臉識別有一定的局限性,為了彌補不足,3D人臉識別應運而生。
3D人臉識別現狀
目前3D人臉識別在市場上根據使用攝像頭成像原理主要分為:3D結構光、TOF、雙目立體視覺。
3D結構光
3D結構光通過紅外光投射器,將具有一定結構特徵的光線投射到被拍攝物體上,再由專門的紅外攝像頭進行採集。主要利用三角形相似的原理進行計算,從而得出圖像上每個點的深度信息,最終得到三維數據。
基於3D結構光的人臉識別已在一些智慧型手機上實際應用,如國外使用了超過10億張圖像(IR和深度圖像)訓練的FaceId;國內自主研發手機廠商的人臉識別。
TOF
TOF簡單的說就是雷射測距,照射光源一般採用方波脈衝調製,根據脈衝發射和接收的時間差來測算距離。
採用TOF的方式獲取3D數據主要在Kinect上實現,Kinect在2009年推出,目的是作為跟機器的交互設備,用在遊戲方面。主要獲取並處理的是人體的姿態數據。
雙目立體視覺
雙目是基於視差原理並由多幅圖像獲取物體三維幾何信息的方法。由雙攝像機從不同角度同時獲得被測物的兩幅數字圖像,並基於視差原理恢復出物體的三維幾何信息,從而得出圖像上每個點的深度信息、最終得到三維數據。
由於雙目立體視覺成像原理對硬體要求比較高,特別是相機的焦距、兩個攝像頭的平面位置,應用範圍相對3D結構光TOF少。
3D結構光、TOF、雙目的區別如下
按深度信息使用的方法可以分為兩類:3D人臉識別、2D+人臉識別。
3D人臉識別
3D人臉識別處理的是3D的數據,如點雲、體素等,這些數據是完整的,立體的,能表達出物體各個角度的特徵,不管一個人正臉還是側臉,理論上都是同一個人。但是因為點雲等3D數據具有數據量大、而且點雲數據具有無序性、稀疏性等特點,3D人臉識別開發難度比較大。
2D+人臉識別
由於3D人臉識別開發難度比較大,於是有2D+人臉識別,其處理方式比較簡單,只是將3D的人臉數據分為2D的RGB數據+深度數據。處理的方法為先採用2D的人臉識別方法處理2D的RGB數據,然後再處理深度數據。這樣的處理實現起來就相對較快,因為目前的2D人臉識別有一套比較成熟的方法,特別是CNN出現後,2D的人臉識別在各挑戰賽、數據集上識別的準確率已經達到甚至超過人類的識別精度。
2D+人臉識別的方法能比較好將2D人臉識別的方法遷移過來,但是這樣人為的將深度信息跟RGB信息分開處理不如3D人臉識別準確率高。2D+人臉識別相對2D人臉識別準確率提高不會很大,但是在活體檢測的準確率上有一定的提高。
相對於目前的2D人臉識別,3D人臉識別處理方法上有什麼不同,各有什麼優缺點?
2D和3D人臉識別的差異
人臉識別2D、3D主要的區別是圖像數據的獲取、人臉特徵的提取方式不一樣。但是2D人臉識別跟3D人臉識別步驟基本上一致,都是圖像數據獲取-->人臉檢測-->特徵提取-->信息比對,大體的步驟如下表所示:
由上表可見3D人臉數據比2D人臉數據多了一維深度的信息,不管在識別準確度上還是活體檢測準確度上3D人臉識別都比2D人臉識別有優勢。但由於3D人臉數據比2D人臉數據多了一維深度信息,在數據處理的方法上有比較大的差異。
可以看出3D人臉識別細節上比2D的人臉識別複雜。下面我們展開說明。
首先大體回顧2D人臉識別現有的經典模型及實現方式。
2D人臉識別實現
2D的人臉識別因為研究的時間較長,挑戰賽、開源數據集等比較多,因此誕生了一批准確率較高的識別人臉識別算法,如deepface、facenet、arcface等,這些算法的流程基本都可以按照前面說的四個大步驟(圖像數據採集 -->人臉檢測 -->特徵提取 -->信息比對)進行,下面對這些2D人臉識別的實現步驟進行分析。
1. 圖像數據採集
圖像採集主要是獲取目標(這裡主要是人臉)的RGB彩色圖像,2D圖像的獲取相對簡單,只需要獲取到RGB的圖像信息,不需要深度信息。獲取圖像數據的方式只需要一個普通攝像頭模組即可,簡單方便。
圖像採集完畢之後需要對圖像進行預處理,如濾波、亮度調整、去噪等,保證輸出圖片的質量達到要求,減少幹擾。預處理是比較重要的一個環節,預處理做好了能提高後面識別步驟的準確度。常用的預處理算法有均值濾波、高斯濾波等線性濾波;中值濾波、雙邊濾波等非線性濾波;腐蝕、膨脹、開運算、閉運算等形態學濾波;還有伽馬矯正、亮度調整、基於直方圖統計的圖像增強等。
2.人臉檢測
人臉檢測的目的是找到人臉的區域,並且將人臉的區域輸出給後面的特徵提取模塊,完成人臉的特徵提取。人臉檢測步驟是一個很關鍵的步驟,獲取人臉的boundingbox不僅只能包含人臉部分而且還要包含全部的人臉區域。如果boundingbox的大小或者坐標不準,就會使後面的特徵提取步驟提取的特徵不準,最後導致識別準確率下降,出現誤識別。
2D人臉檢測研究的時間比較長,所以更成熟,檢測方法有傳統的haar方法、還有神經網絡實現的方式,而且速度可以很快,如目前mtcnn能做到在I7-7700 CPU@3.6GHz的CPU上達到1562 FPS的幀率。下面對使用比較多的幾種算法進行分析:
/1/
基於haar特徵
該算法靈感來源與haar小波變換,捕抓圖像中的邊緣、變化等信息,從而檢測出人臉的位置。其檢測速度及精度都達到了不錯的水平,基本圖片中的正臉都能檢測出來,但是對側臉檢測的精度沒有mtcnn高,該算法已經在opencv中實現,使用方便。
/2/
Face R-CNN
基於Faster R-CNN框架針對人臉檢測做了專門的優化。引入了更好的center loss使得類內的差異性更小,提高了負樣本在特徵空間的差異性從而提高了算法的性能。
/3/
MTCNN
多任務的人臉檢測方法,將人臉區域的檢測跟人臉的關鍵點檢測放到一起,基於cascade框架,總體上分為PNet、RNet、ONet三部分。MTCNN的準確度很高,側臉、正臉、模糊的臉基本都能檢測的比較準,運算速度都比較快,能在手機端跑到30FPS,在PC端只有CPU I7-7700的情況下能跑到1562FPS的幀率。
除了上面這些還有Faceness-Net、SSH、HR、Pyramidbox等。
3.特徵提取
特徵提取階段是人臉識別最重要的階段,這個階段設計的網絡模型的好壞直接決定了人臉識別準確率的高低。2D的人臉數據只有RGB,2D人臉特徵提取的方法就很多了,傳統算法有SURF、SIFT等,基於神經網絡的有Inception、VGG、ResNet、Inception-ResNet等。
基於CNN神經網絡的特徵提取模型是目前的主流。CNN神經網絡特徵提取的實現分為四個步驟:神經網絡設計、損失函數設計、訓練、推理。
神經網絡設計
特徵提取的神經網絡模型基本上以在imagenet的表現為參考進行選擇,當然可以自己設計神經網絡架構,目前這些CNN網絡模型在imagenet上的識別準確率及參數量為下表所示:
數據來源keras官網
損失函數設計
神經網絡模型選擇完畢之後,接著要做的事情就是設計一個損失函數,用來作為訓練時神經網絡權重參數調整的標準。常用的損失函數有:softmax、sphereface、cosface、arcface。
softmax
sphereface
cosface
arcface
mnist的手寫體數字圖片分類的效果
當然除此之外還有triplet loss、center loss,還可以自己設計損失函數,好的損失函數基本上能決定了特徵提取模型的好壞。
— 訓練 —
準備好數據,訓練設計好的神經網絡模型,大量的數據集在這個時候就能發揮出作用了,數據集越大訓練出的神經網絡權重參數的值更好,具有更高的泛化能力,魯棒性更好。2D的人臉數據集比較多,如開源的人臉庫megafce就有超過百萬的人臉數據,而3D人臉識別目前的數據集很少,設計好神經網絡之後還需要花費很大的精力去收集數據集。
— 推理 —
推理部分完成圖像數據的輸入,經過神經網絡的計算,輸出特徵數據。這個神經網絡是怎麼計算由前面的神經網絡設計、損失函數設計、訓練決定。
神經網絡設計、損失函數設計、訓練這三個步驟是可以不用去做,可以直接使用別人訓練好的網絡模型,如google的facenet,就提供了該模型,可以拿過來直接做推理使用,但是帶來的問題就是沒有在自己的數據集上訓練過,所以在自己的數據集上的測試效果不會好。正確的做法是使用別人訓練好的模型作為預訓練參數,然後再在自己的數據上訓練。
4.信息比對
完成特徵提取步驟之後就是計算特徵的相似度,特徵就是結構化數據,不管是一維、二維還是N維,所以只需要計算出待識別圖像的特徵跟庫中特徵的相似度,然後根據相似度就可以判斷是否同一個人,實現人臉識別。特徵的相似度計算就是計算兩組數據的相似度,方法有:
餘弦相似度
這個基本上是最常用的,最初用在計算文本相似度效果很好,由於餘弦相似度表示方向上的差異,對距離不敏感,所以有時候也考慮距離上的差異會先對每個值都減去一個均值,這樣稱為調整餘弦相似度。
歐式距離
計算兩個點的空間距離,歐式距離更多考慮的是空間中兩條直線的距離,而餘弦相似度考慮的是空間夾角。所以歐氏距離能夠體現個體數值特徵的絕對差異,更多的用於需要從維度的數值大小中體現差異的分析。
當然除了這些常用的之外,還有曼哈頓距離、明可夫斯基距離、皮爾森相關係數、斯皮爾曼等級相關係數等。
2D人臉識別的實現行對成熟,有很多3D人臉識別可以借鑑的地方,那麼3D的人臉識別怎麼實現呢,下面詳細分析。
3D人臉識別實現
因為3D人臉識別基本上使用的都是點雲數據,所以這裡先介紹什麼是點雲數據,點雲數據是一種常用的三維數據表示方法,三維數據表示方法除了點雲還有體素網格、三角網格、多視角圖等,典型的幾種方法如下圖:
如上圖點雲在表達形式上是比較全面、簡潔,同時點雲是非常接近原始傳感器的數據集,可以比較完整的表示出物體的三維信息。
點雲數據是由三維空間的坐標點以及各點的顏色組成(XYZRGB),這決定了點雲的一個元素裡要存的欄位內容和大小。數據結構定義可以根據自己使用來重新定義,點雲只是一種表達方式。
3D人臉識別因為識別的對象數據不一樣,所以3D人臉識別較2D人臉識別的流程要複雜。實現步驟為:圖像數據採集 -->配準 --> 3D重建 -->人臉檢測 -->特徵提取 -->信息比對。下面分別詳細介紹每個步驟。
一、圖像數據採集
圖像採集主要是獲取目標(這裡是人臉)的RGB彩色圖像,外加深度圖像D,合起來就是RGBD圖像,攝像頭模組獲取的照片數據一般按照一幅RGB的2D圖像 + 一幅深度圖像輸出,如下圖所示:
獲取RGBD圖像的方法有3D結構光、TOF、雙目攝像頭等,下面對目前使用的比較多的3D結構光進行分析,3D結構光一般有三個模組,如下:
1、IR紅外光發射模組--用於發射經過特殊調製的不可見紅外光至拍攝物體。
2、IR紅外接收模組--接收由被拍攝物體反射回來的不可見紅外光,追蹤每一個光斑偏移。對比收發兩端的不同追蹤光點的偏移位置,從而獲取物體表面的景深信息。
3、鏡頭模組--採用普通鏡頭模組,用於2D彩色圖片拍攝。
獲取到RGBD數據之後,需要對這些數據進行噪聲濾波,去除數據中的散列點、孤立點等,常用的方法有雙邊濾波、高斯濾波、條件濾波、直通濾波、隨機採樣一致濾波等。
二、配準
步驟一的圖像數據採集已經獲取到RGB數據跟深度數據,這裡有個問題就是RGB數據跟深度數據要對準,保證每個點的RGB數據跟深度數據都能對應,而且時間上為同一時刻。故配準分為時間上的對準、空間上的對準。
— 時間配準 —
3D模組輸出的是兩組數據,RGB圖像跟深度數據,這兩組數據分別使用兩個模組採集,這裡要保證使用的兩個模組採集的圖像數據在時間上是同步的,就是每次輸出的一組數據都是要在同一時刻採集到的,要在攝像頭上進行嚴格的時間同步,攝像頭廠家一般會提供設置幀同步API。
上層的應用在調用攝像頭API採集數據時要同時取出兩組圖像數據,要根據攝像頭的輸出規則獲取到RGB數據跟深度數據。如攝像頭輸出的RGB數據跟深度數據的順序為RGB數據-->深度數據,那麼接收數據的規則就應該是RGB數據-->深度數據。一個循環就是一個完整的3D圖像數據。當然接收3D數據的方案要根據攝像頭的API接口來定,基本每個廠家都會有差異。
— 空間配準 —
因為模組的RGB攝像頭跟深度攝像頭在硬體上的安裝位置可能存在偏移,攝像頭的視角方向可能存在偏移,這時就需要對採集的圖像數據進行偏移校準,使RGB圖像上的每個點的坐標跟深度數據的每個點的坐標都一一對應,一般攝像頭廠家會提供空間配準的API。
三、3D重建
前面的步驟一、步驟二隻是完成了圖像數據的獲取,獲取到的3D圖片數據一般是多個角度拍攝的RGBD圖像數據,這時需要將這些多個角度拍攝的圖片數據進行整理、配準、合併完成一個完整的3D數據,在3D人臉識別中這個完整的 3D數據一般用來進行人臉檢測、人臉特徵提取,這個過程就是3D重建。
根據3D重建時是否使用深度信息可分為:物理3D重建、基於2D圖像的3D重建。
物理3D重建
物理3D重建主要指利用硬體設備獲取深度信息、RGB信息然後重建成3D模型,處理的數據是RGBD圖像數據,RGBD數據經過變換後會轉換成點雲數據的形式存儲。目前處理3D數據使用較多的是PCL(Point Cloud Library)庫,支持多種作業系統平臺,提供點雲獲取、濾波、分割、配準、檢索、特徵提取、識別、追蹤、 曲面重建、可視化等功能。
物理3D重建過程為:點雲數據生成 -->點雲配準。
— 點雲數據生成 —
步驟二獲取到配準的RGB圖像信息跟深度信息後,需要將RGB加深度的信息轉換成點雲的數據結構。
首先需要做的就是坐標系的轉換,這裡主要計算的有兩個坐標系:圖像坐標系、相機坐標系。圖像坐標系主要在2D圖像數據中使用,一般以像素的橫坐標 u 與縱坐標 v表示,如下圖:
因為(u,v)只代表像素的列數與行數,而像素在圖像中的位置並沒有用物理單位表示出來,所以還要建立以物理單位(如毫米)表示的圖像坐標系 x-y。將相機光軸與圖像平面的交點(一般位於圖像平面的中心處)定義為該坐標系的原點O1,而且 x 軸與 u 軸平行,y 軸與 v 軸平行,假設(u0,v0)代表O1在 u-v 坐標系下的坐標,dx 與 dy 分別表示每個像素在橫軸 x 和縱軸 y 上的物理尺寸,則圖像中的每個像素在 u-v 坐標系中的坐標和在 x-y 坐標系中的坐標之間都存在如下的關係:
其中,dx 的單位為:毫米/像素(假設物理坐標系中的單位為毫米)。
因為我們這裡使用的3D數據,坐標表示為(x,y,z),需要引入相機坐標,主要是為了表示出z坐標的位置。需要將圖像坐標系轉換到相機坐標系中,圖像坐標系跟相機坐標系的關係如下:
根據相似三角形的原理(三角形ABOc跟三角形oCOc相似,三角形PBOc跟三角形pCOc相似),可以得出物理點的位置P點的坐標為:
其中f為相機的焦距,Zc為深度信息。轉換成矩陣的表達方式為:
坐標系轉換完畢之後就能按照PCL中定義類型<PointXYZ>PointCloud、<PointXYZRGB>PointCloud將RGBD的數據轉換成點雲數據。如果處理使用的是2D+人臉識別方式,則不需要將RGBD數據轉換成點雲的數據,後面的步驟點雲配準也不需要進行,直接跳過到人臉檢測。
— 點雲配準 —
上面的點雲數據生成步驟已經能獲取到一個3D相機拍攝的點雲數據,但是這些點雲數據的坐標是相對相機坐標來獲取的,所以當同一個物體使用不同的設備或者位置掃描,就會得出不同的點雲數據,不同相機位置獲取點雲數據,數據的坐標排列千差萬別,還有就是每個3D相機獲取到的點雲數據在時間上是不同步的,這樣的數據很難直接通過End2End的模型處理。
點雲配準就是為了解決獲取點雲數據時存在的問題,將不同角度、不同時間獲取的多幀3D圖像疊加到同一個坐標系中,這個坐標系就是世界坐標系,形成一組完整的點雲數據。常用流程為首先粗配準,然後再精配準,粗配準主要是為後面的精配準準備,是很值得研究的環節,常用的算法有使用PCL庫中registration模塊實現的SAC-IA算法、4PCS、或者根據要配準的目標使用SIFT、SURF等尺度不變換特徵。而精配準的算法有NDT算法、SSA算法、GA算法,這裡主要分析著明的ICP算法(ICP算法由Besl and McKay 1992, Method for registration of 3-D shapes文章提出,該算法已經在PCL庫中實現)。ICP算法本質上是基於最小二乘法的最優配準方法。通過選擇對應兩個點雲的關係點,然後重複計算最優變換,直到滿足正確配準條件。ICP算法的流程為:
/1/
尋找對應點
因為一開始我們是不知道有哪些是對應點,一般我們在有初值的情況下,假設用初始的旋轉平移矩陣對source cloud進行變換,得到的一個變換後的點雲。然後將這個變換後的點雲與target cloud進行比較,只要兩個點雲中存在距離小於一定閾值,就認為這兩個點就是對應點。
/2/
R、T優化
有了對應點之後,後面就是求解對應點平移矩陣的問題,平移矩陣分為旋轉R與平移T兩個部分。我們可以採用最小二乘等方法求解最優的旋轉平移矩陣。
/3/
迭代
我們優化得到了一個新的R與T,導致了一些點轉換後的位置發生變化,一些最鄰近點對也相應的發生了變化。因此,我們又回到了步驟1)中的尋找最鄰近點方法。1)2)步驟不停迭代進行,直到滿足一些迭代終止條件,如R、T的變化量小於一定值,或者上述目標函數的變化小於一定值,或者鄰近點對不再變化等。
點雲數據配準效果如下圖所示:
基於2D圖像的3D重建
3D人臉識別的驗證、訓練、測試都需要大量的3D人臉圖像,但是並沒有那麼多的3D設備採集到3D人臉圖像,那麼怎麼辦?
2D圖像其實是3D圖像平面的影射,如果知道相機的方向和位置、光源的方向和位置可以反向計算得出3D的圖像。根據相機的方向位置、光源的方向位置確定與否,有Shape from Shading、Shape from Silhouettes、Shape from DE-focus、Stereo matching等基於2D圖像的3D重建算法。
上面介紹的算法都是從數學上進行分析、計算得出的,另外因為神經網絡的火熱,誕生了很多神經網絡的2D圖像3D重建的方法,由於神經網絡的優勢:精度高、實現相對簡單、不需要複雜算法推導,基於神經網絡的端到端的3D人臉重建慢慢成了主流,目前比較流行的模型有PRNet、3DDFA、face3d、2DASL、3DMM、VRNet等。
這裡主要討論業內認可度比較高的PRNet,PRNet是CVPR2018提交的作品,在3DDFA、3DMMasSTN等思想上一步步的改進得來。採用了encoder-decoder的網絡架構,實現了端到端的單張RGB人圖像進行3D人臉重構和密集人臉對齊的聯合任務。訓練集為300W-LP,3D重構的效果比較好,並且速度非常快,在GTX1080TI上達9.8ms/幀。
整體的網絡結構如下所示:
圖片出自:https://arxiv.org/pdf/1803.07835.pdf
3D重建的效果如下:
圖片出自:https://arxiv.org/pdf/1803.07835.pdf
四、人臉檢測
3D人臉檢測跟2D+人臉檢測主要以處理3D數據的方式不同進行區分。3D人臉識別處理的是3D的數據,如點雲、體素等,這些數據是完整的,立體的。而2D+人臉檢測的處理方式是將3D的人臉數據分為2D的RGB數據+深度數據。處理的方法為先採用2D的人臉識別方法處理2D的RGB數據,然後再處理深度數據。
3D人臉檢測
很多3D人臉檢測的方式還是採用RGB圖像檢測出人臉區域,然後再獲取這個區域的RGB數據、D(深度)數據,重新組合獲取到人臉的3D數據。
3D圖像數據RGBD進行人臉檢測,目前相對2D的人臉檢測不是很成熟,目前並沒有比較成熟的基於點雲數據的人臉檢測算法,基於點雲的目標檢測算法已經有研究,人臉檢測也屬於目標檢測的範疇,目前3D的目標檢測方法有:
/1/
基於3D的方法
3d fully convolutional network for vehicle detection in point cloud將整個場景的點雲轉換為體積網格,並使用3D體積CNN作為對象提議(proposal)和分類。由於3D卷積和大型3D搜索空間的數據量非常大,這些方法的計算成本通常相當高。
/2/
點雲的深度學習
在特徵學習之前,大多數現有方法將點雲轉換為圖像或體積形式。 Voxnet將點雲體素化為體積網格,並將圖像CNN推廣到3D CNN。Vote3deep設計更有效的3D CNN或利用點雲稀疏性的神經網絡體系結構。
由於3D數據的複雜性、稀疏性、不確定性,所以處理3D目標檢測的速度在NVIDIA GTX 1080i GPU上,幀速率大約為7fps。(出自 Frustum PointNets for 3D Object Detection from RGB-D Data)
2D+人臉檢測
該方法實際上是將2D人臉檢測的方法用到3D人臉檢測,將3D圖像數據分為RGB數據加深度數據,首先在分開的RGB數據上取到人臉的boundingbox,然後根據這個boundingbox獲取相應的深度信息。其實就是2D的人臉檢測,並沒有使用到深度的信息。該方法相對基於點雲數據的3D人臉檢測有更多的優點:計算量少、算法相對成熟、計算速度快。
目前很多基於3D人臉識別的人臉檢測都是使用這種方法。
五、特徵提取
3D人臉特徵提取跟2D+人臉特徵提取是兩個不一樣的過程。3D人臉特徵提取處理的是3D的數據,如點雲、體素等,這些數據是完整的,立體的,而2D+人臉特徵提取將3D的人臉數據分為2D的RGB數據+深度數據,處理的方法為先採用2D的人臉特徵提取的方法先提取RGB數據的特徵,然後再處理深度數據。
3D人臉特徵提取
跟2D人臉特徵提取步驟一樣,特徵提取就是將人臉圖像數據輸入給神經網絡,輸出對應圖像數據的人臉特徵。使用這個特徵跟庫中的特徵進行對比,計算差異就能判斷出對比的兩個人臉特徵是不是同一個人。但是3D人臉特徵提取處理的圖像數據基本上是點雲數據(當然還有別的表示方法,這裡只分析主流的基於點雲的方法),點雲數據在3D人臉應用中也會存在以下特點:
/1/
無序性
因為目標視角位置的影響,點雲數據的三維點的排列順序千差萬別,這樣的數據很難直接通過End2End的模型處理。
/2/
稀疏性
在機器人和自動駕駛的場景中,雷射雷達的採樣點覆蓋相對於場景的尺度來講,具有很強的稀疏性。在KITTI數據集中,如果把原始的雷射雷達點雲投影到對應的彩色圖像上,大概只有3%的像素才有對應的雷達點。這種極強的稀疏性讓基於點雲的高層語義感知變得尤其困難。
/3/
信息量有限
點雲的數據結構就是一些三維空間的點坐標構成的點集,本質是對三維世界幾何形狀的低解析度重採樣,因此只能提供片面的幾何信息。
面對以上困難,PointNet給出了自己的解決方案。PointNet是第一種直接處理無序點雲數據的深度神經網絡。PointNet是開創性的,首次提取將點雲數據送入到神經網絡的模型,在此之前,點雲數據的處理基本是參照2D神經網絡的方式,單獨處理點雲數據中的RGB,深度信息則另外處理,PointNet則將點雲數據的RGBD信息作為一個整體處理,並設計了新的神經網絡結構,它很好地尊重了輸入點的置換不變性,為從對象分類,目標分割到場景語義分析等應用程式提供統一的體系結構。雖然簡單,但PointNet非常高效和有效。PointNet的網絡結構如下:
圖片出自:https://arxiv.org/pdf/1612.00593.pdf
PointNet設計的目的是解決點雲數據的分類和目標的分割,所以可以使用PointNet中神經網層輸入到分類器的數據作為特徵輸出,設計一個新的損失函數即可完成基於點雲數據的人臉特徵提取模型。
當然PointNet之後,相繼出現了一批優秀的點雲數據處理模型:PointNet++、PointCNN、PointSIFT、VoxelNet、Pointwise Convolutional Neural Networks 等。
上面的基於點雲數據的處理模型都是可以用來作為提取人臉特徵的模型,模型確定了,剩下的事情就是損失函數的設計、訓練、推理。
損失函數設計
因為人臉圖像數據經過特徵提取模型轉換之後輸出的特徵在數學上都是結構化數據,不管輸入的圖片數據是2D的還是3D的,特徵數據結構是一樣的,所以損失函數的設計3D的人臉特徵提取跟2D的人臉特徵提取是基本可以通用。損失函數的設計可以參考2D人臉識別使用的損失函數,如softmax、sphereface、cosface、arcface、triplet loss等。
— 訓練 —
給設計好的神經網絡模型+損失函數灌入大量的數據,根據損失函數計算的結果調整神經網絡模型的權重參數,反覆調整,使損失函數計算的結果最小或者不再變化,則停止訓練,保存權重文件。Apple稱在推出faceID是就使用了10億張3D的圖像進行訓練,該10億張3D照片是Apple自己使用設備獲取的,是非公開的。我們要訓練自己的3D人臉識別模型的話首先就得收集大量的3D人臉圖像,3D人臉數據集太少是3D人臉識別沒有很好普及的原因之一。
— 推理 —
推理部分跟2D人臉特徵提取的基本一致,都是完成圖像數據的輸入,經過神經網絡的計算,輸出特徵數據。這個神經網絡是怎麼計算由前面的神經網絡設計、損失函數設計、訓練決定。
2D+人臉特徵提取
2D+人臉特徵提取的實現就是將3D的數據人為的分開成RGB數據、D數據,將2D人臉特徵提取的方法用在分開後的RGB數據上,先提取RGB圖像數據的特徵,然後再獲取深度信息D的特徵。而深度信息的特徵提取有如下方法:
1)使用部分深度信息作為輔助特徵
如鼻子的高度、臉型,嘴巴鼻子的高度比等,這些是比較簡單的、而且是人可以理解的信息(相對於CNN提取的不可理解的特徵而言)。
2)使用類似RGB圖像數據的處理方式
設計一個CNN神經網絡,把人臉的深度圖像當成是一張灰度的照片進行訓練,得出一個分類的模型,從而輔助人臉基於RGB部分的2D人臉識別。
上面的這兩種深度信息特徵提取方式借鑑了2D人臉識別的方法,處理速度、實現方法上有很大的優勢。
2D+人臉識別無法處理側臉的情況,側臉時不管是RGB數據還是深度數據都是會發生改變的,而點雲數據則沒有變化。
六、信息比對
信息比對是識別的過程,就是處理人臉圖像數據提取出來的特徵,處理的方法跟2D人臉識別的信息比對類似。主要計算兩組數據的相似度,計算的方式有餘弦距離、歐氏距離、曼哈頓距離、明可夫斯基距離、皮爾森相關係數、斯皮爾曼等級相關係數等。
總結
基於上述分析,2D人臉識別跟3D人臉識別的特點如下:
2D、3D人臉識別的區別實際就是圖像數據的差異。2D的人臉識別只有RGB數據,而3D人臉識別基本是點雲數據,點雲數據多了深度信息,所以基於點雲處理的模型比只有RGB數據的模型具有更高的識別準確率、更高的活體檢測準確率。但是點雲網絡的計算因為點雲數據的複雜性,需要消耗大量的運算資源,PointNet官方給出的單幀處理速度是0.17s。如果是2D+人臉識別的話,計算量跟2D人臉識別相比只是多了計算深度數據的特徵,不會增加很大的計算量。
2D人臉識別有更成熟的圖像預處理算法、人臉獲取模型、特徵提取模型,還有大量的數據支撐,工程上使用起來會更方便。使用基於2D人臉識別加深度信息輔助判斷的2D+人臉識別能解決一定的問題,在活體檢測準確率、識別準確率上都會比2D的人臉識別有提高。基於點雲的3D數據處理不僅在人臉識別,在自動駕駛、機器視覺等領域都有很大的優勢。2D、3D數據處理各有優勢與不足,在不斷的發展中相互借鑑,相互促進。