Always-on
臉部辨識/反詐騙/低電力喚醒三合一 人臉驗證準確率大增
長久以來,人臉驗證一直被認為是電腦視覺領域中最大的挑戰之一,但現已設計出一套準確度高達98.36%的人臉驗證系統,而且是此一概念的即時驗證。本系統選擇的管線設計結合典型與現代的機器學習(深度學習)技巧,支援包括多用戶驗證以及反詐騙階段等關鍵功能,以解決利用照片或影片進行詐騙的關鍵安全議題。本文的目標是針對使用機器學習所產生的問題,以及終端用戶使用平台遭遇的問題,進一步瞭解打造更完整解決方案的程序。也因此,此一使用案例主要在探討如何在多IP上部署機器學習,以提升使用者體驗。為了達成概念驗證,本文使用Arm NN軟體以及已生產的硬體IP,展示一套Always-on的人臉解鎖(人臉驗證)系統。
人臉驗證演算法設計總覽
資訊流的來源,來自耗電量非常低的低解析度照相機檢測到的場景顯著變化,並對隨後階段進行閘控,以保持低電力使用量。當場景變化達到預先定義的水準時,高解析度的RGBD相機會啟動,並且開始針對每一幀(Frame)進行掃瞄,以找出人臉(圖1)。
圖1 當場景變化達到預先定義的水準,為找出人臉,高解析度RGBD相機會開始針對每一幀(Frame)進行掃瞄。
依據RGB資訊,倘若檢測出人臉,相對應的景深影像會傳送至負責辨識真實人臉的詐騙偵測器。在初期便放置反詐騙偵測器的作法,在出現的人臉若是列印的臉或是螢幕影像,得以馬上中止管線執行,並進一步降低電力消耗。
倘若人臉經過驗證後確認是真的,經裁切的RGB人臉會送至特徵點偵測器。追蹤可信之人臉部分,以及更精確的眼睛座標,可以協助我們對準人臉,並讓特徵提取器更易派上用場。在這個階段,我們使用卷積神經網路(Convolutional Neural Network, CNN),替每位用戶將每張臉轉換成一套特徵集。
最後,驗證階段使用一個分類器,它負責透過比對輸入特徵與用戶儲存的特徵來驗證用戶的身份,以決定是否讓用戶進行系統存取。
此一解決方案使用Python做為開發語言達成,每一個資料段都可依據任務的不同,部署於最合適的Arm IP,讓管線更加節能,同時也能保持低推論延遲。
系統的啟動,靠在Arm Cortex-M處理器上處理的低解析度影像達成,可以提供最大的效能與最小的記憶體使用量。為了觸發高解析度相機,人臉偵測與反詐騙階段在Arm Cortex-A CPU上運作,並使用Compute Library運算函式庫支援的低階且高度優化的軟體功能。同樣地,特徵提取神經網路透過Arm NN可以進行高效剖析,然後匯入NEON或GPU,這讓我們針對所有的關鍵階段,都能達成高效的平行執行(圖2)。
圖2 人臉辨識執行步驟
Always-on階段使用一顆Arm Cortex-M處理器執行,處理來自低解析度感測器的輸入訊號,並在偵測到場景變化時,把系統喚醒;此一場景變化的偵測,會對在Cortex-A73上運行的RGBD相機資料處理,進行閘控。
更高品質的人臉偵測可移除偽陽性,且詐騙偵測使用深度資訊,確保人臉不會只是一張照片。人臉經偵測後,資料將饋入身份辨識階段,其為設計用來針對每個身份擷取獨特特徵的先進神經網路。驗證階段確認人臉是裝置中已登錄的人臉之一,並確認用戶的身份;而使用Arm NN,自然地把各階段移至正確的IP。我們不妨仔細檢視每個階段的功能,以及它們對整個解決方案有何貢獻。
喚醒階段
大多數現有的喚醒方式,都需要與裝置進行實體互動。為了讓行動使用更加無縫順暢,此一方式可以用其它感測器的低電力分析加以取代,以偵測用戶是否有意開始使用裝置。
運動感測器是選項之一,但是當裝置放在口袋裡或袋子中,可能會因為錯誤的喚醒而產生電力消耗的風險。因此,本文選擇使用低解析度相機來偵測顯著的場景變化,原因是手機上鎖後的前置相機,在使用前的一刻,通常只會看到一片黑暗,或是靜止不動的天花板。
使用低解析度感測器來進行影像擷取,並用Cortex-M處理器進行影像分析,可以讓喚醒階段偵測出有趣的特徵,同時在Always-on耗電水平內進行運作。這些特徵可以靠執行背景減法,並依背景擷取強度值的直方圖差異,輕易地進行辨識。此一階段設計用意為低延遲,並藉由使用低成本的Cortex-M處理器,來觸發解析度較高的光學感測器,並開啟人臉檢測階段。
人臉檢測
針對此一階段,我們選擇執行經過訓練的支援向量機(Support Vector Machine, SVM)分類器,並用梯度直方圖(Histogram of Gradients, HOG)當成特徵提取器。與另一種Viola&Jones方法相比,這種方式經證實可產生較少的偽陽性偵測,同時仍可在Cortex-A上進行即時運作。
每張梯度直方圖都是從使用16×16像素的資料段所擷取的8×8像素儲存格,且資料段的間隔為8個像素。每個儲存格的直方圖大小,可以支稱9個bin(0~180度),而且最後的特徵向量在每個視窗大小內,將可支撐數個序連特徵。
最後,每個視窗的特徵資訊會傳送至SVM分類器,而它也將檢測人臉是否出現在此一視窗內。分類器經過LFW影像訓練過,而且藉由提供可以接受數量的真實反例,如此一來便可證實已經能顯著減少偽陽性偵測(圖3)。
圖3 執行經過訓練的SVM分類器可顯著減少偽陽性偵測
此一方式在使用NEON的Compute Library已經主要執行,而這也是降低這個階段整體延遲的一個好選項。正常來說,特徵擷取會進行多次運行,每一次都會讀取視窗內相對應的強度值,ACL則以更有效率的方式處理,透過預先定義HOG參數,每個儲存格都會計算一次特徵向量,並儲存在裝置上。
隨後,大小不同的數個視窗,每個都可以用來讀取相對應的記憶資料段,而且藉由平行運行多個SVM分類器,可以更快速地預測人臉座標,要辦到這點,需要訓練數個SVM分類器,且每個分類器都對應特定的特徵長度。
當然,要訓練分類器,必須相對應地調整訓練資料的大小,原因是每個SVM(總共有六個)是針對特定的特徵向量長度接受訓練,且視視窗的大小而定。不過,由於不必再重覆從像素值擷取特徵,使用上述的方法可降低運行時間的延遲。此外,依據輸入影像的解析度選擇所要的視窗大小,可以免除整合金字塔表示法的需要。最後一步我們則透過非極大值的抑制,來排除多重檢測。
拿ACL人臉偵測的延遲,與針對256×256影像以Dlib在4個Arm Cortex-A73、時脈調為2.36Ghz的處理器運作兩相比較,結果只花了一半的時間,就可以達成類似的結果(ACL:15毫秒對比Dlib:30毫秒)。最後,在ACL人臉監測執行的前端,建立了Python綁定(Binding),讓它可以輕鬆與管線進行整合。
反詐騙步驟極為關鍵
在把人臉影像匯入生物特徵提取器之前,反詐騙是極為重要的安全步驟。在這個階段,我們把應付兩個關鍵安全議題的詐騙偵測資料段整合進去;利用照片或影片詐騙用戶身份。
四個最受歡迎的詐騙檢測演算法類別,分別是運動分析、紋理分析、影像品質分析,以及如紅外線感測器等主動方式。不過,由於此次使用的是RGBD輸入感測器,於是採取使用深度資訊的方式來辨識真臉與假臉。帶出反詐騙模型最大的挑戰,在於缺乏公共資料庫,因此我們搜集了自有的真臉與假臉反詐騙資料庫,並對系統進行訓練。
真實的人臉利用各種變數進行擷取,如不同的採光環境與姿勢,以及戴上或不戴眼鏡的情況;假臉則從各種不同的顯示監視器與照片進行擷取,以模擬2D的人臉詐騙攻擊。
為了辨識出詐騙攻擊,透過RGB偵測出的人臉座標會從人臉偵測資料段,饋入反詐騙資料段。依據這些座標,我們裁切從深度空間(2D距離的矩陣)偵測到的人臉,並跟之前一樣,利用同樣的HOG參數提取特徵。
最後,已經在我們客製化資料集中接受訓練的SVM分類器,會利用區別真實與虛假的人臉,防止非法的系統存取。倘若人臉被判定為假臉,我們會拒絕該用戶,並避免管線剩下的運行;如果判定是真臉,人臉會饋入2D仿射轉型資料段。針對反詐騙階段,再次執行HOG與SVM ACL,因為此一解決方案提供加速運行與結果(圖4)。
圖4 反詐騙是執行人臉辨識十分重要的步驟。
對準人臉
倘若用來訓練與測試的臉部影像修補,可以對準成常見的角度,人臉辨識與驗證系統的效果會更好。此一對準動作,可以讓生物特徵系統專注在人臉的外表,而不用特別應付不同的姿勢。
雖然我們預期用戶在人臉驗證過程中會直視相機,但藉由人臉對準的變換,我們提升了生物特徵提取器的堅固性,並排除了資料集內的姿勢變異。在對準人臉的作業中,深度學習技術顯現出大有可為的結果。不過,我們最後選擇了一個有效且運算成本較低的解決方案,以將管線的延遲降至最低;先用特徵點偵測器來提取特徵點,隨後依據這些點,用2D仿射變換(Affine Transformation)對準輸入的人臉。
在無限制的環境下,要把人臉特徵點局部化是件極具挑戰的任務,原因是它會出現許多令人混淆的因素,如姿勢、堵塞、表情與照明;特別是這些因素會對人臉的外表以及人臉局部特徵狀態,產生顯著的影響。
在我們的情況中,針對五個特徵點進行追蹤,並依集成迴歸樹(Ensemble of...