ArcFace및 이후의 논문들은 ArcFace 의 margin code를 사용하면서 다들 비슷한 형태를 취하고 있다.

 

 

다른 부분들은 논문에 작성되어 있어서 이해하기 어렵지 않으나, easy margin 부분은 헷갈린다.

InsightFace코드에서 항상easymargin= False로 놓고 사용하므로 False 식에 대해서만 설명하겠다. 식은 다음과 같다.

보면 1) cos(theta)>cos(pi-margin)일때 phi (phi는 naive하게 cos(theta+margin)한 식을 의미한다.),

      2) cos(theta)<=cos(pi-margin)일때 cos(theta)-margin * sin(pi-margin) 로 phi를 적용한다.

알아갈 것들

1. 우선 위처럼 복잡하게 적은 이유는 theta+margin이 (0,pi) 범위에 있지 않아 cos을 단조감소 함수로써 이용할 수 없게됨을 방지하기 위함이다.

 

2. 또다른 이유로는 theta자체를 이용한 식을 사용하지 못함에 있다.  논문 이론과 같이 arcsin, arccos를 사용하여 theta에대한 조건식을 사용하게되면 computation이 급격히 늘어나므로, 코드에서는 모든 조건들을cos, sin에 대한 식으로 나타낸다.

ex1) theta> m  -->  cos(theta)<cos(m)  when theta, m 이 (0,pi)에 있을때.

ex2) cos(theta+m)= cos(theta)*cos(m)-sin(theta)*sin(m)

 

3. cos(theta)>cos(pi-margin) 이라는 조건부터 살펴보면, theta , pi-margin 모두 (0,pi)사이의 값이므로 2번설명의 ex1과 같다.

 

4.self.mm의 의미 :

갑자기 생뚱맞게 mm=margin*sin(pi-margin)이 나와 당황 했는데, 이것도 theta+margin 이 pi범위를 넘어서는 문제를 해결하기 위해 나온식이다.

당신이 이 논문 저자라고 생각하고 만약 theta+margin이 pi를 넘는다면 이 값을 대체할 수 있는 방법이 세가지 있다.

첫째로, 'pi를 넘어서는 값들은 pi로 고정시킨다' 즉 theta+margin이 pi를 넘는값에 한해 cos(theta+margin)=-1로 고정시키는 방법이다.

다른 두개는 이 논문에서 사용한 방법으로 1st order Taylor Extension을 이용해서 cos(theta)에서 넘는 값을 선형으로 근사 시키는것이다. 즉 cos(theta+margin)=cos(theta)-sin(theta)*m >=cos(theta)-sin(pi-m)*m  으로 나타낼 수 있다.

여기서

cos(theta+margin)=cos(theta)-sin(theta)*m 는 두번째 방법

cos(theta+margin)>=cos(theta)-sin(pi-m)*m 를 세번째 방법이라 지칭 하겠다.

Taylor Extension, ArcFace는 1차까지 사용.

식은 복잡하지만 다음 그림을 보면 한번에 이해가 갈 것이다.

 

이중 ArcFace는 방법 3를 사용하고 있다. m=0.5의 값을 사용하므로 pi-m은 항상 (pi/2,pi)안에 있고 theta>pi-m이므로 방법3로 그리는게 방법2보다 항상 가파른 기울기로 근사하여 잘 못 맞추는 sample(theta ~=pi)에대해 loss를 더 크게 부여하게 된다.

 

출처 : github.com/ronghuaiyang/arcface-pytorch/issues/48

+ Recent posts