ArcFace 論文大顆粒粗讀筆記(四)

最後一節,附錄

平行加速
我們可以將ArcFace應用於大型身份嗎?是的,數百萬個身份不是問題。中心(W)的概念在ArcFace中是必不可少的,但是中心(W)的參數大小與類的數量成正比。當訓練數據中有數百萬個身份時,建議的ArcFace面臨巨大的訓練困難,例如即使在過高的水平上,GPU內存消耗過多,計算成本也很高。
在我們的實現3中,我們採用了並行加速策略[44]來緩解此問題。我們優化了訓練代碼,以通過在特徵x(稱爲通用數據並行策略)和中心W(我們將其稱爲中心並行策略)上並行加速,輕鬆而有效地在一臺機器上支持百萬個級別身份。

如圖10所示,我們在特徵x和中心W上的並行加速可以顯着減少GPU內存消耗並加快訓練速度。即使對於使用8 * 1080ti(11GB)訓練的一百萬個身份,我們的實現(ResNet 50,批處理大小8 * 64,特徵尺寸512和浮點32)仍然可以每秒800個樣本的速度運行。與[47]中提出的近似加速方法相比,我們的實現沒有性能下降。

在圖11中,我們通過簡單的矩陣劃分說明了並行加速度的主要計算步驟,初學者可以很容易地掌握和複製它們[3]。
(1)獲取特徵(x)。面部嵌入特徵從8個GPU卡聚集到一個特徵矩陣(批大小8 * 64×特徵尺寸512)中。彙總後的特徵矩陣的大小僅爲1MB,傳輸特徵矩陣時的通信成本可以忽略不計。
(2)獲得相似性得分矩陣(得分= xW)。我們將特徵矩陣複製到每個GPU中,並同時將特徵矩陣乘以中心子矩陣(特徵尺寸512×標識號1M / 8),以獲得相似度得分子矩陣(批處理大小512×標識號1M / 8) )在每個GPU上。相似度得分矩陣繼續計算ArcFace損耗和梯度。在這裏,我們沿着身份維度對中心矩陣和相似性得分矩陣進行簡單的矩陣劃分,並且在中心和相似性得分矩陣上沒有通信成本。每個GPU上的中心子矩陣和相似性分數子矩陣都只有256MB。
(3)獲得中心的梯度(dW)。我們將特徵矩陣轉置到每個GPU上,並同時將轉置後的特徵矩陣乘以相似度分數的梯度子矩陣。
(4)獲取特徵(x)的梯度。我們同時將相似度分數的梯度子矩陣乘以轉置的中心子矩陣,並對8個GPU卡的輸出求和,以得到特徵x的梯度。
考慮到通信成本(MB級),我們的集羣可以輕鬆,高效地對數百萬個身份進行ArcFace實施培訓。

特徵空間分析
512維超球面空間是否足以容納
大規模的身份? 從理論上講,是的。
我們假設身份中心Wj遵循現實的球形均勻分佈,對最近鄰居的期望爲[5]爲

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章