天天看點

FaceNet論文翻譯

《FaceNet: A Unified Embedding for Face Recognition and Clustering》

Abstract

盡管最近在人臉識别領域取得了重大進展[10,14,15,17],但是大規模有效地實施面部驗證和識别對目前方法提出了嚴峻挑戰。在本文中,我們提出了一個名為FaceNet的系統,它直接學習從面部圖像到緊湊歐幾裡德空間的映射,其中距離直接對應于面部相似性的度量。生成此空間後,可以使用FaceNet嵌入作為特征向量的标準技術輕松實作面部識别,驗證和聚類等任務。

我們的方法使用深度卷積網絡訓練直接優化嵌入本身,而不是像以前的深度學習方法那樣的中間瓶頸層。為了訓練,我們使用使用新穎的線上三重挖掘方法生成大緻對齊的比對/非比對面部更新檔的三元組。我們的方法的優勢是更具代表性的效率:我們使用每個面隻有128個位元組來獲得最先進的人臉識别性能。

關于廣泛使用的野外Labeled Faces(LFW)資料庫的資料,我們的系統獲得了99.63%的新記錄準确率。在YouTube Faces上它收到95.12%。與兩個資料集上的最佳公布結果[15]相比,我們的系統将錯誤率降低了30%。

1. Introduction

在本文中,我們提出了一個統一的面部驗證系統(這是同一個人),識别(誰是這個人)和聚類(在這些面孔中尋找普通人)。我們的方法基于使用深度卷積網絡學習每個圖像的歐幾裡德嵌入。訓練網絡使得嵌入空間中的平方L2距離直接對應于面部相似性:同一人的面部具有小距離并且不同人的面部具有大距離。

一旦産生了這種嵌入,則上述任務變得直截了當:面部驗證僅涉及對兩個嵌入之間的距離進行門檻值處理;識别成為k-NN分類問題;并且可以使用諸如k均值或凝聚聚類之類的現有技術來實作聚類。

先前基于深度網絡的面部識别方法使用在一組已知面部身份上訓練的分類層[15,17],然後采用中間瓶頸層作為用于概括超出訓練中使用的身份集合的識别的表示。這種方法的缺點是它的間接性和效率低下:人們不得不希望瓶頸表現能夠很好​​地概括為新面孔;并且通過使用瓶頸層,每個面的表示大小通常非常大(1000的次元)。最近的一些工作[15]使用PCA降低了這種次元,但這是一種線性轉換,可以在網絡的一個層中輕松學習。

與這些方法相比,FaceNet直接将其輸出訓練為使用基于LMNN的基于三重損耗函數的緊湊128-D嵌入[19]。我們的三元組由兩個比對的面部縮略圖和一個不比對的面部縮略圖組成,并且損失旨在将正對與負對分開距離邊距。縮略圖是面部區域的緊密裁剪,除了縮放和平移之外,沒有2D或3D對齊。

選擇使用哪些三元組對于實作良好的表現非常重要,并且受課程學習的啟發[1],我們提出了一種新穎的線上負樣本挖掘政策,確定在網絡訓練時不斷增加三元組的難度。為了提高聚類精度,我們還探索了難正例挖掘技術,該技術鼓勵球形聚類用于嵌入單個人。

作為我們的方法可以處理的令人難以置信的可變性的說明,請參見圖1。顯示了來自PIE [13]的圖像對,這些圖像對以前被認為對于面部驗證系統來說非常困難。

FaceNet論文翻譯

圖1.照明和姿勢不變性。姿勢和照明是人臉識别中長期存在的問題。該圖顯示了FaceNet在不同姿勢和照明組合中相同和不同人的面對之間的輸出距離。距離0.0表示面相同,4.0表示相反的光譜,兩個不同的身份。您可以看到1.1的門檻值會正确地對每一對進行分類。

本文其餘部分的概述如下:在第2節中,我們回顧了該領域的文獻; 第3.1節定義了三重态損失,第3.2節描述了我們新穎的三重态選擇和訓練程式; 在3.3節中,我們描述了所使用的模型架構。最後在第4節和第5節中,我們提供了嵌入嵌入的一些定量結果,并定性地探索了一些聚類結果。

2. Related Work

