單樣本學習(One shot learning)是一項分類任務,用一個或幾個樣本對未來的許多樣本進行分類。
這是人臉識別領域中常見的任務,例如人臉識別和人臉認證,在這些任務中,必須根據給定一張或幾張樣本照片中的不同面部表情、光照條件、首飾和髮型對人臉進行正確的分類。
現代人臉識別系統通過學習豐富的低維特徵表示方法(稱為人臉嵌入)來解決通過人臉識別進行單樣本學習的問題。這種低維特徵表示可以很容易地計算出人臉,並在驗證和識別任務中進行比較。
從歷史上來看,嵌入是通過使用孿生網絡(Siamese network)來解決單樣本學習問題的。通過對具有對比損失(Comparative Loss)函數的孿生網絡進行訓練,獲得了更好的性能,後來導致了 Google 在 FaceNet 系統中使用三重損失(Triplet Loss)函數,這個函數在基準人臉識別任務取得了當時最先進的結果。
在本文中,我將闡述人臉識別中單樣本學習中的挑戰,以及如何使用對比損失和三重損失函數來學習高質量的人臉嵌入。
讀完本文後,你將會學到:
單樣本學習是一種分類任務,對給定每個類的一個(或幾個)樣本來進行許多預測,而人臉識別就是單樣本學習的一個例子。
孿生網絡是解決單樣本學習的一種方法,通過比較已知樣本和候選樣本的學習特徵向量。
對比損失函數和後來的三重損失函數可以用來學習高質量的人臉嵌入向量,為現代人臉識別系統提供了基礎。
言歸正傳。
本文將分四個部分:
單樣本學習與人臉識別
用於單樣本學習的孿生網絡
用於降維的對比損失
用於學習人臉嵌入的三重損失
通常,分類包括對給出每個類的多個樣本的情況下進行模型擬合,然後使用擬合模型對每個類的許多樣本進行預測。
例如,我們可能對三種不同物種的植物進行了數千次測量。模型可以適用於這些樣本,從給定物種的測量結果之間的共性進行歸納,並對比不同物種測量結果之間的差異。
單樣本學習是一種分類任務,其中每個類都有一個樣本(或極少數樣本),用於準備模型訓練,然後模型反過來又必須對未來的許多未知樣本進行預測。
在單樣本學習的情況下,向算法提供了一個對象類的單一樣本。
——《Knowledge transfer in learning to recognize visual ibjects classes》,2006 年
對人類來說,這是一個相對容易的問題。例如,一個人可能有一次見過一輛法拉利跑車,那麼在未來,他能夠在新的情況下,比如在路上,在電影裡,在圖書中以及在不同的光照和顏色的情況下,能夠認出法拉利跑車。
人類在幾乎沒有監督的情況下學習新概念,例如,一個小孩可以從書中的一張圖片概括出「長頸鹿」的概念,但我們目前最好的深度學習系統就需要成百上千的樣本才能學會。
《Matching Network for One Shot Learning》,2017 年
單樣本學習與零樣本學習相關,但又有所不同。
這應該區別於零樣本學習,在零樣本學習中,模型並不能查看目標類的任何樣本。
《Siamese Neural Networks for One-shot Image Recognition》,2015 年
人臉識別任務提供了單樣本學習的樣本。
具體來說,在人臉識別的情況下,模型或系統可能只有一個或幾個給定人臉的樣本,並且必須從新照片中正確識別出該人,包括在表情、髮型、光照和首飾等都有所變化的情況下。
在人臉認證的情況下,模型或系統可能只有一個人臉的樣本記錄,並且必須正確地驗證該人的新照片,也許每天都要這樣。
因此,人臉識別是單樣本學習的常見例子之一。
目前已推廣用於單樣本學習的網絡是孿生網絡。
孿生網絡是由兩個並行神經網絡構成的架構,每個神經網絡採用不同的輸入,其輸出被組合起來以提供一些預測。
這是專為驗證任務而設計的網絡,最早由 Jane Bromley 等人在 2005 年題為《使用孿生時延神經網絡進行籤名認證》(《Signature Verification using a Siamese Time Delay Neural Network》)的論文中首次提出用於籤名認證。
該算法基於一種新的人工神經網絡,稱為」孿生「神經網絡。這個網絡由在其輸出端連接的兩個相同的子網絡組成。
——《Signature Verification using a 「Siamese」 Time Delay Neural Network》,2005 年
使用兩個相同的網絡,一個採取此人的已知籤名,另一個獲取候選籤名。將兩個網絡的輸出組合起來進行評分,以辨明候選籤名是真實籤名還是偽造籤名。
驗證包括將提取的特徵向量與用於籤名者存儲的特徵向量進行比較。接受比所選閾值更接近該存儲表示的籤名,所有其他籤名將被視為偽造而拒絕。
——《Signature Verification using a 「Siamese」 Time Delay Neural Network》,2005 年
用於籤名認證的孿生網絡示例。摘自:《Signature Verification using a 「Siamese」 Time Delay Neural Network》
孿生網絡是最近才開始被使用的,在 Gregory Koch 等人 2015 年發表的題為《用於一次性圖像識別的孿生神經網絡》(《Siamese Neural Networks for One-Shot Image Recognition》)中,將深度卷積網絡用於並行圖像輸入。
首先訓練深度 CNN 來區分每個類的樣本。其思想是讓模型學習能夠有效地從輸入圖像中提取抽象特徵的特徵向量。
用於訓練孿生網絡的圖像驗證示例。摘自:《Siamese Neural Networks for One-Shot Image Recognition》
然後,這些模型重新用於驗證,以預測新樣本是否與每個類的模板相匹配。
具體來說,每個網絡產生輸入圖像的特徵向量,然後使用 L1 距離和 sigmoid 激活進行比較。將該模型應用於計算機視覺中使用的手寫字符數據集的基準測試。
孿生網絡的意義在於,它通過學習特徵表示(特徵向量)來解決單樣本學習的方法,然後將特徵表示進行比較以用於驗證任務。
Yaniv Taigman 等人在 2014 年發表的論文《DeepFace:彌合人臉認證與人類水平的差距》(《DeepFace: Closing the Gap to Human-Level Performance in Face Verification》)中,描述了使用孿生網絡開發的人臉識別系統的一個例子。
他們的方法包括,首先訓練模型進行人臉識別,然後移除模型的分類器層,將激活作為特徵向量,然後計算並比較兩種不同的人臉進行人臉認證。
我們還測試了一種端到端的度量學習方法,稱為孿生網絡:一旦學習完畢,人臉識別網絡(沒有頂層)將被複製兩次(每個輸入圖像一次),這些特徵將被用於直接預測兩個輸入圖像是否屬於同一個人。
——《DeepFace: Closing the Gap to Human-Level Performance in Face Verification》,2014 年
學習像圖像這樣的複雜輸入的向量表示就是降維的一個例子。
降維目的是將高維數據轉換為低維表示,以便將類似的輸入對象映射到流形上的臨近點。
——《Dimensionality Reduction by Learning an Invariant Mapping》,2006 年
有效降維的目標是學習一種新的低維表示,它保留了輸入的結構,使得輸出向量之間的距離能夠有意義地捕捉到輸入中的差異。然而,向量必須捕獲到輸入中的不變特徵。
問題是在給定輸入空間中的樣本之間的鄰域關係的情況下,找到一個將高維輸入模式映射到低維輸出的函數。
——《Dimensionality Reduction by Learning an Invariant Mapping》,2006 年
降維是孿生網絡用於解決單樣本學習的方法。
Raia Hadsell 等人在 2006 年發表的一篇題為《學習不變映射的降維》(《Dimensionality Reduction by Learning an Invariant Mapping》)論文中,探討了利用具有圖像數據的卷積神經網絡進行孿生網絡降維,並提出了通過對比損失對模型進行訓練的方法。
與在訓練數據集中的所有輸入樣本中評估模型性能的其他損失函數不同,對比損失是在成對的輸入之間計算的,例如提供給孿生網絡的兩個輸入之間。
成對的樣本被提供給網絡,損失函數根據樣本的類別是相同的還是不同對模型進行不同的懲罰。具體來說,如果類是相同的,損失函數就鼓勵模型輸出更為相似的特徵向量,而如果類不同的話,那麼損失函數就會鼓勵模型輸出不太相似的特徵向量。
對比損失需要人臉圖像對,然後將成對的正類拉到一起,並拋棄成對的負類。…… 然而,對比損失的主要問題是裕度參數(margin parameters)往往難以選擇。
——《Deep Face Recognition: A Survey》,2018 年
損失函數要求選擇一個裕度(margin),用於確定來自不同對的樣本進行懲罰的極限。選擇這個裕度需仔細考慮,這是使用損失函數的一個缺點。
相似(紅線)和不同(藍線)對的對比損失計算圖。摘自《Dimensionality reduction by learning an invariant mapping》。
對比損失可用來訓練人臉識別系統,特別是用於人臉認證的任務。此外,通過在計算損失和更新模型之前順序提供成對的樣本並保存預測的特徵向量,可以在不需要孿生網絡架構中使用的並行模型的情況下實現這一點。
例如,DeepID2 和後續系統(DeepID2+、DeepID3),它們使用深度卷積神經網絡,但並不是孿生網絡架構,並在基準人臉識別數據集上實現了最先進的結果。
驗證信號可直接對 DeepID2 進行正規化,從而有效減少人內變化(intra-personal variations)。常用的約束包括 L1/L2 範數和餘弦相似度。我們採用以下基於 L2 範數的損失函數,它最初是由 Hadsell 等人提出的,用於降維。
——《Deep Learning Face Representation by Joint Identification-Verification》,2014 年
對比損失的概念可以進一步擴展,從兩個樣本擴展到三個樣本,稱為三重損失。
Google 的 Florian Schroff 等人在 2015 年發表的論文《FaceNet:人臉識別和聚類的統一嵌入》(《FaceNet: A Unified Embedding for Face Recognition and Clustering》)中介紹了三重損失。
三重損失不是基於兩個樣本來計算損失,而是包含一個錨示例(anchor example)和一個正類或匹配的樣本(相同類)和一個負類或不匹配的樣本(不同類)。
損失函數對模型進行懲罰,減小匹配樣本之間的距離,增加了非匹配樣本之間的距離。
它需要人臉的三元組,然後它將錨和相同身份的正類樣本之間的距離進行最小化,並將錨與不同身份的負類樣本之間的距離進行最大化。
——《Deep Face Recognition: A Survey》,2018 年
結果就是一個特徵向量,被稱為「人臉嵌入」,它具有一個有意義的歐幾裡得關係,使得相似的人臉產生的嵌入距離很小(例如,可以進行聚類),並且同一個人臉的不同樣本產生非常小的嵌入,允許對其他身份進行驗證和區分。
這種方法被用做 FaceNet 系統的基礎,該系統在基準人臉識別數據集上獲得了當時最先進的結果。
本文提出了一種直接學習人臉圖像到進奏歐幾裡得空間的映射系統,該系統稱為 FaceNet,其中距離直接對應於人臉相似度的度量。
——《Facenet: A unified embedding for face recognition and clustering》,2015 年
用來訓練模型的三元組都是精心選擇的。
三元組很容易,只會造成很小的損失,並不能有效地更新模型。相反,我們尋求的是硬三元組,以鼓勵能夠對模型和預測的人臉嵌入進行更改。
選擇使用哪個三元組非常重要,在課程學習的啟發下,我們提出了一種新的在線負類樣本挖掘策略,該策略保證了在網絡訓練過程中三元組的學習難度能夠不斷增加。
——《Facenet: A unified embedding for face recognition and clustering》,2015 年
三元組以在線方式生成,並找到所謂的硬正類(匹配)和硬負類(不匹配)的情況,用於批量損失的估計。
選擇活躍的硬三元組非常重要,因為這些都是積極的,可有助於改進模型。
——《Facenet: A unified embedding for face recognition and clustering》,2015 年
直接訓練人臉嵌入的方法,例如通過三重損失,以及使用嵌入作為戀人識別和人臉認證模型(如 FaceNet)的記住,是現代和最先進的人臉識別方法的基礎。
……對於從零開始訓練的模型以及預訓練模型,使用三重損失的變體來執行端到端深度度量學習,比大多數其他已發表的方法都有很大的優勢。
——《In Defense of the Triplet Loss for Person Re-Identification》,2017 年
如果你希望深入了解,本小節提供了有關該主題的更多資源。
論文
《Knowledge transfer in learning to recognize visual objects classes》,2006
http://vision.stanford.edu/documents/Fei-Fei_ICDL2006.pdf
《Matching Networks for One Shot Learning》,2017
http://papers.nips.cc/paper/6385-matching-networks-for-one-shot-learning)
《Siamese Neural Networks for One-shot Image Recognition》,2015
https://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf
《Signature Verification using a 「Siamese」 Time Delay Neural Network》,2005
http://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf)
《DeepFace: Closing the Gap to Human-Level Performance in Face Verification》,2014
https://ieeexplore.ieee.org/document/6909616
《Dimensionality Reduction by Learning an Invariant Mapping》,2006
https://ieeexplore.ieee.org/abstract/document/1640964
《Deep Face Recognition: A Survey》,2018
https://arxiv.org/abs/1804.06655
《Deep Learning Face Representation by Joint Identification-Verification》,2014
https://arxiv.org/abs/1406.4773
《Facenet: A unified embedding for face recognition and clustering》,2015
https://www.cv-foundation.org/openaccess/content_cvpr_2015/html/
《In Defense of the Triplet Loss for Person Re-Identification》,2017
https://arxiv.org/abs/1703.07737
文章
《One-shot learning, Wikipedia》
https://en.wikipedia.org/wiki/One-shot_learning
《Siamese Network, Wikipedia》
https://en.wikipedia.org/wiki/Siamese_network
《Triplet loss, Wikipedia》
https://en.wikipedia.org/wiki/Triplet_loss
英文原文:
https://machinelearningmastery.com/one-shot-learning-with-siamese-networks-contrastive-and-triplet-loss-for-face-recognition