国产精品久久国产_特级无码一区二区三区毛片视频_在线观看亚洲最大黄色网站_亚洲 中文 自拍_中文无码电影2020_成人片黄网站色大片免费西瓜影院_日本精品在线二区_北京老熟妇偷人偷拍_羞羞色院91精品永久站_欧美日韩国产不卡

  • 服務(wù)熱線:13728883399
  • wangyp@shangeai.com

三個(gè)方面介紹人臉識別:人臉識別是什么?怎么識別?科研領(lǐng)域近期進(jìn)展

時(shí)間:2018-04-28 10:39:12點(diǎn)擊:544次

相信做機(jī)器學(xué)習(xí)或深度學(xué)習(xí)的同學(xué)們回家總會有這樣一個(gè)煩惱:親朋好友詢問你從事什么工作的時(shí)候,如何通俗地解釋能避免尷尬?

我嘗試過很多名詞來形容自己的工作:機(jī)器學(xué)習(xí),深度學(xué)習(xí),算法工程師/研究員,搞計(jì)算機(jī)的,程序員...這些詞要么自己覺得不滿意,要么對方聽不懂。經(jīng)歷無數(shù)次失敗溝通,最后總結(jié)了一個(gè)簡單實(shí)用的答案:“做人臉識別的”。

為什么這個(gè)答案管用,因?yàn)槿四樧R別在深度學(xué)習(xí)相關(guān)領(lǐng)域的課題中屬于商業(yè)落地情景多,被普及率廣的一項(xiàng)技術(shù),以至于誰說不出幾個(gè)人臉識別應(yīng)用,都有那么點(diǎn)落后于時(shí)代的意思。

今天出這篇人臉識別,是基于我過去三個(gè)月在人臉識別方向小小的探索,希望能為非技術(shù)從業(yè)者提供人臉識別的基本概念(第一部分),以及為人臉識別愛好者和入門人員提供儲備知識和實(shí)驗(yàn)數(shù)據(jù)參考(第二、第三部分),也歡迎專業(yè)人士提供寶貴的交流意見。

本文將從接下來三個(gè)方面介紹人臉識別,讀者可根據(jù)自身需求選擇性閱讀:

Chapter 1:人臉識別是什么?怎么識別?

Chapter 2:科研領(lǐng)域近期進(jìn)展

Chapter 3:實(shí)驗(yàn)及細(xì)節(jié)

01

人臉識別是什么?怎么識別?

▌人臉識別是什么

人臉識別問題宏觀上分為兩類:1. 人臉驗(yàn)證(又叫人臉比對)2. 人臉識別。

人臉驗(yàn)證做的是 1 比 1 的比對,即判斷兩張圖片里的人是否為同一人。最常見的應(yīng)用場景便是人臉解鎖,終端設(shè)備(如手機(jī))只需將用戶事先注冊的照片與臨場采集的照片做對比,判斷是否為同一人,即可完成身份驗(yàn)證。

人臉識別做的是 1 比 N 的比對,即判斷系統(tǒng)當(dāng)前見到的人,為事先見過的眾多人中的哪一個(gè)。比如疑犯追蹤,小區(qū)門禁,會場簽到,以及新零售概念里的客戶識別。

這些應(yīng)用場景的共同特點(diǎn)是:人臉識別系統(tǒng)都事先存儲了大量的不同人臉和身份信息,系統(tǒng)運(yùn)行時(shí)需要將見到的人臉與之前存儲的大量人臉做比對,找出匹配的人臉。

兩者在早期(2012年~2015年)是通過不同的算法框架來實(shí)現(xiàn)的,想同時(shí)擁有人臉驗(yàn)證和人臉識別系統(tǒng),需要分開訓(xùn)練兩個(gè)神經(jīng)網(wǎng)絡(luò)。而 2015 年 Google 的 FaceNet [1] 論文的發(fā)表改變了這一現(xiàn)狀,將兩者統(tǒng)一到一個(gè)框架里。

▌人臉識別,怎么識別

這部分只想闡明一個(gè)核心思想:不同人臉由不同特征組成。

理解這個(gè)思想,首先需要引入的的是“特征”的概念。先看下面這個(gè)例子:

假設(shè)這 5 個(gè)特征足夠形容一張人臉,那每張人臉都可表示為這 5 個(gè)特征的組合:

(特征1,特征2,特征3,特征4,特征5)

一位雙眼皮,挺鼻梁,藍(lán)眼睛,白皮膚,瓜子臉的歐美系小鮮肉即可用特征表示為(見表格加粗項(xiàng)):

