[Paper] https://arxiv.org/pdf/2109.09416v4.pdf
[Github] https://github.com/fdbtrs/ElasticFace/tree/main
이 논문을 읽기 전 ArcFace 논문을 먼저 읽어보시길 추천드립니다!
1. Introduction
최근 face recognition 분야에서 높은 성능을 달성하기 위해 Triplet loss, n-pair loss, contrastive loss 등이 사용되어 왔습니다. 하지만 이 loss 들은 class의 갯수가 많아질수록 조합의 수가 폭발적으로 증가하게 되고 이는 학습에도 엄청난 과부하를 가져옵니다. 가장 많이 사용되는 softmax loss는 이러한 문제점은 없지만 feature들을 최적으로 임베딩 시키기 어렵습니다. 이러한 문제점을 해결하기 위해 각도와 margin을 사용하는 loss 함수들이 등장했습니다.
본 논문에서는 softmax loss, Cosine Softmax Loss, Angular Margin Penalty-based Loss 유형의 loss들에 설명하고 이 loss들의 한계점을 개선한 Elastic Angular Margin Penalty-based Loss (ElasticFace) 함수를 새롭게 제안합니다.
2. ElasticFace Loss
본 논문에서 제안하는 ElasticFace Loss는 기존의 ArcFace나 SphereFace처럼 고정된 penalty margin을 사용하던 것과 다르게 가우시안 분포에서 margin값을 랜덤하게 추출하여 모델에 유연성을 추가한 방법입니다. 매 학습마다 임의의 margin 값들을 통합하는 방식으로 진행되므로 intra-class와 inter-class간의 거리를 최적화 할 수 있습니다. ElasticFace Loss에 대해 설명하기 전에 Softmax Loss, Cosine Softmax Loss, Angular Margin Penalty-based Loss에 대해 설명하겠습니다.
(a) Softmax Loss
multi-class classification 문제에 가장 많이 사용되는 loss 함수입니다. logistic 함수(softmax activation function)의 output과 ground-truth 사이에 cross-entropy loss 를 적용하는 방식으로 사용됩니다. 아래는 softmax loss의 수식입니다.
x는 feature representation 을, y는 정답 label을, c는 전체 class 갯수를 의미합니다. 최종 output은 x가 정답 label y로 맞게 분류될 확률을 의미합니다.
하지만 softmax 함수는 임베딩된 값들을 latent space에 나타냈을 때, 각 class 중심 간의 최소 거리에 대한 제한이 없기 때문에 inter-class 사이의 거리는 멀게, intra-class 사이의 거리는 가깝도록 최적화하기 어렵습니다.
(b) Cosine Softmax Loss
위 softmax 함수의 단점을 개선하기 위해 최종 feature와 학습된 weight 사이에 cosine을 적용하여 등장한 loss 함수입니다. 아래는 Cosine Softmax Loss 함수의 수식입니다.
softmax 함수의 식에서 bias를 0으로 고정하고 wx부분을 아래와 같이 수정합니다.
여기서 θ가 바로 마지막 분류기에 해당하는 fully-connected layer의 weight와 feature x가 이루는 각도입니다. 이 weight와 같은 class인 경우에는 중심값과 가까워져야 하기 때문에 두 값이 이루는 각도인 θ가 작아져야 하고, 다른 class라면 각도 θ가 커져야 합니다. 하지만 이 방법 역시 feature들이 명확하게 최적화되기에는 어려움이 있습니다. 이를 해결하기 위해 margin이 도입되었습니다.
(c) Angular Margin Penalty-based Loss
(b)의 수식에서 각도에 margin이 추가되었습니다. ArcFace Loss가 여기에 속합니다.
위 수식에서 m1, m2, m3 가 margin에 해당합니다. SphereFace, ArcFace, CosFace에서 이 margin 값을 설정하는 다양한 방법들을 제시했습니다. 하지만 이 margin값을 설정하는 것 자체가 굉장히 어려운 문제입니다. margin 값이 너무 크면 모델이 잘 수렵하지 않고 너무 작으면 class들 사이의 분별력이 떨어지게 됩니다. SphereFace, ArcFace, CosFace 이 세 방법들은 데이터들이 class의 중심값 주변에 균일하게 분포해 있다는 가정 아래 margin 값을 설정해주었습니다. 하지만 이러한 가정은 데이터들 간의 변동이 큰 경우 문제가 될 수 있습니다.
(d) Elastic Angular Margin Penalty-based Loss (ElasticFace)
ElasticFace는 가우시안 분포에서 추출한 임의의 값들을 margin으로 사용합니다. 아래는 ArcFace 와 CosFace에 임의의 margin값들을 적용했을 때의 수식입니다.
여기서 E(m, σ)는 평균이 m이고 표준편차가 σ인 가우시안 분포에서 임의의 값을 반환하는 정규함수입니다. 학습동안 랜덤한 margin 값을 생성하는 것을 반족하고 이는 모델이 class를 옳게 분류 할 수 있도록 유연성을 추가합니다. 아래 그림은 ArcFace, ElasticFace-Arc, CosFace and ElasticFace-Cos의 decision boundary(결정 경계)를 시각화한 그림입니다.
(e) ElasticFace +
ElasticFace를 확장한 방법입니다. 학습동안 class내의 변화를 관찰하고, 이를 이용해 class 중심값에 얼마나 가까이 있는지를 바탕으로 데이터에 margin 값을 부여합니다. 이를 통해, class 중심에서 멀리 떨어진 데이터는 더 큰 penalty margin을 갖게 되고 중심에 가까워지도록 push되고 이미 중심에 가까운 데이터는 덜 attention되는 효과를 얻을 수 있다고 합니다. 수식은 따로 나와있지 않네요 :(
(f) Visualization
각 loss 함수들이 class를 얼마나 잘 분리했는지를 시각화 한 것입니다. 가장자리에 적혀진 숫자는 각 class feature embedding 의 표준 편차 평균입니다. 값이 작을수록 동일 class들끼리 잘 모여있음(압축성이 높다)을 의미합니다. 위 그림을 통해서 EalsticFace와 EalsticFace +는 ArcFace보다 더 나은 class 압축성과 서로 다른 class들 사이를 잘 분리했음을 알 수 있고, EalsticFace와 EalsticFace +간의 class 간 변동 차이는 적음을 확인할 수 있습니다.
3. Experiments
3.1 Parameter Selection
임의의 margin값을 추출하는 가우시안 분포 함수의 평균과 분산에 따른 성능 비교실험입니다.
3.2 다양한 모델 비교
AgeDB-30, CPLFW, CFP-FP 데이터 셋에 대해 가장 높은 성능을 보이고 있는 것을 확인할 수 있습니다.