火善棟
(重慶三峽學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院,重慶 404000)
到目前為止,人臉識(shí)別已經(jīng)是一項(xiàng)比較成熟的技術(shù),而且成功應(yīng)用于各種商業(yè)領(lǐng)域,但是,這些人臉識(shí)別技術(shù)不是算法過(guò)于復(fù)雜,就是技術(shù)不夠透明。為了克服這些技術(shù)壁壘,構(gòu)建屬于自己的人臉識(shí)別系統(tǒng),本文在已有的技術(shù)之上,通過(guò)構(gòu)建孿生網(wǎng)絡(luò)來(lái)探索該網(wǎng)絡(luò)模型在人臉識(shí)別上的有效性。
人臉識(shí)別屬于圖像分類問(wèn)題,神經(jīng)網(wǎng)絡(luò)模型的傳統(tǒng)做法是:先使用大量帶標(biāo)簽的圖片訓(xùn)練模型,然后讓訓(xùn)練好的模型對(duì)不在訓(xùn)練集中的圖片進(jìn)行分類,去預(yù)測(cè)輸入的圖片屬于哪一類。如果采用傳統(tǒng)的方法進(jìn)行人臉識(shí)別,就需要把每一個(gè)不同的人臉圖片做為一個(gè)類別,然后采集大量的相同,或不同的人臉在不同狀態(tài)下的圖片進(jìn)行分類訓(xùn)練,這樣造成的問(wèn)題就是,一方面分類數(shù)量龐大,另一方面對(duì)個(gè)人人臉圖片采集的難度也比較大;再者,即使完成了訓(xùn)練,也只能對(duì)已經(jīng)訓(xùn)練過(guò)的人臉進(jìn)行識(shí)別,對(duì)于陌生的人臉則無(wú)法識(shí)別。這樣,一旦要識(shí)別的人群發(fā)生變化,整個(gè)模型則需要重新進(jìn)行訓(xùn)練,因此,采用傳統(tǒng)的方法進(jìn)行人臉識(shí)別,其網(wǎng)絡(luò)模型的可擴(kuò)展性也比較差,不具備實(shí)用價(jià)值。
孿生神經(jīng)網(wǎng)絡(luò)是基于兩個(gè)人工神經(jīng)網(wǎng)絡(luò)建立的耦合網(wǎng)絡(luò),孿生網(wǎng)絡(luò)可以利用相同樣本對(duì)和不同樣本對(duì)之間的區(qū)別,訓(xùn)練出一個(gè)網(wǎng)絡(luò)模型,使同類樣本生成的特征向量相近,不同樣本的特征向量遠(yuǎn)離,從而讓網(wǎng)絡(luò)能夠識(shí)別兩張不同人臉的差別,進(jìn)而達(dá)到進(jìn)行人臉識(shí)別的目的。訓(xùn)練孿生網(wǎng)絡(luò)的主要目的就是提高網(wǎng)絡(luò)模型的辨別力,對(duì)于任意輸入的兩張人臉圖片,網(wǎng)絡(luò)模型能夠識(shí)別是同一個(gè)人還是兩個(gè)不同的人,由于網(wǎng)絡(luò)模型自身的特點(diǎn),訓(xùn)練好的網(wǎng)絡(luò)模型可以對(duì)已經(jīng)訓(xùn)練過(guò)的人臉圖片或者其它任意陌生的人臉圖片進(jìn)行有效的識(shí)別,因此,孿生網(wǎng)絡(luò)的通用性比較好。
采用孿生網(wǎng)絡(luò)進(jìn)行人臉識(shí)別,為了提高識(shí)別速度,通常會(huì)對(duì)要進(jìn)行識(shí)別的人臉圖片進(jìn)行采集并預(yù)先計(jì)算出特征向量并保存在數(shù)據(jù)庫(kù)中,在進(jìn)行人臉識(shí)別的時(shí)候只需計(jì)算待檢測(cè)人臉的特征向量,然后與數(shù)據(jù)庫(kù)中的特征向量做比較,并通過(guò)設(shè)置合理的閥值從而達(dá)到人臉識(shí)別的目的。
采用pytorch[2]構(gòu)建殘差網(wǎng)絡(luò),圖1為18層殘差網(wǎng)絡(luò)的基本結(jié)構(gòu),整個(gè)網(wǎng)絡(luò)總體由輸入層、殘差層和輸出層三部分組成。輸入層由一個(gè)卷積層和一個(gè)池化層組成;輸出層由一個(gè)池化層和一個(gè)全連接層組成;殘差層由四個(gè)殘差模塊組成,每個(gè)殘差模塊包含有兩個(gè)殘差塊,每一個(gè)殘差塊由兩個(gè)卷積層組成,除第一個(gè)殘差模塊輸入和輸出向量長(zhǎng)寬不變以外,其它殘差模塊輸出向量長(zhǎng)寬減少一半,通道數(shù)增加一倍,由于本實(shí)驗(yàn)采用18層殘差網(wǎng)絡(luò)結(jié)構(gòu)實(shí)驗(yàn)效果不是太理想,故采用了34層殘差網(wǎng)絡(luò)結(jié)構(gòu),34層與18層殘差網(wǎng)絡(luò)結(jié)構(gòu)輸入層與輸出層是一樣的,不同的是每個(gè)殘差模塊中殘差塊的個(gè)數(shù)不同,18層網(wǎng)路結(jié)構(gòu)每個(gè)殘差模塊殘差塊的個(gè)數(shù)都為2,32層每個(gè)殘差模塊的殘差塊個(gè)數(shù)分別為3、4、6、3。
圖1 18層殘差網(wǎng)絡(luò)結(jié)構(gòu)圖
以34層殘差網(wǎng)絡(luò)為基本網(wǎng)絡(luò)結(jié)構(gòu),構(gòu)建孿生網(wǎng)絡(luò),兩個(gè)34層殘差網(wǎng)絡(luò)其參數(shù)是一樣的,其網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 孿生網(wǎng)絡(luò)結(jié)構(gòu)圖
圖中Contrastive Loss[1]為損失函數(shù)[4]:
其中:Dw代表兩個(gè)樣本輸出特征向量的歐氏距離(本實(shí)驗(yàn)特征向量的長(zhǎng)度設(shè)置為10)。
式(1)中Y為兩個(gè)樣本是否匹配的標(biāo)簽,Y=0代表兩個(gè)樣本相似或者匹配(同一個(gè)人臉照片);Y=1則代表不匹配(不同的人臉照片);m為設(shè)定的閾值(本實(shí)驗(yàn)定為2.5),表示當(dāng)人臉不相同時(shí),只考慮不相似特征歐式距離在0~m之間的特征差值,當(dāng)特征距離超過(guò)m時(shí),則將其loss看做為0。
ContrastiveLoss損失函數(shù)所要達(dá)到的目的是:同一個(gè)人臉不同照片特征向量的距離越小越好,不同人臉照片特征向量的距離越大越好。
從網(wǎng)上下載數(shù)據(jù)集(外國(guó)人臉數(shù)據(jù)集,一共有500個(gè)不同人的照片,每個(gè)人有5張不同狀態(tài)的照片,累計(jì)總共有2500張照片,為了縮短訓(xùn)練時(shí)間,本實(shí)驗(yàn)只采用了其中的200個(gè)人、1000張照片進(jìn)行訓(xùn)練);為了去掉圖片噪音對(duì)人臉識(shí)別的影響,采用openCV對(duì)這1000張照片進(jìn)行人臉檢測(cè)。由于進(jìn)行人臉檢測(cè)時(shí),有的圖片人臉的檢測(cè)效果不是太好,為了保證訓(xùn)練人臉圖片的質(zhì)量,最后通過(guò)人工的方式對(duì)無(wú)法檢測(cè)到人臉的照片或者人臉檢測(cè)錯(cuò)誤的照片進(jìn)行裁剪,得到正確的人臉圖片,其效果如圖3所示。
圖3 人臉檢測(cè)效果示意圖
隨機(jī)從訓(xùn)練集中提取樣本數(shù)據(jù),以32個(gè)樣本(正樣本和負(fù)樣本各占50%)作為一個(gè)訓(xùn)練批次(注:一次迭代總的訓(xùn)練批次為1000/32=32次),網(wǎng)絡(luò)總的迭代次數(shù)設(shè)置為500(網(wǎng)絡(luò)累計(jì)訓(xùn)練次數(shù)大約為32×500=16000次),其訓(xùn)練效果如圖4所示,從訓(xùn)練結(jié)果來(lái)看,隨著迭代次數(shù)的增多,總的趨勢(shì)是差值越來(lái)越小,但在迭代過(guò)程中,誤差損失一直不穩(wěn)定,呈現(xiàn)出細(xì)微的波動(dòng)。
圖4 訓(xùn)練迭代次數(shù)與損失函數(shù)差值結(jié)果圖
從數(shù)據(jù)集中未參與訓(xùn)練的照片中隨機(jī)抽取16組照片(8組人臉相同,8組人臉不相同)進(jìn)行對(duì)比測(cè)試,其結(jié)果如圖5、圖6所示。
圖5 不同人臉識(shí)別截圖
圖6 相同人臉識(shí)別截圖
從上面幾組照片測(cè)試結(jié)果來(lái)看,孿生網(wǎng)絡(luò)在人臉識(shí)別方面可以達(dá)到一定的效果,不相同人臉特征差基本在2.5以上;相同人臉特征差總體上雖然偏小(最小可以達(dá)到0.5102),但是,有一組特征差值達(dá)到了2.4175,這樣必然會(huì)導(dǎo)致人臉識(shí)別出錯(cuò)。當(dāng)然,以上只是在訓(xùn)練樣本比較少而且有些樣本圖片比較模糊的情況下得到的結(jié)果,如果在算力允許的情況下,改善網(wǎng)絡(luò)結(jié)構(gòu),優(yōu)化訓(xùn)練算法,提高訓(xùn)練樣本圖片的質(zhì)量,加大訓(xùn)練樣本的規(guī)模和迭代次數(shù),還是有可能達(dá)到一個(gè)比較理想的效果。
表1 不相同人臉特征差值表
表2 相同人臉特征差值表
為了比較不同網(wǎng)絡(luò)結(jié)構(gòu)對(duì)人臉識(shí)別的效果,本文也通過(guò)比較流行的VGG19、ResNet50、Inception[5]等網(wǎng)絡(luò)構(gòu)建孿生網(wǎng)絡(luò),并進(jìn)行了訓(xùn)練和測(cè)試,其效果各有千秋??傊?,由于用孿生網(wǎng)絡(luò)進(jìn)行人臉識(shí)別最本質(zhì)的特點(diǎn)就是:通過(guò)學(xué)習(xí)樣本,訓(xùn)練網(wǎng)絡(luò)模型對(duì)相同和不同人臉的分辨力,相同的人臉特征值差越小越好,不相同的人臉特征值越大越好,這樣必然會(huì)導(dǎo)致相同的人臉在狀態(tài)差別比較大或者不相同人臉在特征相貌非常相似的情況下很難達(dá)到正確識(shí)別的目的;但是,由于孿生網(wǎng)絡(luò)其原理和構(gòu)建都比較簡(jiǎn)單,而且通過(guò)小樣本訓(xùn)練就可以在一定程度上達(dá)到正確識(shí)別的目的,所以,在一些人臉識(shí)別不太嚴(yán)格的場(chǎng)合,例如,住宅小區(qū)人臉識(shí)別、人臉考勤等方面通過(guò)改善訓(xùn)練樣本圖片的質(zhì)量,提高人臉檢測(cè)的準(zhǔn)確度以及對(duì)人臉不同狀態(tài)進(jìn)行多次識(shí)別的情況下仍然具有一定的實(shí)際意義。