- Advertisement -
首頁 技術頻道 臉部辨識/反詐騙/低電力喚醒三合一 人臉驗證準確率大增

臉部辨識/反詐騙/低電力喚醒三合一 人臉驗證準確率大增

- Advertisement -

長久以來,人臉驗證一直被認為是電腦視覺領域中最大的挑戰之一,但現已設計出一套準確度高達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 Regression Trees)使用區辨性方法。這是一種非常快速且準確的方法,可以直接從像素強度(特徵點)估算人臉的特徵位置。更明確地說,此一方法試圖使用梯度樹增強演算法,來學習集成迴歸樹並優化損耗函數(平方誤差總和)。

使用這種方法,讓我們得以估算預先定義人臉部位所需的特徵點(右眼兩點、左眼兩點、鼻尖一點)。光是依據眼睛座標,我們就能輕易算出兩眼間的質心與角度,並將資訊傳至仿射變換。

然後,再計算旋轉矩陣與尺度參數,把影像對準,並將對準後的人臉輸入生物特徵提取器。我們運作時所載入訓練過的模型特別小(小於10mb),且演算法本身也不會消耗太多運算週期來進行收斂。針對此一過程,則是使用Arm Cortex-A73 CPU;對準的影像只要幾毫秒就完成提取,且準確度非常高(圖5)。

圖5 Cortex-A73 CPU提高辨識效率與準確度。

生物特徵提取器

現今基於神經網路的技術針對人臉辨識/驗證任務,可以產出最尖端的結果。這些技術中,並未特別選擇特徵提取器;相反地,它們是在特定的問題領域中接受訓練與優化。在此,生物特徵提取器是經過良好訓練、基於ResNext-50架構的深度卷積神經網路(Deep Convolutional Neural Network, DCNN)。

人臉驗證系統選用的訓練方案,對於最終網路形式,扮演相當重要的角色。在案例中,生物特徵提取器使用交叉熵損失函數(Crossentropy Loss),以及取自55,000個物件的2,000萬張影像(包括資料擴增)進行訓練。

在多類別人臉辨識任務中對網路進行訓練以學習人臉呈現,是訓練特徵提取器(編碼器)的一種基本技巧,但也是非常受歡迎的方式,原因是同樣的架構會對其它任務(例如驗證)提供良好的概括能力。

經學習的特徵,可以良好地概括至測試裡的新身份,這在訓練中是看不到的,但可很快與任一分類器進行整合。通常來說,在使用DCNN進行辨識時,網路終端會導入一個SoftMax層以預測分類機率,它可以讓編碼針對每個類別呈現獨特、高階的人臉辨識特徵。

要將DCNN作為特徵提取器使用,並不需要SoftMax層。把其移除後,網路可從最後一個完整聯結層,提取學習到的特徵。儘管這些特徵具有固定的大小,且特徵長度會依類別的數目而有不同,另一個選擇是使用前一個、維度可能較低但完整的聯結層。在案例中同時移除最後一個完整聯結層,並提取出一個2,048長度的特徵向量。

生物特徵提取器發展路徑使用TensorFlow進行訓練與評估,然後移至使用Arm NN的Arm平台,來剖析已完成訓練的TensorFlow模型。在這之下,所有描述此一架構(ResNext-50)的基元核心,則在一個Cortex-A等級CPU與Mali GPU上,使用Compute Library進行運行。為了便利起見,我們為Arm NN開發了Python程式語言綁定,讓開發工作更為簡便。

用戶驗證

為了把它轉成驗證系統,必須導入一個訓練方案,以賦予它分辨相同或不同用戶實例的能力;換句話說,這套系統必須能夠驗證候選用戶是否真正持有他/她宣稱的身份。

為了做到這一點,必須針對全球類似性定限進行訓練:在此定限以下的相似性可被接受,但在其上則會被拒絕。想要達成這點,常用的方式是使用一個Siamese訓練架構方案,此方案使用擁有同樣權重參數與同樣成本模組(損耗函數)的相同DCNN版本。模型中選擇以簡單的歐氏度量(Euclidian Metric)呈現類似性度量,而分類器(驗證器)則由邏輯迴歸自變數單元來呈現。

