What is face recognition?
Face verification
- 應該只有一個人
- 確認臉是否為該 ID
Face recognition
- 有 K 個人
- 辨識該臉是哪個 ID
One Shot Learning
傳統方法 (或 deep learning) 不管用
- 資料太少
- 想多辨識一個人就要重 train model
Learning a "similarity" function
:degree of difference between images
- if :同個人
- if :不同人
- :可以調整的 hyperparameter
- 常使用 L2-norm 作為 d function
- 就是 input image 之後 NN output 的 vector
Siamese Network
Triplet Loss
固定一個 anchor (A) image
- positive (P):和 anchor 是同一人
- negative (N):和 anchor 是不同人
- 希望 ,即
- 那它就全部 output 0 就好啦 安捏母湯
- 改成希望
- 即
- 是可以調整的 hyperparameter,又稱作 margin,和 SVM 的 margin 很類似
Loss Function
- 這樣只要 ,那 loss 就是 0
- 要從 data 找到這樣的三元組,training data 同個人必須要有不只一張圖片,(A, P) 才能湊成對。
- 之後想要辨識的人可能只需要一張圖片就夠了
Example:
- training set:1千個人的1萬張圖片 (平均每人十張)
然而要滿足 這樣的式子並不難
- 因為對於反例樣本,本來就很有可能和 anchor 差很多,導致 gradient descent 學不到東西 (NN 本來就可以分得好了)
- 因此需要挑選一些 非常難 train 的三元組來訓練 siamese network
- 詳情參考論文 - FaceNet: A Unified Embedding for Face Recognition and Clustering
- TODO: see this paper
Face Verification and Binary Classification
另一種訓練 siamese network 的方式
(img) 將 的差異丟給 logistic regression 判斷是否同一人 - binary classification
- 應該是 吧,影片寫錯?
- 可以將上式的 換成 ,其實就是 chi-square similarity ()
- 論文:DeepFace closing the gap to human level performance 有探討這個式子 & 其它變形
問
- logistic regression 應該是用原始的 training data 訓練?
- 之前看到有用 KNN 做為後面的 classifier,但是它是用我們要辨識的人的 data 來訓練
一個 trick
- 可以預先算好想辨識的人的 data 的 encoding,不用每次要比都要算一次