(1,1,0,1,0)

那么遍歷上面這張?zhí)卣鞅砀褚还部梢源?img src="http://file.elecfans.com/web1/M00/4F/D5/pIYBAFrj32WACfYsAAAEp3bfBDo640.png" />張不同的臉。32 張臉可遠(yuǎn)遠(yuǎn)不夠覆蓋 70 多億的人口。為了讓不同特征組成的人臉能覆蓋足夠多人臉,我們需要擴(kuò)充上面那張?zhí)卣鞅怼U(kuò)張?zhí)卣鞅砜梢詮男?、列兩個(gè)角度展開。

列的角度很簡單,只需要增加特征數(shù)量:(特征6.臉型,特征7.兩眼之間距離,特征8.嘴唇厚薄...)實(shí)際應(yīng)用中通常應(yīng)用 128,256,512 或者 1024 個(gè)不同特征,這么多特征從哪來,該不會人為一個(gè)一個(gè)去設(shè)計(jì)吧?這個(gè)問題在后面會解答。

從行的角度擴(kuò)充也很好理解,比如“特征3”,除了值 0 代表藍(lán)色,值 1 代表灰色,是不是可以增加一個(gè)值 2 代表黑色,值 3 代表沒有頭發(fā)呢?此外,除了這些離散的整數(shù),我們也可以取連續(xù)的小數(shù),比如特征 3 的值 0.1,代表“藍(lán)中略微帶黑”,值 0.9 代表“灰中帶藍(lán)”......

經(jīng)過這樣的擴(kuò)充,特征空間便會變得無限大。擴(kuò)充后特征空間里的一張臉可能表示為:

(0, 1, 0.3, 0.5, 0.1, 2, 2.3, 1.75,...)

之前提出的問題:用于表示人臉的大量特征從哪來?這便是深度學(xué)習(xí)(深度神經(jīng)網(wǎng)絡(luò))發(fā)揮作用的地方。它通過在千萬甚至億級別的人臉數(shù)據(jù)庫上學(xué)習(xí)訓(xùn)練后,會自動(dòng)總結(jié)出最適合于計(jì)算機(jī)理解和區(qū)分的人臉特征。

算法工程師通常需要一定的可視化手段才能知道機(jī)器到底學(xué)習(xí)到了哪些利于區(qū)分不同人的特征,當(dāng)然這部分不是本節(jié)重點(diǎn)。

闡明了不同人臉由不同特征組成后,我們便有了足夠的知識來分析人臉識別,到底怎么識別。

現(xiàn)在考慮最簡單最理想的情況,用于區(qū)分不同人的特征只有兩個(gè):特征1和特征2。那么每一張臉都可以表示為一個(gè)坐標(biāo)(特征1,特征2),即特征空間(這個(gè)例子里是二維空間)內(nèi)的一個(gè)點(diǎn)。

人臉識別基于一個(gè)默認(rèn)成立的假設(shè):同一個(gè)人在不同照片里的臉,在特征空間里非常接近。

為什么這個(gè)假設(shè)默認(rèn)成立,設(shè)想一下,一個(gè)棕色頭發(fā)的人,在不同光照,遮擋,角度條件下,發(fā)色看起來雖然有輕微的區(qū)別,但依然與真實(shí)顏色非常接近,反應(yīng)在發(fā)色的特征值上,可能是 0 到 0.1 之間的浮動(dòng)。

深度學(xué)習(xí)的另一任務(wù)和挑戰(zhàn)便是在各種極端復(fù)雜的環(huán)境條件下,精確的識別各個(gè)特征。

上圖是在熊本做大規(guī)模人臉數(shù)據(jù)集去噪演講時(shí)用的 PPT,三張山下智久的照片經(jīng)過神經(jīng)網(wǎng)絡(luò)提取出 128 維的特征后,變成了 3 個(gè)在 128 維空間中的點(diǎn)(紅色),石原里美的特征點(diǎn)為綠色。

這張 PPT 想表達(dá)同樣的意思:同一人的不通照片提取出的特征,在特征空間里距離很近,不同人的臉在特征空間里相距較遠(yuǎn)。

再來考慮人臉識別領(lǐng)域的兩個(gè)問題:人臉驗(yàn)證和人臉識別。

▌人臉驗(yàn)證

