GitHub項(xiàng)目地址:https://github.com/HarmoniaLeo/Face-Recognizer。若該項(xiàng)目幫助到了你,請(qǐng)點(diǎn)個(gè)star,謝謝!
模型介紹
MTCNN
多任務(wù)卷積神經(jīng)網(wǎng)絡(luò)(Multi-task convolutional neural network,MTCNN)是在Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks[1]中提出的網(wǎng)絡(luò)。MTCNN采用級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)結(jié)構(gòu),通過(guò)多任務(wù)學(xué)習(xí),能夠同時(shí)完成人臉檢測(cè)和人臉對(duì)齊兩個(gè)任務(wù),輸出人臉的中心點(diǎn)坐標(biāo)、尺度及特征點(diǎn)位置。MTCNN采用圖像金字塔+3階段級(jí)聯(lián)CNN(P-Net、R-Net、O-Net) 方式進(jìn)行人臉檢測(cè),其檢測(cè)框架如圖所示:

圖像金字塔將圖像尺度進(jìn)行變換,在不同尺度上進(jìn)行人臉的檢測(cè)。級(jí)聯(lián)CNN完成對(duì)人臉由粗到細(xì)(coarse-to-fine) 的檢測(cè),前者的輸出是后者的輸入,快速將不是人臉的區(qū)域剔除,對(duì)于可能包含人臉的區(qū)域交給后面更復(fù)雜的網(wǎng)絡(luò),利用更多信息進(jìn)一步篩選,在保證召回率的情況下可以大大提高篩選效率。下圖為MTCNN中級(jí)聯(lián)的3個(gè)神經(jīng)網(wǎng)絡(luò)(P-Net、R-Net、O-Net),每層級(jí)聯(lián)網(wǎng)絡(luò)的網(wǎng)絡(luò)層數(shù)逐漸加深,輸入圖像的感受野逐漸變大,最終輸出的特征維數(shù)也在增加,意味著利用的信息越來(lái)越多。
三層級(jí)聯(lián)網(wǎng)絡(luò)的解釋如下:
- P-Net:其實(shí)是個(gè)全卷積神經(jīng)網(wǎng)絡(luò) (FCN),前向傳播得到的特征圖在每個(gè)位置是個(gè)32維的特征向量,用于判斷每個(gè)位置處約12×12大小的區(qū)域內(nèi)是否包含人臉,如果包含人臉,則回歸出人臉的Bounding Box,進(jìn)一步獲得Bounding Box對(duì)應(yīng)到原圖中的區(qū) 域,通過(guò)NMS(Non-maximum suppression) 保留分?jǐn)?shù)最高的Bounding box以及移除重疊區(qū)域過(guò)大的Bounding Box
- R-Net:是單純的卷積神經(jīng)網(wǎng)絡(luò)(CNN),對(duì)輸入進(jìn)行細(xì)化選擇,并且舍去大部分的錯(cuò)誤輸入,并再次使用邊框回歸和面部特征點(diǎn)定位器進(jìn)行人臉區(qū)域的邊框回歸和特征點(diǎn)定位,最后將輸出較為可信的人臉區(qū)域,供O-Net使用。對(duì)比與P-Net使用全卷積輸出的1132的特征,R-Net使用在最后一個(gè)卷積層之后使用了一個(gè)128的全連接層,保留了更多的圖像特征,準(zhǔn)確度性能也優(yōu)于P-Net
- O-Net :也是純粹的卷積神經(jīng)網(wǎng)絡(luò)(CNN),將R-Net認(rèn)為可能包含人臉的Bounding Box 雙線(xiàn)性插值 到48×48,輸入給O-Net,進(jìn)行人臉檢測(cè)和特征點(diǎn)提取
在訓(xùn)練階段,3個(gè)網(wǎng)絡(luò)都會(huì)將關(guān)鍵點(diǎn)位置作為監(jiān)督信號(hào)來(lái)引導(dǎo)網(wǎng)絡(luò)的學(xué)習(xí), 但在預(yù)測(cè)階段,P-Net和R-Net僅做人臉檢測(cè),不輸出關(guān)鍵點(diǎn)位置,關(guān)鍵點(diǎn)位置僅在O-Net中輸出。各級(jí)神經(jīng)網(wǎng)絡(luò)輸出解釋如下:
- face classification 采用softmax判斷是否為人臉,因此輸出為二維
- bounding box regression輸出左上角和右下角的偏移量 ,因此輸出為四維
- facial landmark localization定位左眼、右眼、鼻子、左嘴角、右嘴角共5個(gè)點(diǎn)的位置,因此輸出為十維
FaceNet
FaceNet是谷歌于FaceNet: A Unified Embedding for Face Recognition and Clustering](FaceNet: A Unified Embedding for Face Recognition and Clustering[2]提出的一個(gè)對(duì)識(shí)別 (這是誰(shuí))、驗(yàn)證(是否為同一個(gè)人)、聚類(lèi)(在多張面孔中找到同一個(gè)人)等問(wèn)題的統(tǒng)一解決框架。FaceNet認(rèn)為上述問(wèn)題都可以放到特征空間里統(tǒng)一處理,難點(diǎn)在于如何將人臉更好的映射到特征空間。其本質(zhì)是通過(guò)卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)人臉圖像到128維歐幾里得空間的映射,該映射將人臉圖像映射為128維的特征向量,使用特征向量之間的距離的倒數(shù)來(lái)表征人臉圖像之間的相似度。對(duì)于相同個(gè)體的不同圖片,其特征向量之間的距離較小,對(duì)于不同個(gè)體的圖像,其特征向量之間的距離較大。最后基于特征向量之間的相似度來(lái)解決人臉圖像的識(shí)別、驗(yàn)證和聚類(lèi)等問(wèn)題,F(xiàn)aceNet算法的主要流程為:
-
將圖像通過(guò)深度卷積神經(jīng)網(wǎng)絡(luò)映射到128維的特征空間(歐幾里得空間)中,得到對(duì)應(yīng)的128維特征向量
-
對(duì)特征向量進(jìn)行L2正則化,篩選出有效特征
-
使用正則化后的特征向量,計(jì)算Triplets Loss
Triplets的意思是三元組,區(qū)別于神經(jīng)網(wǎng)絡(luò)的雙參數(shù)計(jì)算(預(yù)測(cè)標(biāo)簽和真實(shí)標(biāo)簽),Triplet Loss是通過(guò)三個(gè)參數(shù)來(lái)計(jì)算的。三元組具體指anchor,positive,negative三部分,三者都是經(jīng)過(guò)L2正則化后的特征向量。具體來(lái)說(shuō),anchor和positive 指的兩個(gè)匹配的臉部縮略圖,其中anchor是模型訓(xùn)練時(shí)的基準(zhǔn)圖片,positive 指的是與anchor相同個(gè)體的圖片,negative指的是與anchor不同個(gè)體的圖片。
FaceNet使用深度卷積神經(jīng)網(wǎng)絡(luò)來(lái)學(xué)習(xí)映射 并進(jìn)一步設(shè)計(jì)了Triplets Loss訓(xùn)練該網(wǎng)絡(luò),之所以稱(chēng)之為三元組是因?yàn)樵摀p失函數(shù)包含了兩個(gè)匹配臉部縮略圖和一個(gè)非匹配的臉部縮略圖,其目標(biāo)是通過(guò)距離邊界來(lái)區(qū)分樣本中的正負(fù)類(lèi),其中的臉部縮略圖指裁剪后的人臉圖片,除了縮放和平移之外,沒(méi)有2D或3D對(duì)齊。三元組損失函數(shù)嘗試將不同個(gè)體的人臉圖像區(qū)分開(kāi)來(lái),使卷積網(wǎng)絡(luò)能更好的學(xué)習(xí)、逼近 。
FaceNet的目的是將人臉圖像嵌入到128維的歐氏空間 中。在該向量空間中,單個(gè)個(gè)體特征向量 (anchor)和該個(gè)體的其它特征向量距離 (positive)小,與其它個(gè)體的特征向量 (negative)距離大,如下圖所示:

