論文:FaceNet:A Unified Embedding for Face Recognition and Clustering
一、簡單介紹
FaceNet是一個通用的人臉識别系統,可以用于人臉驗證(是否是同一個人),人臉識别(這個人是誰)和人臉聚類(尋找相似的人),采用的方法是通過卷積神經網絡将人臉圖像映射到歐幾裡得空間,空間距離直接和圖檔人臉圖像的相似度相關:同一個人的人臉圖像具有很小的距離,不同人的人臉具有很大的距離。(在這裡,我了解為,每個人都可以看成一個類,同一個人的不同人臉之間的距離可被看做類内距離,不同人的人臉圖像之間的距離可被看做是類間距離,FaceNet系統的主要思想可看做盡量縮小類内距離,增大類間距離。)
二、方法
2.1 模型結構
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISO5EDNwQDMwETMxYDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
圖1:FaceNet模型結構
如圖1展示的就是FaceNet模型結構。Deep Architecture 就是一個深度卷積網絡剔除softmax後的結構。後面經過一個特征歸一化,将特征映射到一個超球面上,之後提出一個新的損失函數,Triplet Loss
所謂嵌入(embedding),可以了解為一種映射關系,即将特征從原來的特征空間映射到一個新的特征空間,新的特征就可以稱為原來特征的一種嵌入。
2.2 Triplet Loss
圖2:Triplet loss
顧名思義,triplet是一個三元組(anchor, positive,Negative),對于一個特定個體的人臉圖像樣本(anchor),同屬于這個個體的其他人臉圖像樣本即是positive,與不屬于這個個體的其他人臉圖像樣本就是Negative。那麼學習的過程就是:對于盡可能多的三元組,使得anchor和positive之間的距離要小于anchor和negative之間的距離。如圖2所示,網絡沒有學習之前,A和P的歐式距離可能大于A和N之間的距離,學習後,A和P的具體會減少,A和N之間的距離會增大,最後A和P之間的距離會小于A和N之間的距離,即是通過學習,要使得類間的距離大于類内的距離。假設x是輸入的圖檔,
是CNN表示後的特征向量,三元函數為
其中
是一個常量,是以最終的損失函數為:
2.3 三元組的選擇
選擇合适的triplet對于收斂速度,一般來說,對于一個
,我們想要找到一個
(hard positive)使得
并且同時找到一個
(hard negative)使得
. 通過最小化損失函數,對模型進行更新,在整個訓練集上進行尋找是不現實的,是以提出兩種政策:
1. 離線方式:每n步,計算自己的argmin和argmax生成三元組
2. 線上方式:在一個mini-batch中尋找hard positive/negative
在FaceNet論文中是選擇的第二種方式,作者在mini-batch中挑選所有的positive圖像對,因為這樣這樣在訓練的過程中更加穩固而且在訓練的初期收斂速度更快點。對于negative的選擇,作者使用了semi-hard的Negative,也就是滿足A到N的距離大于A到P之間的距離的Negative樣本。
2.4 深層卷積網絡
FaceNet用到了一個深層卷積網絡,在FaceNet這篇論文中,作者讨論了兩個不同的架構,Zeiler&Fergus架構和Inception架構。
表1:Zeiler&Fergus架構
表1中展示的是用在論文中的Zeiler&Fergus架構網絡的結構,22層,140 million個參數和每一個圖像需要大約1.6 billion FLOPS(每秒浮點運算次數)。
表2:GoogLeNet style Inception 模型
表2展示的是論文中用到的GoogLeNet Style Inception模型,模型參數是第一個模型的二十分之一,FLOPS也是第一個的五分之一。
FaceNet的算法基本思想如上描述,FaceNet是典型的純資料驅動模型,至于FaceNet的訓練資料和模型的對比,在這裡不在贅述,也許為如何實作單獨寫一篇部落格,可我目前還沒有動手操作,是以先放入日程安排中。