比如 FaceID 人臉解鎖,iPhone 事先存了一張用戶的照片(需要用戶注冊),這張照片變成了轉(zhuǎn)換成了一連串特征數(shù)值(即特征空間里的一個(gè)點(diǎn)),用戶解鎖時(shí),手機(jī)只需要對比當(dāng)前采集到的臉和事先注冊的臉在特征空間里的幾何距離,如果距離足夠近,則判斷為同一人,如果距離不夠近,則解鎖失敗。距離閾值的設(shè)定,則是算法工程師通過大量實(shí)驗(yàn)得到的。

▌人臉識別

同樣考慮一個(gè)場景,人臉考勤。公司 X 有員工 A,B,C,公司會要求三名員工在入職的時(shí)候各提供一張個(gè)人照片用于注冊在公司系統(tǒng)里,靜靜地躺在特征空間中。

第二天早上員工 A 上班打卡時(shí),將臉對準(zhǔn)考勤機(jī)器,系統(tǒng)會把當(dāng)前員工 A 的臉放到特征空間里,與之前特征空間里注冊好的臉一一對比,發(fā)現(xiàn)注冊的臉中距離當(dāng)前采集到的臉最近的特征臉是員工 A,打卡完畢。

知道了人臉識別的基本原理,便能看清它的技術(shù)局限。下圖展示了一些容易識別失敗的案例:

在光照較差,遮擋,形變(大笑),側(cè)臉等諸多條件下,神經(jīng)網(wǎng)絡(luò)很難提取出與“標(biāo)準(zhǔn)臉”相似的特征,異常臉在特征空間里落到錯(cuò)誤的位置,導(dǎo)致識別和驗(yàn)證失敗。這是現(xiàn)代人臉識別系統(tǒng)的局限,一定程度上也是深度學(xué)習(xí)(深度神經(jīng)網(wǎng)絡(luò))的局限。

面對這種局限,通常采取三種應(yīng)對措施,使人臉識別系統(tǒng)能正常運(yùn)作:

1. 工程角度:研發(fā)質(zhì)量模型,對檢測到人臉質(zhì)量進(jìn)行評價(jià),質(zhì)量較差則不識別/檢驗(yàn)。

2. 應(yīng)用角度:施加場景限制,比如刷臉解鎖,人臉閘機(jī),會場簽到時(shí),都要求用戶在良好的光照條件下正對攝像頭,以避免采集到質(zhì)量差的圖片。

3. 算法角度:提升人臉識別模型性能,在訓(xùn)練數(shù)據(jù)里添加更多復(fù)雜場景和質(zhì)量的照片,以增強(qiáng)模型的抗干擾能力。

總而言之,人臉識別/深度學(xué)習(xí)還遠(yuǎn)未達(dá)到人們想象的那般智能。希望各位讀者看完第一節(jié)后,有能力分辨社交網(wǎng)絡(luò),自媒體上的信息真?zhèn)?更理性的看待人工智能,給它時(shí)間和包容,慢慢成長。

02

科研領(lǐng)域近期進(jìn)展

這部分將從兩個(gè)思路跟進(jìn)現(xiàn)代人臉識別算法:

思路1:Metric Learning: Contrastive Loss, Triplet loss 及相關(guān) sampling method。

思路2:Margin Based Classification: 包含 Softmax with Center loss, Sphereface, NormFace, AM-softmax (CosFace) 和 ArcFace.

關(guān)鍵字:DeepID2, Facenet, Center loss, Triplet loss, Contrastive Loss, Sampling method, Sphereface, Additive Margin Softmax (CosFace), ArcFace.

▌思路1:Metric Learning

Contrastive Loss

基于深度學(xué)習(xí)的人臉識別領(lǐng)域最先應(yīng)用 Metric Learning 思想之一的便是 DeepID2 [2] 了,同 Chapter 1 的思想,“特征”在這篇文章中被稱為“DeepID Vector”。

DeepID2 在同一個(gè)網(wǎng)絡(luò)同時(shí)訓(xùn)練 Verification 和 Classification(即有兩個(gè)監(jiān)督信號)。其中 Verification Loss 便在特征層引入了 Contrastive Loss。

Contrastive Loss 本質(zhì)上是使同一個(gè)人的照片在特征空間距離足夠近,不同人在特征空間里相距足夠遠(yuǎn)直到超過某個(gè)閾值 m(聽起來和 Triplet Loss 很像)。

基于這樣的 insight,DeepID2 在訓(xùn)練的時(shí)候不是以一張圖片為單位了,而是以 Image Pair 為單位,每次輸入兩張圖片,為同一人則 Verification Label 為 1,不是同一人則 Label 為 -1,參數(shù)更新思路見下面公式(截自 DeepID2 論文):