使用數(shù)學(xué)語(yǔ)言描述為: ∣ ∣ f ( x i a ) ? f ( x i p ) ∣ ∣ 2 2 + α < ∣ ∣ f ( x i a ) ? f ( x i n ) ∣ ∣ 2 2 , ? ( x i a , x i p , x i n ) ∈ R 128 ||f(x_i^a)-f(x_i^p)||_2^2+\alpha<||f(x_i^a)-f(x_i^n)||_2^2,\forall(x_i^a,x_i^p,x_i^n)\in\mathbb R^{128} ∣∣f(xia?)?f(xip?)∣∣22?+α<∣∣f(xia?)?f(xin?)∣∣22?,?(xia?,xip?,xin?)∈R128
即存在一個(gè)邊界值 使得對(duì)于任意個(gè)體其所有特征向量之間的距離恒小于該個(gè)體任意特征向量與其它個(gè)體特征向量之間的距離。進(jìn)一步即可定義出Triplets Loss: L l o s s = ∑ i N [ ∣ ∣ f ( x i a ) ? f ( x i p ) ∣ ∣ 2 2 ? ∣ ∣ f ( x i a ) ? f ( x i n ) ∣ ∣ 2 2 + α ] + L_{loss}=\displaystyle\sum_{i}^N[||f(x_i^a)-f(x_i^p)||_2^2-||f(x_i^a)-f(x_i^n)||_2^2+\alpha]_+ Lloss?=i∑N?[∣∣f(xia?)?f(xip?)∣∣22??∣∣f(xia?)?f(xin?)∣∣22?+α]+?,其中 [ x ] + = max ? { 0 , x } [x]_+=\max\{0,x\} [x]+?=max{0,x}
Triplets 的選擇對(duì)模型的收斂非常重要。對(duì)于 x i a x_i^a xia?,在實(shí)際訓(xùn)練中,需要選擇同一個(gè)體的不同圖片 x i p x_i^p xip?,滿(mǎn)足 arg ? max ? x i p ∣ ∣ f ( x i a ) ? f ( x i p ) ∣ ∣ 2 2 \displaystyle\arg\max_{x_i^p}||f(x_i^a)-f(x_i^p)||_2^2 argxip?max?∣∣f(xia?)?f(xip?)∣∣22?,同時(shí)還要選擇不同個(gè)體的圖片 x i n x_i^n xin?,滿(mǎn)足 arg ? min ? x i n ∣ ∣ f ( x i a ) ? f ( x i n ) ∣ ∣ 2 2 \displaystyle\arg\min_{x_i^n}||f(x_i^a)-f(x_i^n)||_2^2 argxin?min?∣∣f(xia?)?f(xin?)∣∣22?
在實(shí)際訓(xùn)練中,跨越所有訓(xùn)練樣本來(lái)計(jì)算以上兩者是不現(xiàn)實(shí)的,還會(huì)由于錯(cuò)誤標(biāo)簽圖像導(dǎo)致訓(xùn)練收斂困難。因此常用兩種方法來(lái)進(jìn)行篩選:
- 每隔 n n n步,計(jì)算子集的 x i p x_i^p xip?和 x i n x_i^n xin?
- 在線(xiàn)生成Triplets,即在每個(gè)mini-batch中進(jìn)行篩選positive/negative樣本
本項(xiàng)目采用在線(xiàn)生成Triplets方法進(jìn)行篩選
基于MTCNN和FaceNet的實(shí)時(shí)人臉檢測(cè)識(shí)別系統(tǒng)
MTCNN是強(qiáng)大的人臉特征提取器,我們采用MTCNN提取圖像的特征,并利用FaceNet將圖像特征映射到128維特征空間,隨后在特征空間中比較人臉的相似性,進(jìn)行人臉檢測(cè)與識(shí)別。人臉檢測(cè)識(shí)別系統(tǒng)的主要流程如下:
- 采用opencv實(shí)現(xiàn)從攝像頭采集圖像
- 通過(guò)MTCNN人臉檢測(cè)模型,從照片中提取人臉圖像
- 把人臉圖像輸入到FaceNet,計(jì)算embedding的特征向量
- 使用knn算法,比較特征向量間的歐式距離,判斷是否為同一人,實(shí)現(xiàn)人臉識(shí)別

