深度篇——人脸识别(二) 人脸识别代码 insight_face_pro 项目讲解
?
返回主目錄
返回 人臉識別 目錄
下一章:深度篇——人臉識別(一)?ArcFace 論文 翻譯
?
論文地址:?《ArcFace: Additive Angular Margin Loss for Deep Face Recognition》
源碼地址:?InsightFace: 2D and 3D Face Analysis Project
?
我優化的項目地址:?insight_face_pro
?
本小節,人臉識別代碼 insight_face_pro 項目講解
?
二.?人臉識別代碼 insight_face_pro 項目講解
?
insight_face_pro 項目?結構如下:
?
我這里,僅以?f_mobile_face_net.py?網絡模型來說明,如果你想嘗試其他網絡模型,請參考論文源碼,修改一下,就可以用的了。
在對項目操作前,請先看 README.md? 和? config.py?文件,這里,一個是說明文件,一個是配置文件。
README.md?文件 (論文,模型,數據,項目都可以從里面找到下載地址)
# [insight_face_pro](https://github.com/wandaoyi/insight_face_pro) tensorflow, mxnet 版本的 insight_face 人臉識別項目 2020-07-23 -- [論文地址](https://arxiv.org/abs/1801.07698) - [論文對應源碼地址](https://github.com/deepinsight/insightface) - [我的 CSDN 博客](https://blog.csdn.net/qq_38299170) - 環境依賴(其實版本要求并不嚴格,你的版本要是能跑起來,那也是OK的): ```bashrc pip install easydict pip install numpy==1.16 conda install tensorflow-gpu==1.12.0 pip install mxnet-cu90 pip install opencv-python ``` - - [訓練和驗證數據下載地址](https://github.com/deepinsight/insightface/wiki/Dataset-Zoo) - [預訓練模型下載地址](https://github.com/deepinsight/insightface/wiki/Model-Zoo) - All face images are aligned by [MTCNN](https://kpzhang93.github.io/MTCNN_face_detection_alignment/index.html) and cropped to 112x112 - Face Detection, Please check RetinaFace(我的代碼中沒加入有, 但在作者源碼中有) for more details - - - 將數據放到指定的文件目錄下(config.py 文件): - 其實,做好依賴,拿到數據,就仔細看看 config.py 文件,里面全是配置。配好路徑或一些超參,基本上,后面就是一鍵運行就 OK 了。 - 對 config.py 進行配置設置。## 數據生成 - 對于模型的訓練或驗證,我們都需要數據,這些數據,可以去下載開源的,也可以自己制作。 - 這里對于制作人臉數據,我使用的是數據蒸餾的方法。 - data_distillation.py 圖原圖進行人臉檢測,人臉分類,人臉聚類等操作 - prepare.py 對分類或聚類后的人臉數據生成 .bin, .rec, .idx 等數據 - video_2_image.py 是將 視頻流 轉為 圖像流## 訓練模型 - face_train.py 人臉識別訓練## 模型驗證 - verification_model.py 人臉識別模型驗證 - - 對于模型測試,想弄的話,也很簡單,利用數據庫保存錄入人的信息 - 測試的初始化,就將初始化 128 維人臉特征保存到緩存 - 當新的圖像進入,先人臉檢測,人臉矯正,再提取 128 維人臉特征 - 之后,再將新圖像的 128 維特征 與 緩存的 128 維特征進行相似度計算 - 最后,選擇大于閾值的人臉結果,再根據緩存獲取到該用戶的信息## 本項目的優點 - 就是方便,很多東西,我已經做成傻瓜式一鍵操作的方式。里面的路徑,如果不喜歡用相對路徑的,可以在 config.py 里面選擇 絕對路徑 - 本人和嘮叨,里面的代碼,基本都做了注解,就怕有人不理解,不懂,我只是希望能給予不同的你,一點點幫助。?
?
1.?模型驗證(verification_model.py)
根據從 README.md?中下載的?數據?和?預訓練模型,將其放置到?verification_model.py?文件中所指定的路徑下,或,修改?config.py?中的路徑,然后,一鍵運行?verification_model.py?文件,即可驗證模型的精度。
我們可以觀察到,預訓練模型的?mAp 精度在 99.4% ~ 99.5%?左右。精度是相當高的,但是,對于人臉識別來說,這樣的精度是不夠的,需要更高的精度,才能滿足業務需求(現在商湯人臉識別精度達到 99.8%左右)。這就需要對預訓練模型,進行進一步訓練,從而提升精度來契合業務需求。
?
2.?模型訓練(face_train.py)
打開? face_train.py?文件,觀察?def __init__(self):?方法中的?config.py?配置文件,配置好,還有將?__C.COMMON.STRUCTURE_DICT?中的參數配置好,就可以一鍵運行 face_train.py?文件,開始訓練模型。
f_mobile_face_net.py?使用的是一個全卷積的殘差網絡,最后再加上一個 128?維的全連接層,然后,引入?margin_softmax?損失函數。訓練的過程,請參考論文中的 Figure. 2?圖所示:
在訓練的過程中,發現有時候精度很難再提高,這時就需要對訓練進行調優操作了:如學習率,數據,迭代次數,交叉驗證,優化器等等。可以參考我前面的博客:?深度篇——神經網絡(一) 神經元與感知機?里面有?講到調優的方法。
對于訓練和驗證,可以參考 README.md?文件,里面有更多的?數據集?和?預訓練模型。可以讓你玩得開心。
?
3.?數據制作
這里的數據制作,包括兩步:一步是數據蒸餾(data_distillation.py),一步是將目標數據制作成 .bin、.rec、.idx?驗證和訓練數據(prepare.py)。文件,都是一鍵運行操作的。
這里的數據蒸餾,是相對于圖像來進行的,如果我們一下子搞不到大量的圖像數據,我們可以通過將視頻流轉為圖像流,從而得到大量的圖像(video_2_image.py)。
數據蒸餾,大致可以分為 3?步(data_distillation.py):
? ?(1).?對輸入?圖像?進行人臉檢測?和人臉矯正
? ? 工作原理為:?MTCNN_face_detection_alignment
? ?
?
? ?(2).?對矯正后的人臉圖像,進行分類,根據?identity?來對人臉進行分類。
? ? ? 在人臉分類中,info?文件夾中會生成三個?txt?文件(這 3?個文件只是用來做人工細化,對代碼運行并無影響):?
? ? ?create_lib.txt?表示創建?新的?identity?文件夾,即表示當前的人臉與已有的人臉?identity?不同。
? ? ?in_storage.txt?表示?與當前已有的人臉?identity?相同,然后會根據人臉相似度入庫到對應的文件夾中去。
? ? ?not_recognize.txt?表示沒辨認出來的人臉,圖像會輸出到 output?文件夾中
? ? ?在人臉分類后,我們可以人工參照?txt?和?identity?人臉文件夾中的人臉來進行辨別,是否有分錯的,有些明顯分錯的人臉,我們要重新對它們入庫,或移除。
?
? ?(3).?對分類后的人臉圖像進行聚類,以消除部分噪聲人臉
? ? ? 人臉聚類,可以在一定程度上對?identity?身份文件夾中分錯的人臉,或同樣的人臉,進行一步提煉,會根據?人臉相似度來移除那些分錯的人臉,和相同的人臉。從而在一定程度上減少手動觀察篩選的操作,提高了工作效率。如果有相同的圖像或分錯的圖像,也會在?info?文件夾中生成?txt?文件。
?
在人臉數據蒸餾的過程中,常常會于是一種臉盲的尷尬地步。就是,有時候,你會發現,有很多人臉,你感覺,它們都長得一樣的,但是,計算機卻有判斷它們不一樣。或,你明明感覺,它們不太像,但是,計算機又判斷它們是同一個?identity。從而有些懷疑人生的感覺
?
?
生成訓練、測試數據:
將上面數據蒸餾得到的好數據,用于生成?訓練、測試數據(prepare.py):?通過上面數據蒸餾的繁瑣操作,到了這里,就簡單了,將數據放到指定的文件夾,一鍵運行操作即可得到目標數據。生成的訓練數據中,property?文件表示如下:
class_num?即為?identity?number?的意思,表示有多少個人臉身份。
info?文件夾中會有這 3?個?txt?文件生成:
?
?
pair.tx?表示?生成 .bin?文件中,兩兩配對的圖像,是否是同一個身份。如果是 True?則為同一個身份,False?則為不同身份
train_data.txt?表示?訓練數據
val_data.txt?表示驗證數據,pair.txt?就是由?這里的數據生成的。
這些?info?中的文件,只是用于參考 ,并不影響項目的運行。
?
? ??
?
返回主目錄
返回 人臉識別 目錄
下一章:深度篇——人臉識別(一)?ArcFace 論文 翻譯
總結
以上是生活随笔為你收集整理的深度篇——人脸识别(二) 人脸识别代码 insight_face_pro 项目讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CCPC-Wannafly Comet
- 下一篇: 单目RGB人脸识别