gusdlf93 / Paper_Survey

4 stars 1 forks source link

|2019|CVPR|ArcFace: Additive Angular Margin Loss for Deep Face Recognition #7

Open gusdlf93 opened 2 years ago

gusdlf93 commented 2 years ago

ArcFace는 Margin-Loss를 제안함으로써, Multi Class Classification을 보다 원할하게 만들어줍니다.

대략적으로 Multi-Class Classifier는 두가지로 나눌 수 있는데, SoftMax와 Triplet Loss입니다.

SoftMax Loss - 클래스별로 서로 다른 identities를 분류하도록 학습을 진행합니다. SoftMax 함수는 클래스의 수가 늘어나면 늘어날수록 클래스간 Center의 거리를 늘리는게 어려워지게 됩니다. 이는, Fully Connected Layer가 가진 가중치가 각 얼굴 클래스와 개념적으로 유사하기 때문에 그렇습니다. 그러므로, Closed-Set 분류 문제에서는 큰 문제가 없지만, Open-Set 분류 문제에서는 분별력이 떨어지게 됩니다.

Triplet Loss - 서로 다른 클래스는 서로 다른 공간에 임베딩 되도록 합니다. 대규모 Dataset의 경우에는 Triplets의 갯수의 종류가 너무 많아지게 되고, 이는 학습이 오래걸리게 만듭니다.

참고로, Geodesic Distance를 사용하는 Loss는 크게 4가지가 분류가 있습니다.

  1. Margin-Loss : 본 논문에서 제안하는 방식입니다.(이게 가장 좋다고 하네요) image
  2. Intra-Loss : Sample이 Ground Truth들의 Center에 가까워지도록 학습을 진행합니다. image
  3. Inter-Loss : 서로 다른 클래스의 Center간 거리를 증가시킴으로써, 클래스간 거리를 늘리도록 학습합니다. image
  4. Triplet-Loss : Triplet Sample간의 거리를 늘리도록 학습을 진행합니다. image

본 논문에서는 학습 과정을 안정화 시키고, 모델의 분류 성능을 추가로 향상시키기 위해 Angular Margin Loss(ArcFace)를 제시합니다.

우선, Soft Max Loss를 Hyper Sphere에서 나타내도록 수정을 할겁니다. image Soft Max 입니다.

  1. b는 0으로 만들어줍니다. 수식을 간단하게 만들기 위함입니다.
  2. WTj xi = ||Wj|| ||xi|| cos θ j (Hyper Sphere에서 표현할 수 있도록 연산을 각도에 대한 수식으로 바꿔줍니다.)
  3. L2 정규화를 통해 가중치 ||Wj|| = 1로 고정시킵니다.
  4. 값이 가진 각도를 알았기 때문에, 이제 Hyper Sphere상에 배치하기 위해서 임의의 s를 곱해줍니다. (s는 논문마다 30에서 64 사이의 값을 임의로 골라서 사용합니다 본 논문에서는 64를 사용합니다.)
  5. 이제 Embedding된 Feature가 HyperSphere에 흩뿌려질텐데, class간 간격을 넓히고(inter class discrepancy), class 내 간격은 줄이기 위해서(intra class Compactness) margin을 추가해줍니다.

그럼 Marin-Loss가 완성이 됩니다. image

이렇게 만들어진 Margin-Loss는 비슷한 다른 방법들,Sphere Face, CosFace등등의 방법들보다 좋은 성능을 보여줍니다. 우선, Additive Angular Margin은 Angular Margin이 Geodesic Distance와 정확하게 일치하기 때문에, 더 좋은 기하학적(Geometric)속성을 가지게 됩니다. 이는 다음 그림에서 잘 보여주고 있습니다. image SphereFace와 CosFace는 비선형적 Margin이지만, ArcFace는 선형 Margin입니다.

이 차이는 꽤 중요해서, SphereFace에서 초기 학습과정에서 발산을 피하기 위해 사용했던 Annealing 최적화 전략 없이도 좋은 학습 성능을 보여주게 됩니다.

*Fully Connected Layer에서는 Relu를 제거하는게 옳다고 합니다. -> Gelu나 Selu를 써도 될 거 같습니다. 이는 전에도 말씀드렸지만, Relu, Gelu, Selu같은 Activation Function들이 성능에 긍정적인 영향을 주는 것과 동일합니다. 표현의 자유를 한정하고, 학습이 특정 정보들에 의해서만 이루어질 수 있습니다.

이는 Sphere Face에서 FC의 마지막 Layer에서 Relu의 유무에 따른 벡터공간의 분포차이를 보여줍니다. image

Activation은 정말 많은 종류들이 있지만, 대부분의 의견들은 음수를 포함하는게 좋다는 쪽으로 기울어지고 있습니다. 밑에 있는건 여러가지 Activation Function들을 나타낸 것입니다. 출처 : https://mlfromscratch.com/activation-functions-explained/#gelu activation-functions