吳恩達深度學習筆記(105)-人臉識別之面部驗證與二分類

人工智能 數據庫 算法 極客Array 2019-04-06

面部驗證與二分類(Face verification and binary classification)

Triplet loss是一個學習人臉識別卷積網絡參數的好方法,還有其他學習參數的方法,讓我們看看如何將人臉識別當成一個二分類問題。

吳恩達深度學習筆記(105)-人臉識別之面部驗證與二分類

另一個訓練神經網絡的方法是選取一對神經網絡,選取Siamese網絡,使其同時計算這些嵌入,比如說128維的嵌入(編號1),或者更高維,然後將其輸入到邏輯迴歸單元,然後進行預測,如果是相同的人,那麼輸出是1,若是不同的人,輸出是0。

這就把人臉識別問題轉換為一個二分類問題,訓練這種系統時可以替換Triplet loss的方法

最後的邏輯迴歸單元是怎麼處理的?

輸出y^會變成,比如說sigmoid函數應用到某些特徵上,相比起直接放入這些編碼(f(x^(i)),f(x^(j))),你可以利用編碼之間的不同。

吳恩達深度學習筆記(105)-人臉識別之面部驗證與二分類

我解釋一下,符號f(x^(i) )_k代表圖片x^(i)的編碼,下標k代表選擇這個向量中的第k個元素,|f(x^(i) )_k-f(x^(j) )_k |對這兩個編碼取元素差的絕對值

你可能想,把這128個元素當作特徵,然後把他們放入邏輯迴歸中,最後的邏輯迴歸可以增加參數w_i和b,就像普通的邏輯迴歸一樣。你將在這128個單元上訓練合適的權重,用來預測兩張圖片是否是一個人,這是一個很合理的方法來學習預測0或者1,即是否是同一個人。

吳恩達深度學習筆記(105)-人臉識別之面部驗證與二分類

還有其他不同的形式來計算綠色標記的這部分公式(|f(x^((i)) )_k-f(x^((j)) )_k |),

比如說,公式可以是((f(x^((i)) )_k-f(x^((j)) )_k )^2)/(f(x^((i)) )_k+f(x^((j)) )_k ),

這個公式也被叫做χ^2公式,是一個希臘字母χ,也被稱為χ平方相似度。

	Yaniv Taigman, Ming Yang, Marc'Aurelio Ranzato, Lior Wolf (2014). DeepFace: Closing the gap to human-level performance in face verification

這些公式及其變形在這篇DeepFace論文中有討論,之前也引用過。

吳恩達深度學習筆記(105)-人臉識別之面部驗證與二分類

但是在這個學習公式中,輸入是一對圖片,這是你的訓練輸入x(編號1、2),輸出y是0或者1,取決於你的輸入是相似圖片還是非相似圖片。

與之前類似,你正在訓練一個Siamese網絡,意味著上面這個神經網絡擁有的參數和下面神經網絡的相同(編號3和4所示的網絡),兩組參數是綁定的,這樣的系統效果很好。

之前提到一個計算技巧可以幫你顯著提高部署效果,如果這是一張新圖片(編號1),當員工走進門時,希望門可以自動為他們打開,這個(編號2)是在數據庫中的圖片,不需要每次都計算這些特徵(編號6),不需要每次都計算這個嵌入,你可以提前計算好,那麼當一個新員工走近時,你可以使用上方的卷積網絡來計算這些編碼(編號5),然後使用它,和預先計算好的編碼進行比較,然後輸出預測值y^。

因為不需要存儲原始圖像,如果你有一個很大的員工數據庫,你不需要為每個員工每次都計算這些編碼。這個預先計算的思想,可以節省大量的計算,這個預訓練的工作可以用在Siamese網路結構中,將人臉識別當作一個二分類問題,也可以用在學習和使用Triplet loss函數上,我在之前的視頻中描述過。

總結一下,把人臉驗證當作一個監督學習,創建一個只有成對圖片的訓練集,不是三個一組,而是成對的圖片,目標標籤是1表示一對圖片是一個人,目標標籤是0表示圖片中是不同的人。利用不同的成對圖片,使用反向傳播算法去訓練神經網絡,訓練Siamese神經網絡

吳恩達深度學習筆記(105)-人臉識別之面部驗證與二分類

這個你看到的版本,處理人臉驗證和人臉識別擴展為二分類問題,這樣的效果也很好。

希望你知道,在一次學習時,你需要什麼來訓練人臉驗證,或者人臉識別系統

相關推薦

推薦中...