我們?yōu)楸卷?xiàng)目制作了一個(gè)簡(jiǎn)易UI,其可通過(guò)攝像頭獲取人臉視頻、保存視頻中人臉的特征以及加載已經(jīng)保存的特征。運(yùn)行main.py
文件,可得到一個(gè)對(duì)話(huà)框:

點(diǎn)擊Open camera開(kāi)啟攝像頭,此時(shí)攝像頭中檢測(cè)到人臉,但未能識(shí)別人臉?lè)诸?lèi)

我們獲取人臉,并對(duì)該人臉命名,隨后將人臉的特征添加至數(shù)據(jù)集中。

點(diǎn)擊Save dataset將數(shù)據(jù)集以.npy格式保存。
隨后,我們點(diǎn)擊Load dataset載入保存的數(shù)據(jù)集重新進(jìn)行人臉識(shí)別??梢钥吹剑四槞z測(cè)系統(tǒng)現(xiàn)已能區(qū)分人臉。

此外,若攝像頭中同時(shí)出現(xiàn)多張人臉,該人臉檢測(cè)識(shí)別系統(tǒng)也能將人臉正確區(qū)分。我們按照上述步驟將人臉特征添加至數(shù)據(jù)集,隨后開(kāi)啟攝像頭進(jìn)行人臉檢測(cè)識(shí)別。

