身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?

AIBigbull2050發表於2020-03-26

身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


作者 | 彭建宏(曠視科技產品總監彭建宏)

整理 | Just


“刷臉”曾一度是人們互相調侃時的用語,如今早已深深地融入我們的生活。從可以人臉解鎖的手機,到人臉識別打卡機,甚至地鐵“刷臉”進站……


人臉識別技術越來越多地應用在了各種身份驗證場景,在這種看起來發生在電光火石之間的應用背後,又有哪些不易察覺的技術在做精準判別?演算法又是透過何種方式來抵禦各種欺詐式攻擊?


我們近期邀請到曠視科技產品總監彭建宏,他負責 FaceID 線上身份驗證雲服務的產品設計。在本次公開課上,他講述了深度學習在網際網路身份驗證服務中的應用以及人臉識別活體檢測(動作、炫彩、影片、靜默)技術應用場景及實現方式。


以下為彭建宏公開課演講內容實錄:


今天我們主要說的是 FaceID,它在我們產品矩陣裡更像是一套解決方案,是身份驗證的金融級解決方案。我們在生活中有很多場景是想驗證,證明你是你。


基本所有的網際網路金融公司都會在我們借貸的時候要去驗證你是你,這就需要做一個你是你這樣一個證明,所以如何提供一套可靠的方案去驗證你是你這件事情就已經變得非常重要,大家可能很容易想到驗證的方法有很多,包括之前大量使用的指紋識別,還有一些電影裡邊經常出現的虹膜識別,還有最近特別火的人臉識別。


下面我說一下技術特點。關於人臉識別,大家很容易想到第一個特點就是體驗非常好,非常自然、便利,但它的缺點也很多,首先隱私性更差,我們要想獲得別人的指紋和虹膜的代價非常大,但是要獲得別人面部的照片這個代價就非常的小了。第二是由於光照、年齡、鬍鬚、還有眼鏡等等因素,人臉識別的穩定性會比較低。第三是指紋識別、虹膜識別都有主動性,人臉識別具有被動性,這也是之前 iPhoneX 剛出來的時候,很多人擔心不經意被人錯刷,或者去誤刷支付或者檢索等等——弱陰私性,弱穩定性還有被動性,就對人臉識別的商業化應用提出了更高的技術要求。


深度學習技術的迅猛發展,使得影像識別、分類跟檢測的準確率大幅提高,但真正要做成一套金融級解決方案還不是那麼簡單的,這張圖就展示了一個整體的 FaceID 提供的金融級整體的解決方案。


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


在這個架構圖中,我們可以看到,FaceID 的使用者提供了多種產品形態,包括移動端的 SDK,H5,微信/小程式、第三方渠道 APP 以及 PC 端。從功能上來說呢,我們的產品包括身份證的質量檢測、身份證 OCR 識別、活體檢測、攻擊檢測以及人臉比對,整個解決方案可以看出是建立在雲跟端兩個基礎上,我們在端上提供了 UI 解決方案,就提供 UI 介面可以方便整合,如果覺得我們的 UI 做得不符合大家的要求,也可以去做一些定製化開發,整個核心功能裡有活體檢測,在端上跟雲上分別有自己的實現。


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


同時針對不同的活體攻擊方案,還會採用不同的活體策略。我們在現實中的活體檢測中,線上運營會實時收集各種圖片做標註,及時把演算法進行更新,可以確保最新的攻擊可以在第一時間內進行響應和返饋,這也是為我們整個深度學習演算法不斷注入新血液。


身份證採集


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


整個流程是這樣的,使用者會先進行身份證採集,系統其實會要求使用者先去拍一張身份證的正面跟反面,這個過程是在端上進行完成的。拍攝以後,我們會在雲上進行,OCR 識別是在雲上完成的,我們不僅會去識別身份證上面的資訊,還會去識別這個身份證的一些分類。由於不同的業務場景不同,這個分類資訊會反饋給使用者,使用者來判斷是否接受。在很多嚴肅的場景下,很多客戶可能只能接受身份證原件,識別出來的文字我們也會根據使用者的業務不同做相應不同的處理,因為有些客戶就要我們識別出來的文字,使用者是不能去修改身份證號和姓名的。


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


我們在 OCR 裡面還加入了很多邏輯判斷,例如大家知道在身份證號裡面是可以看出來使用者生日還有性別資訊,如果我們發現身份證上的生日跟身份證號判斷出來的資訊不一樣,我們就會在 API 的結果裡面給使用者返回邏輯錯誤,這是使用者可以根據業務邏輯可以自行進行處理的。