DeepID2 在 14 年是人臉領(lǐng)域非常有影響力的工作,也掀起了在人臉領(lǐng)域引進(jìn) Metric Learning 的浪潮。

Triplet Loss from FaceNet

這篇 15 年來自 Google 的 FaceNet 同樣是人臉識別領(lǐng)域的分水嶺性工作。不僅僅因?yàn)樗麄兂晒?yīng)用了 Triplet Loss 在 benchmark 上取得 state-of-art 的結(jié)果,更因?yàn)樗麄兲岢隽艘粋€(gè)絕大部分人臉問題的統(tǒng)一解決框架,即:識別、驗(yàn)證、搜索等問題都可以放到特征空間里做,需要專注解決的僅僅是如何將人臉更好的映射到特征空間。

為此,Google 在 DeepID2 的基礎(chǔ)上,拋棄了分類層即 Classification Loss,將 Contrastive Loss 改進(jìn)為 Triplet Loss,只為了一個(gè)目的:學(xué)到更好的 feature。

Triplet Loss 的思想也很簡單,輸入不再是 Image Pair,而是三張圖片(Triplet),分別為 Anchor Face,Negative Face 和 Positive Face。Anchor 與 Positive Face 為同一人,與 Negative Face 為不同人。那么 Triplet Loss 的損失即可表示為:

直觀解釋為:在特征空間里 Anchor 與 Positive 的距離要小于 Anchor 與 Negative 的距離超過一個(gè) Margin Alpha。

有了良好的人臉特征空間,人臉問題便轉(zhuǎn)換成了 Chapter 1 末尾形容的那樣簡單直觀。附上一張我制作的 Contrastive Loss 和 Triplet Loss 的 PPT:

Metric Learning 的問題

基于 Contrastive Loss 和 Triplet Loss 的 Metric Learning 符合人的認(rèn)知規(guī)律,在實(shí)際應(yīng)用中也取得了不錯(cuò)的效果,但是它有非常致命的兩個(gè)問題,使應(yīng)用它們的時(shí)候猶如 pain in the ass。

1. 模型需要很很很很很很很很很很很很很很長時(shí)間才能擬合(months mentioned in FaceNet paper),Contrastive Loss 和 Triplet Loss 的訓(xùn)練樣本都基于 pair 或者 triplet 的,可能的樣本數(shù)是 O (N2) 或者 O (N3) 的。

當(dāng)訓(xùn)練集很大時(shí),基本不可能遍歷到所有可能的樣本(或能提供足夠梯度額的樣本),所以一般來說需要很長時(shí)間擬合。我在 10000 人,500,000 張左右的亞洲數(shù)據(jù)集上花了近一個(gè)月才擬合。

2. 模型好壞很依賴訓(xùn)練數(shù)據(jù)的 Sample 方式,理想的 Sample 方式不僅能提升算法最后的性能,更能略微加快訓(xùn)練速度。

關(guān)于這兩個(gè)問題也有很多學(xué)者進(jìn)行了后續(xù)研究,下面的內(nèi)容作為 Metric Learning 的延伸閱讀,不會很詳細(xì)。

Metric Learning 延伸閱讀

1. Deep Face Recognition [3]

為了加速 Triplet Loss 的訓(xùn)練,這篇文章先用傳統(tǒng)的 softmax 訓(xùn)練人臉識別模型,因?yàn)?Classficiation 信號的強(qiáng)監(jiān)督特性,模型會很快擬合(通常小于 2 天,快的話幾個(gè)小時(shí))。

之后移除頂層的 Classificiation Layer,用 Triplet Loss 對模型進(jìn)行特征層 finetune,取得了不錯(cuò)的效果。此外這篇論文還發(fā)布了人臉數(shù)據(jù)集 VGG-Face。

2. In Defense of the Triplet Loss for Person Re-Identification [4]

這篇文章提出了三個(gè)非常有意思的觀點(diǎn):

作者說實(shí)驗(yàn)中,平方后的歐幾里得距離(Squared Euclidean Distance)表現(xiàn)不如開方后的真實(shí)歐幾里得距離(Non-squared Euclidean Distance),直白來說就是把下圖公式中的平方摘掉。

提出了 Soft-Margin 損失公式替代原始的 Triplet Loss 表達(dá)式。

引進(jìn)了 Batch Hard Sampling。

3. Sampling Matters in Deep Embedding Learning [5]

這篇文章提出了兩個(gè)有價(jià)值的點(diǎn):