可見(jiàn)人臉檢測(cè)識(shí)別系統(tǒng)準(zhǔn)確地識(shí)別出了所有的人臉。
在LFW數(shù)據(jù)集上測(cè)試
我們另外還在LFW (Labled Faces in the Wild)[3]人臉數(shù)據(jù)集上進(jìn)行了算法測(cè)試。LFW是目前人臉識(shí)別的常用測(cè)試集,其中提供的人臉圖片均來(lái)源于生活中的自然場(chǎng)景,因此識(shí)別難度會(huì)增大,尤其由于多姿態(tài)、光照、表情、年齡、遮擋等因素影響導(dǎo)致即使同一人的照片差別也很大。并且有些照片中可能不止一個(gè)人臉出現(xiàn),對(duì)這些多人臉圖像僅選擇中心坐標(biāo)的人臉作為目標(biāo),其他區(qū)域的視為背景干擾。LFW數(shù)據(jù)集共有13233張人臉圖像,每張圖像均給出對(duì)應(yīng)的人名,共有5749人,且絕大部分人僅有一張圖片。每張圖片的尺寸為250X250,絕大部分為彩色圖像,但也存在少許黑白人臉圖片。

在GitHub項(xiàng)目目錄中,lfw_funneled
文件夾包含LWF圖像數(shù)據(jù)集,model
包含MTCNN與FaceNet的網(wǎng)絡(luò)架構(gòu)與預(yù)訓(xùn)練好的權(quán)重。當(dāng)需要在LWF數(shù)據(jù)集上進(jìn)行測(cè)試時(shí),可運(yùn)行ctrUi.py
文件
我們選取LWF數(shù)據(jù)集中所有人物照片大于兩張的數(shù)據(jù)集,共有1681個(gè)數(shù)據(jù)集滿(mǎn)足此條件。我們從1681個(gè)數(shù)據(jù)集中采用隨機(jī)形式抽取數(shù)據(jù)集,每個(gè)數(shù)據(jù)集中隨機(jī)抽取一對(duì)人臉,將其中一張輸入數(shù)據(jù)系統(tǒng),另一張用于匹配測(cè)試,計(jì)算測(cè)試準(zhǔn)確率和測(cè)試時(shí)間。數(shù)據(jù)集結(jié)構(gòu)如下圖所示。


實(shí)驗(yàn)中選取 n = 10 , 20 , 40 , 60 , 80 , 120 n=10,20,40,60,80,120 n=10,20,40,60,80,120。對(duì)于每個(gè) n n n,我們進(jìn)行10次實(shí)驗(yàn)并記錄準(zhǔn)確率和時(shí)間。隨后,我們?nèi)?0次實(shí)驗(yàn)的平均值作為實(shí)驗(yàn)結(jié)果。運(yùn)行時(shí)間與準(zhǔn)確率表格與曲線(xiàn)繪制如下:
n=1 | Accuracy | t(s)/sample |
---|---|---|
10 | 0.94 | 0.089 |
20 | 0.945 | 0.087 |
40 | 0.903 | 0.086 |
60 | 0.9 | 0.086 |
80 | 0.882 | 0.087 |
100 | 0.88 | 0.086 |
120 | 0.877 | 0.089 |

如圖所示,隨著 n n n數(shù)值的增加,平均準(zhǔn)確率基本保持下降(除 n = 20 n=20 n=20處略有上升)。在 n = 20 n=20 n=20時(shí)準(zhǔn)確率最高,為0.945; n = 120 n=120 n=120時(shí)準(zhǔn)確率最低,為0.877。我們推測(cè)隨著該現(xiàn)象出現(xiàn)的原因?yàn)椋河捎贔aceNet特征空間維度過(guò)高(128維度),因此少許偏差就會(huì)導(dǎo)致測(cè)試圖像的特征 向量與其匹配向量的產(chǎn)生較大偏移,而接近于其它圖像的特征向量。隨著 n n n的增加,偏差后與其它點(diǎn)接近的可能性更大了,因此測(cè)試準(zhǔn)確率隨著 n n n增加而下降。
參考文獻(xiàn)
[1] Zhang, Kaipeng, et al. “Joint face detection and alignment using multitask cascaded convolutional networks.” IEEE signal processing letters 23.10 (2016): 1499-1503.
[2] Schroff, Florian, Dmitry Kalenichenko, and James Philbin. “Facenet: A unified embedding for face recognition and clustering.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-443625.html
[3] Huang, Gary B., et al. “Labeled faces in the wild: A database forstudying face recognition in unconstrained environments.” Workshop on faces in’Real-Life’Images: detection, alignment, and recognition. 2008.文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-443625.html
到了這里,關(guān)于基于MTCNN和FaceNet的實(shí)時(shí)人臉檢測(cè)識(shí)別系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!