與其他最近采用深度網絡的工作[15,17]類似,我們的方法是一種純粹的資料驅動方法,它直接從面部像素中學習它的表示。我們使用标記面的大型資料集來獲得姿勢,光照和其他變化條件的适當不變性,而不是使用工程特征。

在本文中,我們探讨了最近在計算機視覺社群中取得巨大成功的兩種不同的深度網絡架構。兩者都是深度卷積網絡[8,11]。第一種架構基于Zeiler&Fergus [22]模型,該模型由多個交錯的卷積層,非線性激活,局部響應歸一化和最大彙聚層組成。我們另外添加了幾個受[9]工作啟發的1×1×d卷積層。第二種架構基于Szegedy等人的Inception模型。最近被用作ImageNet 2014的獲勝方法[16]。這些網絡使用混合層,并行運作多個不同的卷積和池化層,并連接配接它們的響應。我們發現這些模型可以将參數數量減少多達20倍,并且有可能減少可比性能所需的FLOPS數量。

有大量的面部驗證和識别工作。審查它超出了本文的範圍,是以我們将僅簡要讨論最相關的最新工作。

[15,17,23]的工作都采用了多階段的複雜系統,它将深度卷積網絡的輸出與PCA相結合,用于降維,SVM用于分類。

Zhenyao等。 [23]采用深度網絡将面部“扭曲”成規範的正面視圖,然後學習CNN,将每個面部分類為屬于已知身份。對于人臉驗證,使用網絡輸出上的PCA和一組SVM。

Taigman等[17]提出了一種多階段方法,将面部與一般的三維形狀模型對齊。訓練多級網絡以執行超過四千個身份的面部識别任務。作者還試驗了一個所謂的連體網絡(Siamese network),他們直接優化了兩個面部特征之間的L1距離。它們在LFW上的最佳性能(97.35%)源于使用不同比對和顔色通道的三個網絡的集合。使用非線性SVM組合這些網絡的預測距離(基于α2核心的非線性SVM預測)。

Sun等人[14,15]提出了一種緊湊且是以相對簡易的計算網絡。他們使用這些網絡中的25個網絡,每個網絡都在不同的面部更新檔上運作。對于他們在LFW上的最終表現(99.47%[15]),作者組合了50個響應(正常和翻轉)。采用PCA和聯合貝葉斯模型[2],它們有效地對應于嵌入空間中的線性變換。他們的方法不需要明确的2D / 3D對齊。通過使用分類和驗證丢失的組合來訓練網絡。驗證損失類似于我們采用的三元組損失[12,19],因為它最小化了相同身份的面部之間的L2距離,并在不同身份的面部距離之間實施了邊界。主要差別在于僅比較成對圖像,而三重态損失促使相對距離限制。

Wang等人研究了與此處使用的類似的損失。 [18]用于通過語義和視覺相似性對圖像進行排序。

3. Method

FaceNet使用深度卷積網絡。我們讨論了兩種不同的核心架構:Zeiler&Fergus [22]式網絡和最近的Inception [16]型網絡。這些網絡的細節在3.3節中描述。

鑒于模型細節,并将其視為黑盒子(見圖2),我們方法中最重要的部分在于整個系統的端到端學習。為此,我們采用三元組損失,直接反映了我們想要在面部驗證,識别和聚類中實作的目标。也就是說,我們努力嵌入f(x),從圖像x到特征空間 R d \mathbb{R}^{d} Rd,使得相同身份的所有面之間的平方距離(與成像條件無關)很小,而來自一對不同身份的面部圖像之間的平方距離很大。

FaceNet論文翻譯

圖2.模型結構。我們的網絡由批量輸入層和深度CNN組成,然後進行L2歸一化,進而實作人臉嵌入。接下來是訓練期間的三聯體損失。

雖然我們沒有直接比較其他損失,例如使用成對的正面和負面的那個,如[14] Eq(2)。中所使用的那樣。我們認為三聯體損失更适合于面部驗證。動機是[14]的損失鼓勵一個身份的所有面孔被“投射”到一個嵌入空間中的單個點上。然而,三重态損失試圖在從一個人到所有其他面部的每對面部之間強制執行邊緣。這允許一個身份的面部生活在歧管上,同時仍然強制距離并是以可以與其他身份相差別。