這個展示就是我們身份證採集以及身份證 OCR 的一些場景。先透過手機的攝像頭去採集,在我們的雲端去完成 OCR 識別以及物體分類,可以去判斷是不是真實的身份證。有一個需要討論的問題是,為什麼我們把 OCR 放在了雲端,而不是放在手機的 SDK 端呢?這個主要是安全方面的考慮,如果資訊被駭客攻破,這在端上是相當危險的事。


活體攻擊檢測方案


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


下面我們來去討論一下最重要的活體攻擊。在我們的產品裡面提供了多種活體攻擊的檢測方案,包括隨機、動態的活體,包括影片活體、炫彩活體等等。活體檢測是我們整個 Face ID 最重要的一環,也是我們最重要的核心優勢。這個 PPT 展示的是我們的動作活體,使用者可以根據我們的 UI 提示進行點頭、搖頭這樣的隨機動作,所以我們每次隨機動作都是 Serves 端去發出的,這樣也保證我們整個動作的安全性。這裡面有些技術細節,包括人臉質量檢測,人臉關鍵點的感測跟跟蹤,臉部的 3D 姿態的檢測。這是我們整個技術的一些核心競爭力。然後我們會幫助使用者定義一套 UI 介面,如果使用者覺得我們 UI 介面不好也可以直接去修改。


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


我們提供一種叫炫彩活體的檢測方法,這個是 Face++ 獨特獨創的一種根據反射光三維成像的原理進行活體檢測,從原理上杜絕了各種用 3D 軟體合成的影片、螢幕翻拍等等的攻擊。從產品形態上來說本身又是一個影片,現在可能看不到,就是螢幕會發出一種特定圖案進行活體判斷。


現在活體有一個比較大的問題是當在強光下它的質量檢測方法,效果不太好,我們在最後會配合一個簡單的點圖動作,這樣就提高了整個攻擊的門檻,然後針對移動 H5 的場景我們主要推出了一個影片活體的檢測方法,使用者會根據 UI 提供的一個數字去讀這樣一個四位數字,同時我們會去判斷,不僅會去做雲方面的識別,還會做傳統方面的識別,以及兩者之間的語音跟聲音同步檢測。


這樣透過這三種方案去判斷就是活體檢測,除了剛才我們介紹的一些比較典型的方法之外,我們也在去嘗試一些新的包括雙角度活體跟靜默活體。雙角度活體是使用者拍一張正臉的自拍照與側面自拍照,透過這種 3D 建模重建的方式來判斷是不是真人,我們的雙角度活體,靜默活體,為使用者提供一種非常好的使用者體驗,相當於使用者拍一個兩秒鐘的影片。


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


我們會將這個影片傳到雲端,這樣我們不僅會去做單幀的活體檢測,還會去做多幀之間的這種關聯性活體檢測,這樣透過兩種動靜結合的方法去判斷受測人是不是真人。


除了活體檢測之外,我們還提供了一套叫做 FMP 的攻擊檢測,可以有效去識別翻拍,面具攻擊,這是在我們的雲端完成的。這是我們基於大量的人臉資料訓練出一套叫 FMP 的深度神經網路,並且根據線上的資料進行實時返回和調整,不斷去識別準確率,這也是我們整個活體檢測裡一個最重要的技術難點。


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


人臉比對


活體檢驗之後,我們就可以進行人臉比對的環節。我先簡單跟大家介紹一下人臉識別的一個基本原理:首先我們會從一幅圖片裡面去做人臉檢測並做出標識,相當於在一張圖片裡面找到這張人臉,並且表示出整個人臉上的一些基本關鍵點,如眼睛、眉毛等等。


下面要做的是將一些人臉關鍵點進行對齊,作用是為之後的人臉識別演算法提供資料預處理,可以提高整個演算法準確度。然後,我們會把整個人臉的那部分摳出來,這樣就可以避免周圍物體對它的影響,摳完之後的人臉會經過深度學習網路,最終生成一個叫做表示的東西,可以把表示理解為這張圖片生成的一張向量,認為是在機器認知裡面這張圖片就是透過這樣的向量來進行表示的。但這個怎麼樣去衡量這個標識能夠真實的刻畫出這張真實的人臉?


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


我們現在有個原則:如果同一個人,我們希望表示之間的距離要儘量的近,如果是不同的人,我們希望表示的距離儘量的遠,這就是我們去評價一個深度學習出來的一個表示好壞。然後基於這樣的表示,在人臉識別裡邊有兩個比較大的應用,我們分別叫做 1:1 與 1:N 的識別。