從導(dǎo)函數(shù)角度解釋了為什么第 2 點(diǎn)中提到的 Non-squared Distance 比 Squared-distance 好,并在這個(gè) insight 基礎(chǔ)上提出了 Margin Based Loss(本質(zhì)還是 Triplet Loss 的 variant,見下圖,圖片取自原文)。

提出了 Distance Weighted Sampling。文章說 FaceNet 中的 Semi-hard Sampling,Deep Face Recognition [3] 中的 Random Hard 和 [4] 中提到的 Batch Hard 都不能輕易取到會產(chǎn)生大梯度(大 loss,即對模型訓(xùn)練有幫助的 triplets),然后從統(tǒng)計(jì)學(xué)的視角使用了 Distance Weighted Sampling Method。

4. 我的實(shí)驗(yàn)感想

2、3 點(diǎn)中提到的方式在試驗(yàn)中都應(yīng)用過,直觀感受是 Soft-Margin 和Margin Based Loss 都比原始的 Triplet Loss 好用,但是 Margin Based Loss 實(shí)驗(yàn)中更優(yōu)越。

Distance Weighted Sampling Method 沒有明顯提升。

延伸閱讀中有提到大家感興趣的論文,可參考 reference 查看原文。最后,值得注意的是,Triplet Loss 在行人重識別領(lǐng)域也取得了不錯(cuò)的效果,雖然很可能未來會被 Margin Based Classfication 打敗。

▌思路2:Margin Based Classification

顧名思義,Margin Based Classficiation 不像在 feature 層直接計(jì)算損失的 Metric Learning 那樣,對 feature 加直觀的強(qiáng)限制,而是依然把人臉識別當(dāng) classification 任務(wù)進(jìn)行訓(xùn)練,通過對 softmax 公式的改造,間接實(shí)現(xiàn)了對 feature 層施加 margin 的限制,使網(wǎng)絡(luò)最后得到的 feature 更 discriminative。

這部分先從 Sphereface [6] 說起。

Sphereface

先跟隨作者的 insight 理下思路(圖截自原文):

圖 (a) 是用原始 softmax 損失函數(shù)訓(xùn)練出來的特征,圖 (b) 是歸一化的特征。不難發(fā)現(xiàn)在 softmax 的特征從角度上來看有 latent 分布。

那么為何不直接去優(yōu)化角度呢?如果把分類層的權(quán)重歸一化,并且不考慮偏置的話,就得到了改進(jìn)后的損失函數(shù):

不難看出,對于特征 x_i,該損失函數(shù)優(yōu)化的方向是使得其向該類別 y_i 中心靠近,并且遠(yuǎn)離其他的類別中心。這個(gè)目標(biāo)跟人臉識別目標(biāo)是一致的,最小化類內(nèi)距離并且最大化類間距離。

然而為了保證人臉比對的正確性,還要保證最大類內(nèi)距離還要小于最小類間距離。上面的損失函數(shù)并不能保證這一點(diǎn)。所以作者引入了 margin 的思想,這跟 Triples Loss 里面引入 Margin Alpha 的思想是一致的。

那么作者是如何進(jìn)一步改進(jìn)上式,引入 margin 的呢?

上式紅框中是樣本特征與類中心的余弦值,我們的目標(biāo)是縮小樣本特征與類中心的角度,即增大這個(gè)值。換句話說,如果這個(gè)值越小,損失函數(shù)值越大,即我們對偏離優(yōu)化目標(biāo)的懲罰越大。

也就是說,這樣就能進(jìn)一步的縮小類內(nèi)距離和增大類間距離,達(dá)到我們的目標(biāo)。基于這樣的思想最終的損失函數(shù)為如下:

原始的 cos(θ) 被換成了 phi(θ),phi(θ) 的最簡單形式其實(shí)是 cos(mθ),之所以在原文中變得復(fù)雜,只是為了將定義域擴(kuò)展到 [0,2π] 上,并保證在定義域內(nèi)單調(diào)遞減。

而這個(gè) m 便是增加的 margin 系數(shù)。當(dāng) m=1 時(shí),phi(θ) 等于 cos(θ),當(dāng) m>1 時(shí),phi 變小,損失變大。超參 m 控制著懲罰力度,m 越大,懲罰力度越大。

為計(jì)算方便,m 一般設(shè)為整數(shù)。作者從數(shù)學(xué)上證明了,m>=3 就能保證最大類內(nèi)距離小于最小類間距離。實(shí)現(xiàn)的時(shí)候使用倍角公式。