以下部分描述了這種三重态損失以及如何有效地大規模學習它。

3.1. Triplet Loss

嵌入由f(x)∈Rd表示。它将圖像x嵌入到d維歐幾裡德空間中。另外,我們将這種嵌入限制在d維超球面上,即 ∥ f ( x ) ∥ 2 = 1 \|f(x)\|_{2}=1 ∥f(x)∥2​=1. 這種損失在[19]中在最近鄰分類的背景下被激發。在這裡,我們希望確定特定人的圖像 x i a x_{i}^{a} xia​(錨)比任何其他人的任何圖像 x i n x_{i}^{n} xin​(負)更接近同一人的所有其他圖像 x 1 p x_{1}^{p} x1p​(正)。這在圖3中可視化。

FaceNet論文翻譯

圖3.三聯體損失最小化錨和正例之間的距離,兩者具有相同的身份,并最大化錨和不同身份的負例之間的距離。

是以我們想要:

∥ x 1 a − x i p ∥ 2 2 + α &lt; ∥ x i a − x i n ∥ 2 2 , ∀ ( x t a , x i p , x i n ) ∈ T . ( 1 ) \left\|x_{1}^{a}-x_{i}^{p}\right\|_{2}^{2}+\alpha&lt;\left\|x_{i}^{a}-x_{i}^{n}\right\|_{2}^{2}, \forall\left(x_{t}^{a}, x_{i}^{p}, x_{i}^{n}\right) \in \mathcal{T} . (1) ∥x1a​−xip​∥22​+α<∥xia​−xin​∥22​,∀(xta​,xip​,xin​)∈T.(1)

α \alpha α是正負對之間強制執行的餘量。 T T T是訓練集中所有可能的三元組的集合,并且具有基數N.

最小化的損失是L =

∑ i N [ ∥ f ( x i a ) − f ( x i p ) ∥ 2 2 − ∥ f ( x i a ) − f ( x i n ) ∥ 2 2 + α ] + \sum_{i}^{N}\left[\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{p}\right)\right\|_{2}^{2}-\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{n}\right)\right\|_{2}^{2}+\alpha\right]_{+} i∑N​[∥f(xia​)−f(xip​)∥22​−∥f(xia​)−f(xin​)∥22​+α]+​

生成所有可能的三元組将造成許多容易滿足的三元組(即滿足方程(1)中的限制)。這些三元組不會對訓練有所貢獻,導緻收斂速度變慢,因為它們仍會通過網絡傳遞。選擇活躍的難三元組至關重要,是以可以有助于改進模型。以下部分讨論了我們用于三元組選擇的不同方法。

3.2. Triplet Selection

為了確定快速收斂,在公式(1)中選擇違反方程式中的三元組限制的三元組是至關重要的。這意味着,給定 x 1 a x_{1}^{a} x1a​,我們想要選擇一個 x i p x_{i}^{p} xip​(硬正),使得 arg ⁡ max ⁡ x i p ∥ f ( x i a ) − f ( x i p ) ∥ 2 2 \arg \max _{x_{i}^{p}}\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{p}\right)\right\|_{2}^{2} argmaxxip​​∥f(xia​)−f(xip​)∥22​ 最大和 類似的 x 1 n x_{1}^{n} x1n​(硬陰性)使得 argmin ⁡ x n ∥ f ( x t a ) − f ( x i n ) ∥ 2 2 \operatorname{argmin}_{x^{n}}\left\|f\left(x_{t}^{a}\right)-f\left(x_{i}^{n}\right)\right\|_{2}^{2} argminxn​∥f(xta​)−f(xin​)∥22​ 最小。

在整個訓練集中計算argmin和argmax是不可行的。此外,它可能導緻訓練不佳,因為錯誤标記和不良成像的面孔将主導硬性正例和反例。有兩個明顯的選擇可以避免這個問題:

  • 使用最新的網絡檢查點并在資料子集上計算argmin和argmax,每n步離線生成三元組。
  • 線上生成三元組。這可以通過從小批量中選擇硬正/負樣本來完成。

在這裡,我們專注于線上生成和在幾千範例的順序使用mini-batch,僅在mini-batch内計算argmin和argmax。

