之前的方法主要基于softmax損失函數(shù)的改進,但訓練大量人臉比較困難干毅。
softmax損失中的負類在人臉表示中的重要性并不如想象中重要,文中為了softmax-based損失函數(shù)只隨機采樣了10%的類別瘸味,比全量訓練精度并沒有下降塞关。
同時使用了高效分布式采樣算法姐扮,同時考慮到模型精度與訓練效率絮供。
8張顯卡完成1千萬人的分類任務。
介紹
人臉識別學習過程中茶敏,單人的特征被映射到嵌入空間,基于歐幾里得距離缚俏,屬于同一個人的特征被拉到一起惊搏、屬于不同人的被推開。
黃金法則就是忧换,人越多恬惯,模型學習到的信息越多,區(qū)分這些特征的能力越強亚茬。
softmax及其變體用于人臉識別的目標函數(shù)酪耳,一般是在嵌入特征與線性變換矩陣的相乘過程中進行全局的特征到類別的比較。
有方法通過并行減輕GPU壓力刹缝,很少的通信進行full-class softmax的計算碗暗;但人多到如1千萬的數(shù)量級時,通過特征取類別的計算量(logits)還是不可忽視梢夯,分布式GPU的內存節(jié)約有瓶頸言疗。GPU多了確可以解決權重矩陣的存儲問題,但最后的logits還是給GPU新增負擔颂砸。
文中提出一種高效人臉識別訓練策略噪奄,用于超大人臉集。
- 首先在所有GPU上均勻按序存儲softmax線性轉換矩陣的不交疊子集人乓。
- 每個GPU負責計算存儲在自身的采樣子矩陣和輸入特征的點積的和勤篮。
- 每個GPU集結其他GPU的局部和,以近似full-class的softmax損失色罚,通過少量的通信采樣到局部和碰缔,以近似full-class的softmax。大大減少單塊GPU的通信保屯、計算和存儲成本手负,效率提升好幾倍。
Glint360K中含有干凈的姑尺、合并了的現(xiàn)有公開人臉數(shù)據(jù)集竟终,本文方法只需用10%的類別計算softmax,就與當前最好效果不相上下切蟋。
貢獻:
- softmax近似算法统捶,使用10%類別中心便可以維持準確度
- 高效分布式訓練策略,很容易地用大數(shù)量類別來訓練分類任務
- 干凈合并后的公開數(shù)集,最大最干凈的人臉數(shù)據(jù)集Glint360K喘鸟,在此數(shù)據(jù)集訓練匆绣、用此訓練策略的基準模型達到最優(yōu)效果輕而易舉。
相關工作
1)人臉識別
深度神經(jīng)網(wǎng)絡在人臉識別領域越來越重要什黑,pipeline一般是深度神經(jīng)網(wǎng)絡在給每個圖像提取特征崎淳,學習過程就是逐漸減小類內距離、增大類間距離的過程愕把。
目前有很多成功的softmax分類器及其變體拣凹,但人臉識別需要更大量的人臉。
基于softmax損失函數(shù)的方法中恨豁,人變多了嚣镜,線性轉換矩陣會線性增長,人多到一定程度則單卡無法承擔這樣的權重矩陣橘蜜。
2)softmax加速
- 選active類中心構建隨機hash森林菊匿,通過特征取出近似的最近類中心(但類中心放在RAM中,取特征的計算時間不容忽視)
- 將softmax損失分為類內和類間目標计福,減少類間目標的冗余計算(但對其他softmax-based損失不可拓展)
這些方法在多GPU訓練時基于數(shù)據(jù)并行跌捆,GPU間通信代價高昂。ArcFace提出模型并行棒搜,將softmax權重矩陣分給不同的GPU疹蛉,然后用很小代價計算full-class的softmax損失,其在單機上使用多卡很成功力麸,但有內存限制——人多到一定程度可款,GPU內存消耗會到頂,盡管GPU數(shù)量多了也不行克蚂。
所以本文分析的是模型并行中的GPU內存使用闺鲸。
方法
- 詳述模型并行,分析其中設備間通信開銷埃叭、存儲代價和內存限制
- 不降性能的近似方法
- 分布式近似方法
1)模型并行
劃分softmax權重矩陣為k個給不同的GPU摸恍,每個GPU集結其他的GPU的特征。
數(shù)據(jù)并行要傳遞權重矩陣梯度赤屋,但模型并行只要傳達局部和立镶,通信代價大小為batchsize*4(float32)。
通信和矩陣操作描述第i個GPU上的模型并行過程类早,包括前后向傳播媚媒,大大減小GPU之間的通信。其中類別數(shù)C>>N*(k+1)涩僻,N為每個GPU上mini-batch的大小缭召。
2)模型并行的內存限制
不管C多大栈顷,因為模型并行完全可以解決權重的存儲、傳達問題嵌巷,所以加GPU就可以了萄凤。
每個GPU存儲子矩陣w的內存大小不變:
Mem_w = d*(C/k) *4 bytes
C變大,k也變大搪哪,此處C/k不變靡努。
此外預測的logits也存在GPU上,logits = X*w
Mem_logits = N*k*(C/k)*4bytes
因此分類層占據(jù)的GPU內存表示為:
Men_FC = 3*Mem_w + 2*Mem_logits
如果每個GPU上mini-batch的大小為64且嵌入特征維度為512噩死,則1百萬分類任務需8個GPU颤难,1千萬則需至少80個,logits會花費w的10倍的內存已维,則使存儲logits成為模型并行的新瓶頸(訓練大量人臉并不僅僅增加GPU就可以)。
3)近似策略
-
正負類角色:
廣泛使用的softmax分類損失:
x_i表示第i個樣本的深度特征已日,屬于y_i類垛耳,w_j表示權重矩陣W(R_{d*C})的第j列。
f_j表示帶有w飘千、b的全連接層的激活值堂鲜,簡便起見b設為1:
w和x都l2歸一化后,預測值只取決于特征和權重之間的角度护奈。
線性權重矩陣的每一列表示一個類中心缔莲,第j列表示第j類的類中心,x_i的正類中心是w_y_i霉旗,其他就是負類中心痴奏。
用類中心的子集來近似softmax:全部采樣正類中心,隨機采樣負類中的10%厌秒,即正類加隨機負類(PPRN)
訓練時x_i和w_y_i之間的余弦距離的平均值CA_pcc:
實驗表明读拆,不采樣正類中心,x_i梯度只會使樣本遠離負中心而不會考慮類內聚集的目標鸵闪;
沒有采樣P_i時檐晕,和帶有PPRN的采樣策略P_i_{^}預測到的概率,在一定情況下很相似:
其中S表示采樣到的類別集蚌讼,r表示采樣率辟灰。
PPRN不斷優(yōu)化正類中心,正類概率P_gt和采樣到的類別和sum_P_j不斷增大篡石,訓練后期芥喇,負類概率之間的gap越來越小,就是說夏志,負類中心的方向乃坤、放大和采樣率關系不大苛让,采樣率0.1、0.5湿诊、1.0結果相似狱杰。
-
分布式近似:
采樣正類以及采樣隨機負類,可以達到與最優(yōu)效果不相上下的結果厅须。
為訓練大量人臉仿畸,模型并行中,為平衡每個GPU的計算和存儲開銷朗和,每個GPU上的類別中心個數(shù)應相等错沽,采樣過程如下:
【1】 獲得該GPU上的正類中心
根據(jù)順序均分W:
k是GPU個數(shù),x_i樣本的標簽是y_i眶拉,其正類中心是W線性矩陣的第j列, 所以當前GPU上的正類中心集W_i_{p}千埃,很容易就從當前batch中特征的標簽y得到。
【2】計算負類中心的個數(shù)
當前GPU存儲的類中心個數(shù)為|w_i|, 正類就是|w_i_{p}|, 隨機采樣的負類中心的個數(shù)就是:
r就是PPRN采樣率
【3】隨機采樣負類
在w_i和w_i_{p}之間差集中隨機采樣負類中心忆植,得到負類中心為w_i_{n}:
將所有的類中心放到softmax計算中, W_{s}:
其中放可,W_{p} = [w_1_{p}, ..w_k_{p}], W_{n} = [w_1_{n}, .. w_k_{n} ].
W_{n}:這種方法就是一種平衡每個GPU負載的近似算法。
參考:
paper: https://arxiv.org/pdf/2010.05222.pdf
code: https://github.com/deepinsight/insightface/tree/master/recognition/partial_fc#glint360k