另外:Sphereface 的訓(xùn)練很 tricky,關(guān)于其訓(xùn)練細(xì)節(jié),這篇文章并沒有提到,而是參考了作者前一篇文章 [10]。有關(guān)訓(xùn)練細(xì)節(jié)讀者也可以去作者 Github 上去尋找,issues 里面有很多討論。

Normface

Sphereface 效果很好,但是它不優(yōu)美。在測試階段,Sphereface 通過特征間的余弦值來衡量相似性,即以角度為相似性的度量。

但在訓(xùn)練階段,不知道讀者有沒有注意到,其實(shí) Sphereface 的損失函數(shù)并不是在直接優(yōu)化特征與類中心的角度,而是優(yōu)化特征與類中心的角度在乘上一個(gè)特征的長度。

也就是說,我在上文中關(guān)于 Sphereface 損失函數(shù)優(yōu)化方向的表述是不嚴(yán)謹(jǐn)?shù)?其實(shí)優(yōu)化的方向還有一部分是去增大特征的長度去了。

我在 MNIST 數(shù)據(jù)集上做過實(shí)驗(yàn),以下圖片分別為 m=1 和 m=4 時(shí)的特征可視化,注意坐標(biāo)的尺度,就能驗(yàn)證上述觀點(diǎn)。

然而特征的長度在我們使用模型的時(shí)候是沒有幫助的。這就造成了 training 跟 test 之間目標(biāo)不一致,按照 Normface 作者原話說就是存在一個(gè) gap。

于是 Normface 的核心思想就出來了:為何在訓(xùn)練的時(shí)候不把特征也做歸一化處理?相應(yīng)的損失函數(shù)如下:

其中 W 是歸一化的權(quán)重,f_i 是歸一化的特征,兩個(gè)點(diǎn)積就是角度余弦值。參數(shù) s 的引入是因?yàn)閿?shù)學(xué)上的性質(zhì),保證了梯度大小的合理性,原文中有比較直觀的解釋,這里不是重點(diǎn)。

如果沒有 s 訓(xùn)練將無法收斂。關(guān)于 s 的設(shè)置,可以把它設(shè)為可學(xué)習(xí)的參數(shù)。但是作者更推薦把它當(dāng)做超參數(shù),其值根據(jù)分類類別多少有相應(yīng)的推薦值,這部分原文 appendix 里有公式。

文章中還有指出一點(diǎn),FaceNet 中歸一化特征的歐式距離,和余弦距離其實(shí)是統(tǒng)一的。還有關(guān)于權(quán)重與特征的歸一化,這篇文章有很多有意思的探討,有興趣的讀者建議閱讀原文。

AM-softmax [11] / CosFace [12]

這兩篇文章是同一個(gè)東西。Normface 用特征歸一化解決了 Sphereface 訓(xùn)練和測試不一致的問題。但是卻沒有了 margin 的意味。AM-softmax 可以說是在 Normface 的基礎(chǔ)上引入了 margin。直接上損失函數(shù):

其中這里的權(quán)重和特征都是歸一化的。

直觀上來看,cos(θ)-m 比 cos(θ) 更小,所以損失函數(shù)值比 Normface 里的更大,因此有了 margin 的感覺。

m 是一個(gè)超參數(shù),控制懲罰的力度,m 越大,懲罰越強(qiáng)。作者推薦 m=0.35。這里引入 margin 的方式比 Sphereface 中的‘溫柔’,不僅容易復(fù)現(xiàn),沒有很多調(diào)參的 tricks,效果也很好。

ArcFace[13]

與 AM-softmax 相比,區(qū)別在于 Arcface 引入 margin 的方式不同,損失函數(shù):

乍一看是不是和 AM-softmax一樣?注意 m 是在余弦里面。文章指出基于上式優(yōu)化得到的特征間的 boundary 更為優(yōu)越,具有更強(qiáng)的幾何解釋。

然而這樣引入 margin 是否會有問題?仔細(xì)想 cos(θ+m) 是否一定比 cos(θ) 小?

最后我們用文章中的圖來解釋這個(gè)問題,并且也由此做一個(gè)本章 Margin-based Classification 部分的總結(jié)。

▌小結(jié)

這幅圖出自于 Arcface,橫坐標(biāo)為 θ 為特征與類中心的角度,縱坐標(biāo)為損失函數(shù)分子指數(shù)部分的值(不考慮 s),其值越小損失函數(shù)越大。

看了這么多基于分類的人臉識別論文,相信你也有種感覺,大家似乎都在損失函數(shù)上做文章,或者更具體一點(diǎn),大家都是在討論如何設(shè)計(jì)上圖的 Target logit-θ 曲線。