為了有效地表示錨定距離,需要確定每個小批量中存在任何一個身份的最小數量的樣本。在我們的實驗中,我們對訓練資料進行采樣,使得每個小批量每個身份選擇大約40個面部。另外,随機抽樣的負面被添加到每個小批量中。

我們不是挑選最難的,而是在小批量中使用所有錨定對,同時仍然選擇硬陰性。我們沒有對一小批中的硬錨陽性對與所有錨 - 陽對進行并列比較,但我們在實踐中發現所有錨定陽性方法在開始時更穩定并且訓練收斂得稍快一些。

我們還與線上生成一起探索了三聯體的離線生成,它可以允許使用更小的批量,但是實驗卻不是那麼證據确鑿的。

選擇最難的負片實際上可能在訓練早期導緻不良的局部最小值,特别是它可能導緻折疊模型(即 f ( x ) = 0 f(x)=0 f(x)=0)。為了減輕這種影響,選擇 x i n x_{i}^{n} xin​會有所幫助

∥ f ( x i a ) − f ( x i p ) ∥ 2 2 &lt; ∥ f ( x t a ) − f ( x i n ) ∥ 2 2 \left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{p}\right)\right\|_{2}^{2}&lt;\left\|f\left(x_{t}^{a}\right)-f\left(x_{i}^{n}\right)\right\|_{2}^{2} ∥f(xia​)−f(xip​)∥22​<∥f(xta​)−f(xin​)∥22​

我們将這些負面樣本稱為半硬(semi-hard),因為它們比正面樣本更遠離錨點,但仍然很難,因為平方距離接近錨定距離。這些負面影響在餘量 α \alpha α範圍内。

如前所述,正确的三元組選擇對于快速收斂至關重要。一方面,我們希望使用小型mini-bqtch,因為這些趨向于在随機梯度下降(SGD)期間改善收斂[20]。另一方面,實施細節使得數十到數百個樣本的批次更有效。然而,關于批量大小的主要限制是我們從小批量中選擇最難相關的三元組的方式。在大多數實驗中,我們使用的批量大小約為1,800個樣本。

3.3. Deep Convolutional Networks

在我們的所有實驗中,我們使用随機梯度下降(SGD)和标準反向支援[8,11]和AdaGrad [5]訓練CNN。在大多數實驗中,我們從0.05的學習率開始,我們降低以完成模型。模型從随機初始化,類似于[16],并在CPU群集上訓練1,000到2,000小時。在訓練500小時後,損失的減少(以及準确度的增加)急劇減慢,但額外的訓練仍然可以顯着提高性能。保證金?設定為0.2。

我們使用了兩種類型的體系結構,并在實驗部分中更詳細地探讨了它們的權衡。它們的實際差異在于參數和FLOPS的差異。根據應用,最佳型号可能會有所不同。例如在資料中心運作的模型,而在行動電話上運作的模型需要很少的參數,以便它可以适應記憶體。我們所有的模型都使用整流線性單元作為非線性激活函數。

第一類,如表1所示,在[9]中建議,在Zeiler&Fergus [22]架構的标準卷積層之間增加1×1×d卷積層,得到22層深的模型。它總共有1.4億個參數,每個圖像需要大約16億FLOPS。

我們使用的第二類是基于GoogLeNet風格的Inception模型[16]。這些模型的參數減少了20倍(約6.6M-7.5M),FLOPS減少了5倍。其中一些型号的尺寸(深度和過濾器數量)都大幅減少,是以可以在手機上運作。一,NNS1,具有26M參數,每個圖像僅需要220M FLOPS。另一個是NNS2,有4.3M參數和20M FLOPS。表2較長的描述了我們最大的網絡NN2。 NN3在架構上是相同的,但輸入尺寸減小了160x160。 NN4的輸入大小僅為96x96,進而大幅降低了CPU要求(NN2為285M FLOPS對1.6B)。除了減小的輸入尺寸之外,它在較高層中不使用5x5卷積,因為此時感受野已經太小。一般來說,我們發現5x5卷繞可以在整個過程中被移除,隻是精度略有下降。圖4比較了我們所有的模型。

繼續閱讀