【深度学习】人脸识别模型的动手实践!
作者:宋志龍,算法工程師,Datawhale成員
人臉識別已經成為生活中越來越常見的技術,其中最關鍵的問題就是安全,而活體檢測技術又是保證人臉識別安全性的一個重要手段,本文將向大家簡單介紹活體檢測,并動手完成一個活體檢測模型的訓練,最終實現對攝像頭或者視頻中的活體進行識別。
我們可以達成的效果
人臉識別的技術關鍵——活體檢測
一般提到人臉識別技術,即指人臉比對或人臉匹配,即將待識別的人臉和系統中已經提前錄入的人臉信息(如身份證照片)進行特征的比對,而在使用神經網絡提取特征進行比對之前,需要首先對識別到的人臉進行活體檢測,以確定攝像頭前的人是個活人。因此整個人臉識別過程一般為(并非一定要這樣):人臉檢測 -> 關鍵點檢測 -> 人臉對齊 -> 活體檢測 -> 人臉特征提取 -> 人臉比對。
模型簡介
本項目使用基于resnet18的二分類模型對RGB圖像進行活體、非活體的分類識別, 網絡結構如圖所示,有關于resnet的知識可自行查閱。
數據集簡介
本項目數據集使用中科院大型人臉活體檢測數據庫CACIA-SURF,這是一個包含大量不同年齡段人的多模態(RGB, Depth,IR)的數據集,其中包含大量真實活體人臉樣本,也包含了對應的攻擊樣本(數據集已上傳至開源數據平臺Graviti)。
如圖所示,圖例中的攻擊樣本是以打印出來的人臉作為攻擊樣本,或者露出五官中的部分結合打印人臉一起作為攻擊樣本,當然還有別的攻擊樣本制作的形式。因此模型訓練的目標就是要在遇到這些攻擊樣本的時候能夠正確識別出它不是一個活體。
其中,RGB表示RGB圖片,Depth表示深度圖,IR表示近紅外圖。三個模態的數據可以都用來訓練,以使模型適應不同圖像采集設備的需求。為了簡單,本項目僅使用RGB圖像訓練。
數據集目錄結構如圖所示:
Training中為訓練集圖片,Val為驗證集圖片,train_list.txt為訓練集各個樣本的路徑及標簽,val_private_list.txt為驗證集各個樣本的路徑及標簽,val_public_list.txt本項目暫時不用
代碼簡介
項目環境:python 3.7.4 、pytorch 1.4.0、其余的opencv、numpy啥的看缺啥裝啥吧。。。
項目代碼目錄如圖所示(代碼地址見文末):
其中,alive_detect為自定義的文件夾,里面存放了一些測試視頻,人臉檢測模型權重等等文件。
loss文件夾內存放了一些損失函數的實現 model文件夾內存放了一些模型的實現
models文件夾是模型訓練過程中權重的保存路徑 process文件夾內存放了一些關于數據處理相關的代碼
metric.py實現了一些指標的計算
utils.py實現了一些訓練或測試用到的小功能函數
train_CyclicLR.py是訓練代碼,執行這個代碼即可啟動訓練
train_Fusion_CyclicLR.py是多模態數據的訓練代碼。即同時使用上述數據集中的三種模態的數據進行訓練
face_recognize.py是使用訓練好的模型進行活體檢測測試的代碼
項目代碼中給出了訓練好的模型權重示例,models/baseline_color_32/checkpoint/global_min_acer_model.pth。
執行腳本face_recognize.py,即可調用訓練好的模型完成活體檢測。
訓練過程示例
以resnet18模型為例,使用數據集中的RGB圖片進行訓練,輸入模型尺寸大小為32。
開始訓練:
cd?alive_recognize_project#開啟訓練 #--model?baseline?,?以resnet18為例,可選其他模型,自行探索 #--image_size?32?,?輸入活體檢測模型的人臉圖像大小為32 #--cycle_num?5,訓練5個cycle周期 #--cycle_inter?50,?每個cycle周期內訓練50個epoch #--mode?train?,?開啟訓練模型 python?train_CyclicLR.py?--model?baseline?--image_mode?color?--image_size?32?--cycle_num?5?--cycle_inter?50?--mode?train?對cycle_num和cycle_inter參數的說明,本項目學習率衰減策略采用周期性余弦衰減,cycle_num表示周期數,cycle_inter表示一個周期內訓練的epoch數,即每經過cycle_inter個epoch,學習率從初始值下降到最低值,如下圖所示。
然后就開始訓練了,期間會打印出一些訓練過程中的loss、acc、acer等信息,如需要別的日志信息可自行修改。
訓練完成后的模型保存在路徑models/baseline_color_32/checkpoint下,默認保存每個周期內最低acer模型、最后一個epoch訓練結束的模型和全局最低acer模型,如下圖所示。
在驗證集上測試模型
python?train_CyclicLR.py?--mode?infer_test?--model?baseline?--image_mode?color?--image_size?32?--batch_size?8驗證集上結果,ACER=0.0358
模型效果測試
調用訓練好的模型,對視頻中的人臉進行活體檢測。(也可以檢測攝像頭前的自己,本項目以視頻文件為例)
測試腳本face_recognize.py參數:
--alive_detect_model:活體檢測模型權重
--key_point_detect_model:關鍵點檢測模型,路徑為alive_detect/shape_predictor_68_face_landmarks.dat
--detect_vidio:待檢測的視頻片段存放路徑
--detect_res:視頻片段的檢測結果存放路徑
測試代碼示例:
python?face_recognize.py? --alive_detect_model?models/baseline_color_32/checkpoint/global_min_acer_model.pth? --key_point_detect_model?alive_detect/shape_predictor_68_face_landmarks.dat? --detect_vidio?alive_detect/video_demo.mov? --detect_res?alive_detect/res_video_demo.avi注:--detect_res保存的視頻文件默認avi格式,若需要保存其他格式可以自行修改代碼。
測試結果示例
擴展
關于模型訓練,可繼續調參以期在驗證集獲得更好的效果。
關于數據集,可以使用全部三種模態的數據,使用FaceBagNet模型進行多模態人臉活體檢測模型的訓練。已經給出相關代碼,可自行查看。
數據集獲取:https://gas.graviti.cn/dataset/datawhale/CASIA-SURF
代碼地址:https://github.com/ZJUTSong/Alive_Detect
點閱讀原文獲取數據集↓
總結
以上是生活随笔為你收集整理的【深度学习】人脸识别模型的动手实践!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win7休眠后唤醒出现黑屏的解决办法
- 下一篇: 【深度学习】深度学习的三个主要步骤!