這個(gè)曲線意味著你要如何優(yōu)化偏離目標(biāo)的樣本,或者說,根據(jù)偏離目標(biāo)的程度,要給予多大的懲罰。兩點(diǎn)總結(jié):

1. 太強(qiáng)的約束不容易泛化。例如 Sphereface 的損失函數(shù)在 m=3 或 4 的時(shí)候能滿足類內(nèi)最大距離小于類間最小距離的要求。此時(shí)損失函數(shù)值很大,即 target logits 很小。但并不意味著能泛化到訓(xùn)練集以外的樣本。施加太強(qiáng)的約束反而會降低模型性能,且訓(xùn)練不易收斂。

2. 選擇優(yōu)化什么樣的樣本很重要。Arcface 文章中指出,給予 θ∈[60° , 90°] 的樣本過多懲罰可能會導(dǎo)致訓(xùn)練不收斂。優(yōu)化 θ ∈ [30° , 60°] 的樣本可能會提高模型準(zhǔn)確率,而過分優(yōu)化 θ∈[0° , 30°] 的樣本則不會帶來明顯提升。至于更大角度的樣本,偏離目標(biāo)太遠(yuǎn),強(qiáng)行優(yōu)化很有可能會降低模型性能。

這也回答了上一節(jié)留下的疑問,上圖曲線 Arcface 后面是上升的,這無關(guān)緊要甚至還有好處。因?yàn)閮?yōu)化大角度的 hard sample 可能沒有好處。這和 FaceNet 中對于樣本選擇的 semi-hard 策略是一個(gè)道理。

▌Margin based classification 延伸閱讀

1. A discriminative feature learning approach for deep face recognition [14]

提出了 center loss,加權(quán)整合進(jìn)原始的 softmax loss。通過維護(hù)一個(gè)歐式空間類中心,縮小類內(nèi)距離,增強(qiáng)特征的 discriminative power。

2. Large-margin softmax loss for convolutional neural networks [10]

Sphereface 作者的前一篇文章,未歸一化權(quán)重,在 softmax loss 中引入了 margin。里面也涉及到 Sphereface 的訓(xùn)練細(xì)節(jié)。

注:思路二由陳超撰寫

03

實(shí)驗(yàn)及細(xì)節(jié)

基于前兩章的知識,我在 lfw 上取得了 99.47% 的結(jié)果,這個(gè)結(jié)果訓(xùn)練在 Vggface2 上,未與 lfw 去重,也沒經(jīng)歷很痛苦的調(diào)參過程,算是 AM-softmax 損失函數(shù)直接帶來的收益吧。

過程中踩了很多坑,這一章將把前段時(shí)間的實(shí)驗(yàn)結(jié)果和心得做一個(gè)整理,此外也將回答絕大部分工程師在做人臉識別時(shí)最關(guān)心的一些問題。やりましょう!

項(xiàng)目地址:

https://github.com/Joker316701882/Additive-Margin-Softmax

包含代碼可以復(fù)現(xiàn)所有實(shí)驗(yàn)結(jié)果

一個(gè)標(biāo)準(zhǔn)的人臉識別系統(tǒng)包含這幾個(gè)環(huán)節(jié):人臉檢測及特征點(diǎn)檢測->人臉對齊->人臉識別。

▌人臉檢測 & Landmark檢測

目前最流行的人臉及 Landmark 檢測是 MTCNN [7],但是 MTCNN 一方面偶爾檢測不到 face,一方面 Landmark 檢測不夠精準(zhǔn)。這兩點(diǎn)都會給后續(xù)的對齊和識別帶來不利影響。

另外在 COCO Loss [8] 論文里提到:好的檢測和對齊方法,僅用 softmax 就能達(dá)到 99.75%,秒殺目前大多數(shù)最新論文的結(jié)果。COCO Loss 的 Github issue [16] 里提到了更多細(xì)節(jié)。

此外,因?yàn)?alignment 算法性能的區(qū)別,2017 年及以后的論文更加注重相對實(shí)驗(yàn)結(jié)果的比較,以排除 alignment 算法引入的優(yōu)劣勢,方便更直觀比較各家的人臉識別算法,lfw 上輕松能達(dá)到 99% 以上也是現(xiàn)在更傾向于采用相對結(jié)果的原因。

▌人臉對齊

人臉對齊做的是將檢測到的臉和 Landmark 通過幾何變換,將五官變換到圖中相對固定的位置,提供較強(qiáng)的先驗(yàn)。