我們隨後使用官方LFW十倍交互驗證分割影像來訓練分類器,此驗證握有2,200個身份對。針對每一對,我們提取一套L2正常化的特徵向量,並計算彼此間的歐氏距離。之後,我們將計算出的距離以及地面真實資訊,一起饋入邏輯迴歸自變數單元。如此一來,二項式分類器在一維特徵空間中學習到匹配/非匹配影像的最佳化邊界(圖6)。

圖6 二項式分類器最佳化邊界示意圖

準確率高達98.36%

對分類器進行訓練後,我們依據LFW基準註解的清單,使用6,000個影像對評估模型,最後獲得98.36%的準確率,F1分數也有98.34%(包括LFW標示錯誤的影像),讓我們接近服務導向架構的結果。

不過,這個DCNN擁有32位元浮點權重,讓整個模型顯得相對巨大(92Mb)。為了讓它變小、更適合在嵌入式裝置上部署,便使用TensorFlow轉換圖表工具為模型進行量化(權重與運算)。

使用線性量化提取出的模型大小約為原來的四分之一(25.3Mb),而精準度與F1分數則分別下降0.27%與0.28%(98.09%與98.06%)。儘管如此,基於unit8的模型仍然使用動態重標度,這意謂每次MAC運算後,提取張量的最小-最大值必須加以計算才能使用,而int32輸出張量則重新量化回unit8。為了加速流程,訓練集中的每個實例,都把最小-最大值加總起來,並在每一層中凍結這些參數。

總而言之,我們評估了好幾個準確度的百分比範圍,最後的解決方案為凍結5%的終端值,進而產出一個降低延遲的模型,同時也讓輸出品質保持在高水準(準確度為98.34%,F1分數為98.41%)。同時也能看出,凍結這些參數之後我們不但得以加快推論,同時也移除啟動的離群值,並產出更為強健的模型。

樣本支援強化辨識能力

針對Always-on行動人臉解鎖使用案例,我們同時也開發出基於Python程式語言的樣本,同時選擇擴展系統功能性以支援多用戶驗證,而在訓練系統時每位用戶所需的實例也更少(通常是20)。

為了達成裝置上訓練,我們首先使用生物特徵提取器提取出新用戶的特徵,並將它儲存在裝置上。接著,針對每個特徵集,我們計算出象徵每位用戶的代表特徵之平均特徵向量。在推論時,候選用戶的特徵向量會被提取出來,並與已儲存的每位用戶的平均特徵向量兩相比對,此時,我們使用最近鄰演算法。這不但讓我們在驗證用戶時減少所需的比對數量,同時也讓系統面對訓練過程中可能擷取的離群值時,更為強健穩固。

在完成用戶辨識後,我們比對儲存的特徵向量與候選用戶的特徵向量,完成身份驗證。最後,倘若最少有一次的比較結果發現距離比預先訓練的定限還小,二進位分類器將會啟動,並准許系統存取。否則的話,該用戶將被拒絕。

在圖7的視覺化圖示中,顯示出樣本結果,同時針對模型進行推論。針對每張人臉,我們首先檢測出詐騙攻擊(有效/無效用戶),辨識出真實臉孔的身份(名字身份),並藉由距離(印在名字旁邊)的計算進行驗證。

圖7 針對詐騙攻擊的實際測試結果

總結來說,利用開放原始碼以及Arm軟體,順利訓練、評估並有效部署Always-on的人臉驗證系統,這套解決方案可以輕易用在嵌入式裝置上的即時用途,因為我們在管線實施便利行動用途的各個階段。

同時也探索並運用生物特徵提取器的優化,產出可以用Arm NN與Compute Library高效剖析與執行的高準確度八位元模型。此外也使用Arm工具,得以將機器學習資料段部署至最適合的IP,而這也具備了打造更節能解決方案的能力。

(本文由Arm提供)

相關文章

- Advertisement -
- Advertisement -

最新文章

- Advertisement -

熱門文章

- Advertisement -

編輯推薦

- Advertisement -