前者主要是比較兩張人臉識別是不是同一個人,它的原理是我們去計算兩張人臉表示的距離,如果這個距離小於一個域值,我們就會認為這個是同一個人,如果是大於某一域值,我們就認為它不是同一個人,在不同的誤識率下,我們會提供不同的域值。第二個 1:N 的應用,主要應用場景是安防,也就是說我們提供一張人臉照片,在資料庫裡面去查詢已知,最相似的這樣一個人臉是 1:7 的應用,FaceID 主要應用的技術場景是 1:1。


當我們透過 OCR 去識別出來使用者姓名、身份證號,並透過活體檢測之後,我們會從公安部的權威資料庫裡面去獲得一張權威照片,會跟使用者影片採集到的一張高質量照片進行比對,會返回給使用者是不是一致,當然我們不會去直接告訴使用者是不是一致,而是會透過這種近似度的方式告知。


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


大家可以看一下左側的這張表,然後這邊的返回值裡面提供了千分之一、萬分之一、十萬分之一不同的近似度,這些表示的是誤識率,在不同的誤識率下會有一個域值,假設我們認為在千分之一誤識率下,如果分數大於 60 分,我們就會認為是同一個人,所以這兩張照片,我發現他們的這個近似度是 75,我們會說在萬分之一的誤識率下是同一個人,但是在十萬分之一這種誤識率下可能他們不是同一個人。


這裡有一個細節是我們的照片資料來源可能會提供不同的整個時間造成不同的障礙,正常的話,我們會有一個不同的這種紋理圖案,但是有時我們會獲得一張空白照片,或者獲得一張黑白照片,這也需要我們去做一些後臺方面的處理。


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


所以總結一下就是 Face ID 會為大家提供一整套的這種身份驗證解決方案,整個方案涵蓋了質量檢測、身份證識別、活體檢測、攻擊檢測和人臉比對等一系列的功能,其中在活體檢測方面,我們採用了雲加端的這種聯合防範方式,透過不同的活體檢測方案,包括動作活體、影片活體、靜默活體等一系列的檢測方法,可以有效的預防假臉攻擊。


線上上我們每天都會遇到各種各樣的攻擊方式,整個人臉驗證的方案是一套長期攻防戰,我們現在透過線上運營的方式不斷去收集攻擊的異常資料,進行人工標註、訓練、分析,然後可以不斷提升整個模型的防範能力,在這方面我們已經形成了一套閉環系統,發現任何的攻擊我們都可以在很短的時間內去更新線上的一些模型,做到充分防範。



工業化AI演算法生產


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


下面我簡單介紹一下整個工業化 AI 演算法的一個產生過程,其實整個流程可以看成是資料驅動,包括資料採集、清洗、標註,包括資料增廣、資料的域訓練模型、時間管理,還有 SDK 封裝等等。


介紹一些核心關鍵點,第一個是資料採集,我們是透過一個叫做 Data++ 的 Team 去負責資料採集跟標註,我們會透過線下采集,或者是透過重包標註和網路爬蟲幾種方式去獲取整個的 AI 訓練原材料。


有了資料之後,我們一個叫 Brain++的平臺可以把它看成是整個 AI 晶片的一個煉丹爐,它會提供整個計算儲存網路等 IaaS 層的一些管理,這樣我們整個演算法工程師訓練的時候相當於在單機上面去跑,但在不同分散式的底層排程是在多臺機器上面,已經透過 Brain++ 的平臺把我們遮蔽掉了,所以如果我們可以去寫類似於的語句,需要 20 個 CPU、 4 個 GPU、8G 的記憶體去跑這樣一個訓練指令碼,底下是透過分散式方法去訓練的,但我們提供單向執行指令碼就可以了。


然後除了資料,IaaS 層的這種資源,我們研發了一套類似於 TensorFlow 的平行計算框架和引擎 Megbrain,跟 TensorFlow 相比,很多地方都做了不同最佳化。


身份採集、活體檢測、人臉比對...曠視是如何做FaceID的?


下面說一下我們的域訓練模型,我們的團隊去訓練出成千上萬這種域訓練的模型,這張圖展示的部分域訓練模型,後面這張圖的每個點都是一次實驗,如果是好的實驗,我們就會放在一個網站上供其他演算法工程師使用,我們希望透過一套時間管理的平臺去幫他們去整理整個時間思路,以及整個實驗的迴圈關係。


有了前面的這些 Face Model, IaaS 層資源,還有資料、時間管理,剩下的就要發揮各個演算法工程師的想象力了,大家每天都會去讀各種 Paper,去想各種複雜精要的這種網路設計的方案,從而創造出效能非常好的網路模型。所以工業化的 AI 生產現在已經是團體作戰了,我們會有各種的體系支援,大家去這些已有資源上面去創作,生成一套完整的 AI 體系。






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2682649/,如需轉載,請註明出處,否則將追究法律責任。

相關文章