1. 程式人生 > >單樣本學習:使用孿生神經網路進行人臉識別

單樣本學習:使用孿生神經網路進行人臉識別

這篇文章簡要介紹單樣本學習,以孿生神經網路(Siamese neural network)進行人臉識別的例子,分享了作者從論文 FaceNet 以及 deeplearning.ai 中學到的內容。

54241image%20(34).png

圖片來自 pixabay.com(https://pixabay.com/)

如果你對這個主題很感興趣並希望深入瞭解的話,可以參考論文:

FaceNet:人臉識別和聚類的統一嵌入(FaceNet: A Unified Embedding for Face Recognition and Clustering)。

讓我們開始吧!

單樣本學習

為了理解使用單樣本學習的原因,我們需要討論一下深度學習和資料。通常,在深度學習中,我們需要大量的資料,擁有的資料越多,結果就會越好。然而,僅從少量資料中學習會更加方便,因為並不是所有的人都擁有豐富的資料。

此外,為了識別一個物件,人腦也不需要成千上萬張這類物件的圖片。我們現在不談論對人腦的模擬,因為它過於複雜和強大並且很多東西都與學習和記憶有關,例如感覺、先驗知識、互動等。

這裡的主要思想就是,我們需要僅僅從少量的資料中就能學會一個物件分類,這就是單樣本學習(one-shot learning)演算法。

人臉識別

在人臉識別系統中,我們希望通過輸入一張人臉圖片就能夠識別對應的人的身份。而如果系統並沒有成功地識別圖片,是因為這個人的人臉圖片並不在系統的資料庫中。

為了解決這個問題,我們不能僅使用單個卷積神經網路的原因有兩個:1)CNN 在小資料集上是不起作用的;2)如果每次向系統中加入一位新人的一幅圖片時再去重新訓練模型,也是極其不方便的。為此,我們在人臉識別中使用了孿生神經網路。

孿生神經網路

孿生神經網路的目標是尋找兩個可比較物件的相似程度(例如,簽名驗證、人臉識別等)。這個網路有兩個相同的子網路,兩個子網路有相同的引數和權重。

85646image.png

圖片來源於 C4W4L03 Siamese Network(https://www.youtube.com/watch?v=6jfw8MuKwpI),感謝 Andrew Ng。

上圖是 deeplearning 中利用孿生網路架構做人臉識別的例子。正如你所看到的,第一個子網路的輸入是一幅圖片,然後依次饋送到卷積層、池化層和全連線層,最後輸出一個特徵向量(我們並沒有使用 softmax 函式來做分類)。最後的向量 f(x1) 是對輸入 x1 的編碼。然後,向第二個子網路(與第一個子網路完全相同)輸入圖片 x2,我們對它做相同的處理,並且得到對 x(2) 的編碼 f(x2)。

為了比較圖片 x(1) 和 x(2),我們計算了編碼結果 f(x1) 和 f(x2) 之間的距離。如果它比某個閾值(一個超引數)小,則意味著兩張圖片是同一個人,否則,兩張圖片中不是同一個人。

20793image%20(1).png

上式是 x1 和 x2 的編碼之間的距離。

這適用於任何兩張圖片。

60375image%20(2).png

那麼,為了得到對輸入圖片的良好編碼,我們如何學習相應的引數呢?

我們可以在三重損失函式上應用梯度下降,所謂三重損失函式指的是使用三幅圖片計算一個損失函式:一副固定影像 A,一副正例影象 P(與固定影像是同一人),以及一張反例影象 N(與固定影像不是同一人)。所以,我們想讓固定影像 A 與正例 P 的編碼之間的距離 d(A,P) 小於等於 A 與 N 的編碼之間的距離 d(A,N)。也就是說,我們要讓同一個人的圖片更加相互接近,而不同人的照片要互相遠離。

06097image%20(3).png

三重損失將固定影像 A 與正例 P 之間的距離最小化了,這兩者具有同樣的身份,同時將固定影像 A 與反例 N 之間的距離最大化了。來自論文《FaceNet: A Unified Embedding for Face Recognition and Clustering》。

這裡的問題是,模型可能學習給不同的圖片做出相同的編碼,這意味著距離會成為 0,不幸的是,這仍然滿足三重損失函式。因為這個原因,我們加入了邊際α(一個超引數)來避免這種情況的發生。讓 d(A,P) 與 d(N,P) 之間總存在一個差距。

24603image%20(4).png三重損失函式:

42089image%20(5).png

這裡的最大化處理意味著只要 d(A, P)—d(A, N)+ α小於等於 0,那麼 loss L(A, P, N) 就會是 0,但是一旦它大於 0,那麼損失值就是正的,這個函式就會將它最小化成 0 或者小於 0。

代價函式是訓練集的所有個體的三重損失的和。

66049image%20(6).png

訓練集

為了定義 A 和 P,訓練集應該包含同一個人的多張圖片,一旦模型訓練完畢,我們就可以僅僅通過一張圖片來識別出一個人。

我們如何選擇用於訓練模型的圖片呢?

如果我們隨機選擇圖片,可能很容易就能滿足損失函式的限制,因為大多數情況距離都是很大的,而且梯度下降也不會從訓練集中學到很多(大幅更新權重)。因為這個原因,我們需要尋找這樣的 A、P 和 N,使得 A 和 P 很接近 N。我們的目標是讓訓練模型變得更加困難,以使得梯度下降學到更多。

原文連結:https://towardsdatascience.com/one-shot-learning-face-recognition-using-siamese-neural-network-a13dcf739e