廣泛使用的對齊方法為 Similarity Transformation。更多對其變換方法和實(shí)驗(yàn)可以參考這篇知乎文章 [17]。

作者代碼實(shí)現(xiàn):

https://github.com/Joker316701882/Additive-Margin-Softmax/blob/master/align/align_lfw.py

值得探討的一個(gè)問題是:人臉檢測和對齊真的有必要嗎?現(xiàn)實(shí)應(yīng)用中常出現(xiàn)人臉 Landmark 無法檢測的情況,沒有 Landmark 就無法使用 Similarity Transoformation。

針對這個(gè)問題也有相關(guān)研究,通過使用 Spatial Transform Network [9] “讓網(wǎng)絡(luò)自己學(xué)習(xí) alignment”,論文參考 End-to-End Spatial Transform Face Detection and Recognition。這方面的研究進(jìn)展還不充分,所以實(shí)際系統(tǒng)中多數(shù)情況下還是使用了 detection->alignment 這套流程。

▌人臉識別

可以說人臉識別的項(xiàng)目中絕大部分問題都是人臉檢測和對齊的問題。識別模型之間的差距倒沒有那么明顯。不過訓(xùn)練 AM-softmax 過程中依然碰到了些值得注意的問題。

Spheraface 里提出的 Resface20,AM-softmax 中也同樣使用,一模一樣復(fù)現(xiàn)情況下在 lfw 上只能達(dá)到 94%。

TensorFlow 中能擬合的情況為如下配置:

Adam, no weight decay, use batch normalization.

對應(yīng)原文配置:

Momentum, weight decay, no batch normalization.

以及在實(shí)驗(yàn)中發(fā)現(xiàn)的: 除了 Adam 以外的任何一個(gè) optimizer 都達(dá)不到理想效果,這可能是不同框架底層實(shí)現(xiàn)有所區(qū)別的原因,Sphereface,、AM-softmax都是基于 Caffe,本文所有實(shí)驗(yàn)全使用 TensorFlow,結(jié)論有區(qū)別也算正常。

另一點(diǎn),Sandberg FaceNet 中的 resnet-inception-v1 搬過來套用 AM-softmax 在 lfw 上的結(jié)果達(dá)不到 97%,這是過程中不太理解的點(diǎn)。

從其他論文里看,如果 loss 選的沒問題,那諸如 resnet-inception,不同深度的 Resnet,甚至 Mobile-net,Squeezenet 等結(jié)構(gòu)的表現(xiàn)也不該有明顯差距(AM-softmax 的情況下至少也該達(dá)到99%)。

此外,直接套用 Arcface 也無法擬合,需要進(jìn)一步實(shí)驗(yàn)。

最后,關(guān)于 Sandberg 的 code 中一個(gè)值得關(guān)注的點(diǎn),他將 train_op 定義在了 facenet.train() 函數(shù)里,仔細(xì)閱讀這個(gè)函數(shù)會發(fā)現(xiàn),Sandberg 的代碼中所有網(wǎng)絡(luò)參數(shù)并不是采用每次更新梯度后的值,而是采用滑動(dòng)平均值作為網(wǎng)絡(luò)實(shí)際的參數(shù)值。

也正是因?yàn)檫@個(gè)原因,解釋了 Sandberg 在 batch_norm 的參數(shù) configuration中,甚至沒把”is_training”的值交給 placeholder,而是默認(rèn) train 和 test 時(shí)都采用 local statistics 的模式。

如果不是因?yàn)樗袇?shù)都用了滑動(dòng)平均,那么這種使用 batch_norm 的做法其實(shí)是錯(cuò)誤的。Sandberg 這樣實(shí)現(xiàn)的好壞只能交給實(shí)驗(yàn)結(jié)果來評判了。

如果想正常使用網(wǎng)絡(luò)參數(shù)和 batch norm,而不是用滑動(dòng)平均參數(shù)和全程開著“is_training”,只需要將 facenet.train() 函數(shù)替換成普通的 Optimizer,然后將 batch_norm的“is_training”交給 placeholder 處理,詳細(xì)可以參考我的 AM-softmax 實(shí)現(xiàn)。

感謝大家堅(jiān)持閱讀到最后,以 TensorBoard 的 plot 作為結(jié)尾吧!

原文標(biāo)題:如何走近深度學(xué)習(xí)人臉識別?你需要這篇超長綜述 | 附開源代碼

文章出處:【微信號:AI_Thinker,微信公眾號:人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

  • 標(biāo)簽: