1. 程式人生 > 實用技巧 >Consensus-Driven Propagation in Massive Unlabeled Data for Face Recognition 人臉聚類

Consensus-Driven Propagation in Massive Unlabeled Data for Face Recognition 人臉聚類

看論文前可先看下作者自己在知乎的總結: https://zhuanlan.zhihu.com/p/51806059 這篇論文簡稱CDP,利用監督方式訓練一個度量模型判別圖片對判別進而實現人臉聚類,使用聚類的人臉來訓練人臉識別模型。 open-setandclose-set 類似ImageNet識別這種,明確知道類別範圍的分類問題稱為close-set問題,但人臉方面基本都屬於open-set問題(測試類別不一定在訓練集範圍內),因此測試過程通常是提取人臉特徵進行比對,而非直接通過網路推理得到標籤。 人臉聚類 聚類需要特徵以及相似度度量標準,特徵可以由CNN獲取,度量可參考L2距離,餘弦相似度來度量。 其中,不同的損失函式會產生不同形態的特徵分佈,左圖這種錐形(cone),右圖這種分佈在超球面的,對人臉特徵做L2歸一化即可得超球面分佈(參考arcface實現)。對於錐形分佈,可採用餘弦相似度度量,而超球面分佈可採用L2距離來度量。
常規的聚類演算法有很多,但使用20萬張圖提取特徵之後來測試一下這些聚類演算法,K-Means花了10分鐘,HAC花了5.7小時,DBSCAN花了6.9小時, Spectral花了12小時。若使用60萬張圖片提取的特徵來做聚類,K-Means超記憶體了,HAC花了61小時,DBSCAN花了80小時,Spectral跑到天荒地老之後也甩了一句超記憶體。當圖片數量增加到140萬的時候,幾乎所有的聚類演算法都掛了。 K-Means, Spectral, HAC等傳統聚類方法的問題主要在於以下方面: (a) 聚類演算法具有較高的時間複雜度。例如,K-Means是O(NKT),Spectral是O(N^3),HAC是O(N^2)。 (b) 通常認為資料分佈服從某些簡單的假設。例如,K-Means假設資料類內具有球狀的分佈,並且每一類具有相同的方差(variance),以及不同的類具有相同的先驗概率。然而對於大規模人臉聚類,無標註資料通常來源於開放的場景(in-the-wild),資料內部的結構比較複雜,難以一致地服從這些假設。例如,我們期望資料長這樣(如下左圖):
(c) 通常使用某種特定的metric。例如上述提及的Cosine Similarity和L2距離。同樣,對於複雜的資料結構,衡量兩個樣本是否屬於同一類,單純靠樣本之間的區域性相似度是不夠的,這個metric需要融合更多資訊。 (d) 缺乏較好的離群值(outliers)控制機制。outliers來源於人臉識別模型對難樣本的embedding誤差,以及觀測到的資料不完整。儘管部分聚類演算法例如DBSCAN理論上對outliers魯棒,但從其實際表現來講這個問題遠沒有得到解決。 有監督的metric 本文提出的CDP其實就是一個度量學習模型,判別兩個樣本是不是屬於同一個類簇。如下圖,CDP首先使用多個人臉識別模型構建成一個委員會(committee), committee中每個成員對基礎模型中相連的pairs提供包括關係(是否是neighbor)、相似度、區域性結構等資訊,然後使用一個多層感知機(MLP)來整合這些資訊並作出預測(即這個pair是否是同一個人)。這個過程可以類比成一個投票的過程,committee負責考察一個候選人(pair)的各方面資訊,將資訊彙總給MLP進行決定。最後將所有的positive pairs組成一個新的graph稱為consensus-driven graph。在此graph上使用簡單的連通域搜尋並動態剪枝即可快速得到聚類。由於MLP需要使用一部分有標籤的資料來訓練得到,所以CDP是一種基於有監督的metric的聚類方法。
CDP演算法流程 1.構建KNN圖 Base model和committeemodel如下所示 由基礎模型和委員模型對所有圖片抽取特徵,並分別依據KNN為每個樣本找到k個相鄰的樣本,構建KNN圖,其中以餘弦相似度來評估樣本間相似度。N個委員模型加一個基礎模型一共構成N+1個不同的KNN圖。接下來以基礎模型得到的相似圖片對作為候選圖片對,由委員模型從多個方面提取特徵,最終由MLP來判別圖片對是否同一個人。 2.由committee抽取圖片對的特徵 對基礎模型得到的圖片對,委員模型依據自己構建的KNN圖分別給出鄰接關係、相似度和區域性結構資訊特徵 鄰接特徵:若圖片對在委員模型構建的KNN圖上,則他們是相鄰的,表現為 相似度特徵:針對候選圖片對,委員模型計算得到的餘弦相似度作為圖片對的相似程度 區域性結構特徵:對每個節點,我們可以通過與節點直接相鄰的節點(一階)與間接相鄰的節點(二階)或者更高階的鄰接節點與當前節點的關係來表徵節點的區域性結構特徵,其中節點與節點之間的關係是直接通過餘弦相似度來評估的。如下圖所示,針對基礎模型中的圖片對節點,委員模型可以給出每個節點的區域性結構特徵,在本文中用直接相連節點和間接相連節點餘弦相似度資訊的均值和方差作為區域性結構資訊。紅線表示的一階鄰接節點資訊,黃色表示的二階鄰接節點資訊。 3.mediator判別圖片對 mediator判別模型就是一個MLP模型,模型輸入由以上三個部分節點對特徵組成:
  • 鄰接關係,N個委員模型,則長度為N
  • 相似度,N個委員+一個基礎模型,則長度為N+1
  • 區域性結構分佈特徵,我們僅計算每個節點與直接相鄰節點和間接相鄰節點餘弦相似度的均值和方差,則節點對可計算出2(N+1)個均值特徵和2(N+1)個方差特徵,N個委員+1個基礎模型。
