用孿生網絡、對比損失和三重損失進行人臉識別的單樣本學習

2021-02-20 AI前線
AI 前線導讀: 孿生神經網絡(Siamese network)是一個有趣的名詞,Siamese 在英語中是 「孿生」、「連體」 的意思,簡單來說,Siamese network 就是 「連體的神經網絡」,神經網絡的 「連體」 是通過共享權值來實現的。孿生網絡的目標是尋找兩個可比較對象的相似程度(例如,籤名驗證、人臉識別等)。這個網絡有兩個相同的子網絡,兩個子網絡有著相同的參數和權重。單樣本學習算法的主要思想是,我們需要僅僅從少量的數據中就能學會一個對象分類。

更多優質內容請關注微信公眾號「AI 前線」(ID:ai-front)

單樣本學習(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

相關焦點

  • 深度人臉識別中不同損失函數的性能對比
    選自arXiv作者:Y Srivastava、V Murali、S R Dubey機器之心編譯參與:路、淑婷人臉識別是當前手機設備中使用最廣泛的生物識別特徵之一。而損失函數在訓練用於人臉識別的 CNN 過程中有重要作用。因此,本文對用於人臉識別的多種損失函數進行了性能對比。
  • 人臉識別中AlexNet網絡設計和改進方法研究
    但這個網絡較複雜,計算量大,訓練集通過驗證集測試的準 確率提升的太慢,人臉數據的損失值曲線和識別率曲線都存在振蕩問題。因此本文結合Cafe深度 學習框架中的AlexNet網絡結構進行改進,利用梯度下降法對批量的圖像數據進行特徵提取器和分 類器的訓練。
  • 孿生網絡入門(上) Siamese Net及其損失函數
    如果需要交流的話歡迎聯繫我,WX:cyx645016617所以這個孿生網絡入門,我想著分成上下兩篇,上篇也就是這一篇講解模型理論、基礎知識和孿生網絡獨特的損失函數;下篇講解一下如何用代碼來複線一個簡單的孿生網絡。
  • 【深度神經網絡 One-shot Learning】孿生網絡少樣本精準分類
    Lake等人也指出,人類可以在Omniglot 數據集 20類樣本上達到 95.5%的精度,僅僅比 HBPL高一點。在鑽牛角尖思想的引導下,我親自試驗了一下20類任務,達到了97.2%的精度。我並不是做的真正的單樣本學習,因為很多符號我本來就認識,因為我熟悉希臘字母、平假名和片假名,我把這些我本來就認識的移除,我還是得到了96.7%的精度。
  • 基於深度學習的人臉識別算法
    在這個過程中,一個良好的學習嚮導是不可或缺的。因此,在模型訓練的過程中,通常使用度量學習的方式,將人物面部特徵間的距離,作為神經網絡特徵學習的嚮導,來實現區分不同人物的目的。 為了讓神經網絡能夠更加有效的學習,合理的設計損失函數來度量和映射人物特徵之間的距離,成為了提高人臉識別精度的主要研究方向之一。
  • 使用Siamese神經網絡進行人臉識別
    我將與大家分享我從 deeplearning.ai 上一篇論文 FaceNet《人臉識別和聚類的統一嵌入》上學到的知識。如果你對它很感興趣的話,以此,你可以節省更多的時間深入研究這個話題。更多乾貨內容請關注微信公眾號「AI 前線」,(ID:ai-front) 為了理解為什麼我們有一次性學習的原因,我們需要討論下深度學習和數據。
  • 吳恩達深度學習中文版筆記:人臉識別和神經風格轉換
    所以在一次學習問題中,只能通過一個樣本進行學習,以能夠認出同一個人。大多數人臉識別系統都需要解決這個問題,因為在你的資料庫中每個僱員或者組員可能都只有一張照片。要想通過學習神經網絡的參數來得到優質的人臉圖片編碼,方法之一就是定義三元組損失函數然後應用梯度下降。
  • 深度學習之視頻人臉識別系列三:人臉表徵
    在本系列第一篇文章裡我們介紹了人臉識別領域的一些基本概念,分析了深度學習在人臉識別的基本流程,並總結了近年來科研領域的研究進展,最後分析了靜態數據與視頻動態數據在人臉識別技術上的差異;在第二篇文章中介紹了人臉檢測與對齊的相關算法。歡迎大家關注我們的公眾號:磐創AI。
  • 孿生網絡如何識別面部相似度?這有篇PyTorch教程
    在前一篇文章中,我們討論了小樣本數據旨在解決的主要問題類別,以及孿生網絡之所以能夠成為解決這個問題優良選擇的原因。首先,我們來重溫一個特殊的損失函數,它能夠在數據對中計算兩個的圖像相似度。我們現在將在PyTorch中實施我們之前所討論的全部內容。
  • 【損失函數合集】Yann Lecun的Contrastive Loss 和 Google的Triplet Loss
    接下來就一起來看看這兩個損失函數。論文原文均見附錄。問題引入假設我們現在有2張人臉圖片,我們要進行一個簡單的對比任務,就是判斷這兩張人臉圖片是不是對應同一個人,那麼我們一般會如何解決?一種簡單直接的思路就是提取圖片的特徵向量,然後去對比兩個向量的相似度。但這種簡單的做法存在一個明顯的問題,那就是CNN提取的特徵「類間」區分性真的有那麼好嗎?
  • 【新智元乾貨】計算機視覺必讀:目標跟蹤、圖像分類、人臉識別等
    人臉驗證/識別的難題在於需要進行小樣本學習。通常情況下,數據集中每人只有對應的一張圖像,這稱為一次學習(one-shot learning)。兩種基本思路 當作分類問題(需要面對非常多的類別數),或者當作度量學習問題。如果兩張圖像屬於同一個人,我們希望它們的深度特徵比較接近,否則,我們希望它們不接近。
  • 何愷明團隊:stop gradient是孿生網絡對比學習成功的關鍵
    孿生網絡已成為無監督表達學習領域的通用架構,現有方法通過最大化同一圖像的兩者增廣的相似性使其避免「崩潰解(collapsing solutions)」問題。作者期望:這個簡單的基準方案可以驅動更多研員重新思考無監督表達學習中的孿生結構。
  • 深度人臉表情識別技術綜述,沒有比這更全的了
    伴隨著晶片處理能力的大幅提升(GPU 單元)和各種優秀神經網絡結構的設計湧現,許多領域開始轉向深度學習方法,大幅提升了識別準確率。同樣地,深度學習技術被越來越多地用於應對真實環境下的表情識別所帶來的挑戰。 圖 1 人臉表情識別數據集和方法 儘管深度學習具有強大的特徵學習能力,它在 FER 中的應用還有一些問題。首先,深度神經網絡需要大量訓練數據來避免過擬合。
  • 人臉識別經典—FaceNet【美亞技術分享VOL.58】
    ,讓人臉識別、深度學習甚至是人工智慧顯得不再神秘,LFW識別率99%已經隨處可見,今天美亞柏科技術專家就人臉識別的一些經典算法和資源進行分享,感受大神們的「最強大腦」!在實際應用中,人臉驗證(判斷是否是同一人)、人臉識別(這個人是誰)和人臉聚類(尋找類似的人)在自然場景應用仍面臨一些困難。為了降低背景和環境等因素帶來的幹擾,人臉識別一般先經過人臉檢測(Face Detection)、人臉對齊(Face Alignment)等預處理,然後將人臉圖像映射到歐幾裡得等空間,空間距離的長度代表了人臉圖像的相似性。
  • 自步對比學習: 充分挖掘無監督學習樣本
    以下是我們所提出自步對比學習(Self-paced Contrastive Learning)框架,包括一個圖像特徵編碼器(Encoder)和一個混合記憶模型(Hybrid Memory)。核心是混合記憶模型在動態變化的類別下所提供的連續有效的監督,以統一對比損失函數(Unified Contrastive Loss)的形式監督網絡更新,實現起來非常容易,且即插即用。下文將具體介紹。
  • OpenCV+Tensorflow實現實時人臉識別演示
    ,請戳底部廣告支持Facenet網絡介紹FaceNet是谷歌提出的人臉識別模型,它跟其他人臉識別模型最大的一個不同就是它不是一個中間層輸出,而是直接在歐幾裡德低維空間嵌入生成人臉特徵,這個對以後的各種識別、分類、相似度比較都非常方便。
  • 人臉識別最新進展
    本文旨在總結一下人臉識別後期研究。除此之外,我們新的損失也吸收了其他非ground-truth類的可識別性,同時也為不同的類提供了自適應的邊界。據我們所知,這是第一次有效地將特徵邊界和特徵挖掘技術的優點繼承到一個統一的loss函數中去。並且我們還深入分析了新損失與當前基於邊界和基於挖掘的損失之間的區別和聯繫。
  • 什麼是 SeetaFace 開源人臉識別引擎
    人臉識別模塊SeetaFace Identification採用一個9層的卷積神經網絡(CNN)來提取人臉特徵,在LFW資料庫上達到97.1%的精度(註:採用SeetaFace人臉檢測和SeetaFace面部特徵點定位作為前端進行全自動識別的情況下),特徵提取速度為每圖120ms(在單個i7 CPU上)。下面對上述三個模塊的情況做簡要介紹,更詳細的介紹請參考我們相應的學術論文。
  • SeetaFace開源人臉識別引擎介紹
    人臉識別模塊SeetaFace Identification採用一個9層的卷積神經網絡(CNN)來提取人臉特徵,在LFW資料庫上達到97.1%的精度(註:採用SeetaFace人臉檢測和SeetaFace面部特徵點定位作為前端進行全自動識別的情況下),特徵提取速度為每圖120ms(在單個i7 CPU上)。下面對上述三個模塊的情況做簡要介紹,更詳細的介紹請參考我們相應的學術論文。
  • 人臉識別系列三 | MTCNN算法詳解上篇
    前言我們前面分享了PCA,Fisher Face,LBPH三種傳統的人臉識別算法,Dlib人臉檢測算法。今天我們開始分享一下MTCNN算法,這個算法可以將人臉檢測和特徵點檢測結合起來,並且MTCNN的級聯結構對現代的人臉識別也產生了很大的影響。上篇為大家介紹MTCNN的算法原理和訓練技巧,下篇為大家解析MTCNN算法的代碼和進行demo演示。