ArcFace層問題分析

Arcface訓練問題分析

1、現象

使用ArcFace 層時,訓練前期準確率一直爲0,到後面才逐漸上升;

 

2、分析

從代碼入手

output = (y * phi) + ((1.0 - y) * cosine)

output *= s

y 是one-hot形式的真實label,phi=cos(θ+m),cosine=cosθ,θ即特徵向量與權值向量的夾角。則:

(1)     label = 0 -> y=[1, 0] -> output = [s*cos(θ1+m), s*cosθ2]

(2)     label = 1 -> y=[0,1] -> output = [s*cosθ1, s*cos(θ2+m)]

然後經過softmax操作進行概率轉換;

 

初始時,θ1和θ2在高維空間中均接近pi/2,m一般爲正數(這裏爲0.05)。針對softmax的輸出使用CE-loss進行約束,形式如下:

 

則:

(1)   label = 0 ->  損失函數會朝着s*cos(θ1+m) >> s*cosθ2 的方向約束,結合cos函數在[0, pi]上的單調遞減性,則(θ1+m) 應越來越小於 θ2;但是初始時 θ1=θ2=pi/2,則θ1+m 在訓練初期都大於θ2,即訓練初期 s*cos(θ1+m) < s*cosθ2 ,即label = 0 時, prediction =1;

(2)   label = 1時的情況同上

所以訓練初期:label = 0 的樣本都被判爲負樣本,label = 1的樣本都被判爲正樣本,所以訓練初期acc = 0%。

而隨着訓練的不斷進行,比如對於label = 0時, θ1從pi/2縮小到pi/2 -m 至更小時,則acc開始上升。

 

備註:m值需爲正數,它代表着類別在角度空間中的margin。若m爲負數,則根據上面的分析可知:訓練初期就有θ1+m<θ2,從而導致對於θ1沒有懲罰作用。(訓練時acc均爲100%)

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