綜上,一個圖片對可的6N+5個特徵,MLP損失函式為交叉熵,二分類模型。在測試階段,將較高預測概率(0.96)為1的圖片對作為相似圖片對,因為大多數正圖片對是冗餘的,這樣的做法犧牲了一定的召回率但取得較高的精準率。 4.偽標籤傳播 依據MLP判別模型所得到的所有正樣本對構成一個一致性驅動的圖(consensu-driven-graph),圖的邊為圖片對為正的概率,其中該圖未必是全部連通的。作者依據節點連線來進行偽標籤構建。為傳播偽標籤,作者設計了一種簡單但高效的方法來識別連線部分。首先,依據當前邊的連線情況找到所有連線部分並把它們放到一個佇列。然後,針對每一連通部分,若該部分節點數大於預定的值,我們剔除連通圖裡低分的邊,找到連線的子圖並將這些子圖加入到佇列。若佇列裡的連通子圖所含節點數小於閾值,那麼將該子圖歸納為一個新的偽標籤並移出佇列。迭代佇列,不斷地將大的子圖拆分,將小的子圖打標籤,直到佇列為空。 總結:將節點數超過閾值的子圖做拆分,把小於閾值的子圖看成一個新的個體,賦予新的偽標籤。 5.標記資料與未標記資料聯合訓練 作者說,由於不確定標記資料和未標記資料的重疊類別部分,因此分別對標記資料和偽標籤資料計算損失,損失函式以兩部分資料比例來確定。 實驗部分 實驗部分非常詳實了,簡單記錄幾項 對比方法:
  • HAC:監督CNN特徵+HAC,通過驗證集選定閾值
  • 投票方式確定節點對是否屬於同一個人,如果委員模型生成的KNN圖中該節點對相連,則票數+1
CDP方法驗證精度甚至超過了全監督,作者解釋資料集存在誤差,CDP去掉了,因此訓練出的模型更好。 CDP的計算時間也幾乎與資料規模呈線性增長,百萬級別資料,KNN搜尋花了4分鐘(48核),特徵計算+MLP花了2分鐘(8卡),偽標籤生成花了2分鐘,但作者沒說所有資料抽特徵花了多久。。。 相比於百萬規模資料常規聚類演算法都無法作用,CDP還算可以了,就是有點麻煩,還要先訓練多個特徵抽取(委員)模型,其中相關程式碼作者已經開源道github。