連續(xù)看了DeepID和FaceNet后,看了更早期的一篇論文,即FB的DeepFace。這篇論文早于DeepID和FaceNet,但其所使用的方法在后面的論文中都有體現(xiàn),可謂是早期的奠基之作。因而特寫博文以記之。網(wǎng)頁(yè)
DeepFace基本框架
人臉識(shí)別的基本流程是:
detect -> aligh -> represent -> classify
人臉對(duì)齊流程
[圖片上傳中。。。(1)]
分為如下幾步:
a. 人臉檢測(cè),使用6個(gè)基點(diǎn) b. 二維剪切,將人臉部分裁剪出來(lái) c. 67個(gè)基點(diǎn),然后Delaunay三角化,在輪廓處添加三角形來(lái)避免不連續(xù) d. 將三角化后的人臉轉(zhuǎn)換成3D形狀 e. 三角化后的人臉變?yōu)橛猩疃鹊?D三角網(wǎng) f. 將三角網(wǎng)做偏轉(zhuǎn),使人臉的正面朝前。 g. 最后放正的人臉 h. 一個(gè)新角度的人臉(在論文中沒(méi)有用到)
總體上說(shuō),這一步的作用就是使用3D模型來(lái)將人臉對(duì)齊,從而使CNN發(fā)揮最大的效果。
人臉表示
[圖片上傳中。。。(2)]
經(jīng)過(guò)3D對(duì)齊以后,形成的圖像都是152×152的圖像,輸入到上述網(wǎng)絡(luò)結(jié)構(gòu)中,該結(jié)構(gòu)的參數(shù)如下:
Conv:32個(gè)11×11×3的卷積核
max-pooling: 3×3, stride=2
Conv: 16個(gè)9×9的卷積核
Local-Conv: 16個(gè)9×9的卷積核,Local的意思是卷積核的參數(shù)不共享
Local-Conv: 16個(gè)7×7的卷積核,參數(shù)不共享
Local-Conv: 16個(gè)5×5的卷積核,參數(shù)不共享
Fully-connected: 4096維
Softmax: 4030維
前三層的目的在于提取低層次的特征,比如簡(jiǎn)單的邊和紋理。其中Max-pooling層使得卷積的輸出對(duì)微小的偏移情況更加魯棒。但沒(méi)有用太多的Max-pooling層,因?yàn)樘嗟腗ax-pooling層會(huì)使得網(wǎng)絡(luò)損失圖像信息。
后面三層都是使用參數(shù)不共享的卷積核,之所以使用參數(shù)不共享,有如下原因:
對(duì)齊的人臉圖片中,不同的區(qū)域會(huì)有不同的統(tǒng)計(jì)特征,卷積的局部穩(wěn)定性假設(shè)并不存在,所以使用相同的卷積核會(huì)導(dǎo)致信息的丟失
不共享的卷積核并不增加抽取特征時(shí)的計(jì)算量,而會(huì)增加訓(xùn)練時(shí)的計(jì)算量
使用不共享的卷積核,需要訓(xùn)練的參數(shù)量大大增加,因而需要很大的數(shù)據(jù)量,然而這個(gè)條件本文剛好滿足。
全連接層將上一層的每個(gè)單元和本層的所有單元相連,用來(lái)捕捉人臉圖像不同位置的特征之間的相關(guān)性。其中,第7層(4096-d)被用來(lái)表示人臉。
全連接層的輸出可以用于Softmax的輸入,Softmax層用于分類。
人臉表示歸一化
對(duì)于輸出的4096-d向量:
先每一維進(jìn)行歸一化,即對(duì)于結(jié)果向量中的每一維,都要除以該維度在整個(gè)訓(xùn)練集上的最大值。
每個(gè)向量進(jìn)行L2歸一化
分類
得到表示后,使用了多種方法進(jìn)行分類:
直接算內(nèi)積
加權(quán)的卡方距離
使用Siamese網(wǎng)絡(luò)結(jié)構(gòu)
加權(quán)卡方距離計(jì)算公式如下:
[圖片上傳中。。。(3)]
其中,加權(quán)參數(shù)由線性SVM計(jì)算得到。
Siamese網(wǎng)絡(luò)結(jié)構(gòu)是成對(duì)進(jìn)行訓(xùn)練,得到的特征表示再使用如下公式進(jìn)行計(jì)算距離:
[圖片上傳中。。。(4)]
其中,參數(shù)alpha是訓(xùn)練得到。Siamese網(wǎng)絡(luò)與FaceNet就很像了。
實(shí)驗(yàn)評(píng)估
數(shù)據(jù)集
Social Face Classification Dataset(SFC): 4.4M張人臉/4030人
LFW: 13323張人臉/5749人 restricted: 只有是/不是的標(biāo)記
unrestricted:其他的訓(xùn)練對(duì)也可以拿到
unsupervised:不在LFW上訓(xùn)練
Youtube Face(YTF): 3425videos/1595人
Training on SFC
訓(xùn)練使用的人數(shù)不同(1.5K/3.3K/4.4K)
訓(xùn)練使用的照片數(shù)目不同(10%/20%/50%)
使用的網(wǎng)絡(luò)不同(去掉第三層/去掉第4、5層/去掉第3、4、5層)
[圖片上傳中。。。(5)]
Results on LFW
[圖片上傳中。。。(6)]
Results on YTF
[圖片上傳中。。。(7)]
總結(jié)
DeepFace與之后的方法的最大的不同點(diǎn)在于,DeepFace在訓(xùn)練神經(jīng)網(wǎng)絡(luò)前,使用了對(duì)齊方法。論文認(rèn)為神經(jīng)網(wǎng)絡(luò)能夠work的原因在于一旦人臉經(jīng)過(guò)對(duì)齊后,人臉區(qū)域的特征就固定在某些像素上了,此時(shí),可以用卷積神經(jīng)網(wǎng)絡(luò)來(lái)學(xué)習(xí)特征。
針對(duì)同樣的問(wèn)題,DeepID和FaceNet并沒(méi)有對(duì)齊,DeepID的解決方案是將一個(gè)人臉切成很多部分,每個(gè)部分都訓(xùn)練一個(gè)模型,然后模型聚合。FaceNet則是沒(méi)有考慮這一點(diǎn),直接以數(shù)據(jù)量大和特殊的目標(biāo)函數(shù)取勝。
在DeepFace論文中,只使用CNN提取到的特征,這點(diǎn)倒是開后面之先河,后面的DeepID、FaceNet全都是使用CNN提取特征了,再也不談LBP了。
參考文獻(xiàn)
[1]. Taigman Y, Yang M, Ranzato M A, et al. Deepface: Closing the gap to human-level performance in face verification[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1701-1708.