使用Intel Analytics Zoo增強騰訊TUSI身份識別的實踐

AnalyticsZoo發表於2019-05-28

背景

在現今的城市裡,大多數現代化小區都已配備了門禁系統作為保護居民安全的一道重要屏障。傳統的門禁系統一般採用門禁卡,但未授權人員仍然可以透過盜用複製門卡或尾隨等方式進入小區。隨著人工智慧人臉識別技術的發展,已經有一些小區開始用智慧人臉識別系統來代替門禁卡進行身份識別。當有人透過小區門禁,系統會透過攝像頭拍攝的人臉提取面部特徵並和已知業主進行匹配,從而確認此人是否為該小區的業主。人臉識別系統也可以與公安部門對接,識別已知的犯罪分子,進一步增加小區的安全性。但是這些人臉識別系統在實際使用中仍然會存在準確性的問題,因為拍攝照片的質量經常會受到光線、角度和人物運動的影響。

因此,我們希望可以透過多維度的資訊來輔助人臉識別系統進行身份識別,來提高身份識別的準確率,使門禁系統更加有效,將來類似的系統也可用於其他安防場景。我們目前正在和一些小區合作進行實驗。在這篇部落格中,我們主要給大家分享一下利用WIFI資訊輔助人臉進行身份識別的方法和初步結果。

為什麼採用Apache Spark/HadoopAnalytics Zoo

我們選擇使用Apache Spark/Hadoop框架搭建這個應用,以滿足此場景所需的多樣化資料的增減,清洗,管理,分析和可擴充套件性,且搭建好的應用可以部署執行在雲端,降低伺服器維護的成本。我們選擇Analytics Zoo1作為我們構建深度學習應用的平臺,因為它是目前在Hadoop/Spark框架上最方便的用於開發深度學習應用的平臺之一。用Analytics Zoo讀取和處理存放在Hadoop/Spark叢集上的資料非常方便,而且Analytics Zoo在標準的Hadoop/Spark叢集上做訓練和預測並不需要對叢集有特殊的改動或配置。此外,Analytics Zoo還有很多預定義的模型可以開箱即用,也提供了不少示例供參考,這能讓我們很容易地建立適合我們場景的深度學習模型,並且用現有小區的資料做初步實驗得出結果。

注1:Analytics Zoo (https://github.com/intel-analytics/analytics-zoo) 是Intel開發的一個開源大資料分析和AI平臺。它能將Spark, TensorFlow, Keras和BigDL程式無縫地整合進端到端的資料分析流水線中,直接執行在大規模、分散式的大資料叢集上。

方法,資料採集和特徵工程

WIFI資訊可以作為輔助人臉識別的手段之一。只要在小區門禁處裝上WIFI裝置,系統在收集人臉資訊的同時會收集到位置在小區大門附近的手機的MAC地址資訊,在收集資料後,使用SGX安全技術對手機的MAC等關鍵隱私資料進行加密處理,生成密文的MAC地址(後續的MAC地址均是指密文的MAC地址)1,而所有這些收集的資料都帶有時間戳。如果可以訓練機器學習模型將MAC地址和身份資訊進行匹配,那麼之後有人進出小區時,即使拍到的人像比較模糊識別置信度不高,附近的MAC地址也可以用來輔助提供身份資訊。經過分析和過往經驗,我們認為MAC地址記錄和人臉識別身份記錄的時間差,WIFI訊號強弱以及在歷史上短時間內成對出現的次數等可能是有用的特徵。接下來我們就利用這些特徵來建立MAC地址和身份資訊的匹配模型。

模型的選擇、訓練、評估和最佳化

MAC地址和身份ID的匹配問題,本質上跟文字匹配和推薦排序等問題是類似的,即將MAC地址的特徵和身份ID的特徵都輸入模型,輸出一個相似度分數,再按相似度由高到底排序,用排序好的相似度資訊來輔助進行身份識別。

具體來說,我們的模型輸入特徵包括人臉身份ID和MAC的ID,檢測到的時間差,WIFI訊號強弱,共同出現的頻率等等,模型輸出為相似度得分(0-1之間)。

我們參考了Analytics Zoo中提供的兩種推薦模型的示例——Neural Collaborative Filtering (https://analytics-zoo.github.io/master/#ProgrammingGuide/recommendation/#neural-network-based-collaborative-filtering) 和Wide And Deep (https://analytics-zoo.github.io/master/#ProgrammingGuide/recommendation/#wide-and-deep) ,基於我們的輸入特徵稍作修改,就得到了適合我們資料輸入的模型,並採用了的是二分交叉熵 (Binary Cross Entropy)損失函式

作為初步的實驗,我們邀請了一小部分小區居民事先採集他們的手機MAC地址,並且拿到了一個月裡小區收集到的資料。我們將每天檢測到這些居民的記錄作為正樣本,隨機生成適當數量的負樣本,用前25天的資料用於訓練,後5天的資料用於驗證。

在定義好模型並且把資料集經過特徵工程處理成Spark RDD之後,就能用Analytics Zoo提供的Keras-Style API進行分散式訓練和預測了。 訓練和預測的程式碼非常簡單,如下:

  1. model.compile(optimizer, loss='binary_crossentropy', metrics=['accuracy'])  
  2. model.fit(train_rdd, batch_size, nb_epoch, validation_date=val_rdd)  
  3. model.predict(test_rdd)

在compile模型的時候,可以指定讓模型在訓練集上進行多少次迭代訓練(epochs),每次訓練使用的批大小(batch_size),採用的最佳化方法以及它的學習率(learning rate) 等引數。在訓練的過程中,可以在驗證集上輸出準確率的效能指標,這樣能瞭解到模型在訓練的過程中是否已經過擬合。同時Analytics Zoo也支援在訓練過程中階段性儲存快照可用於繼續訓練,也可以用Tensorboard視覺化learning curve等等。

在我們的實驗資料上,目前模型的表現得到了令人滿意的結果,我們現在也在和小區共同探索模型的落地。模型投入使用後,因為小區每天都在收集新的資料,我們會定期使用全量或增量資料線下重新訓練和迭代模型。

結語

相信大家看了以上的介紹,已經對如何使用Analytics Zoo 在大資料平臺上構建深度學習應用增強身份識別有了大致的瞭解。在AI快速發展的今天,我們相信把深度學習的技術利用在大資料上能讓身份識別更加可靠,給居民的生活帶來更多的便利。

如果需要更多關於Analytics Zoo的資訊,請訪問Github上的專案地址(https://github.com/intel-analytics/analytics-zoo) 或者主頁 (https://analytics-zoo.github.io/)。

注1:手機的MAC地址進行加密處理的安全性在於,
1、確保手機的MAC隱私資料安全
2、確保隱私資料不被洩露
3、確保隱私資料僅限於本系統內使用,無法與其他系統交換

相關文章