이번에는 ArcFace라는 Loss 논문을 가져왔습니다. 최근에 읽은 논문에서 공통적으로 사용하고 있는데, 인용되는 내용만 봐서는 왜 좋은지 모르겠어서 논문을 읽게되었습니다.
Introduction
DCNN (Deep Convoluntional Neural Networks)에서 얼굴 인식을 위해서는 discriminative power를 가진 loss가 필요하다고 합니다. 이러한 맥락에서 기존 Loss들은 성능이 잘 나오기는 하지만, 단점이 있다고 합니다.
- Softmax loss는 closed-set classification problem문제에서는 잘 작동하지만, open-set face recognition problem에서 feature의 특징을 충분히 학습할 수 없다고 합니다.
- Triplet loss는 triplets의 갯수에 따라 학습해야하는 조합이 늘어나고, negative를 찾는 문제 때문에 효율적인 모델 학습이 어려울 수 있다는 단점이 있습니다.
이 논문에서 제안하는 Additive Angular Margin Loss(ArcFace)는 학습을 안정화하고, 얼굴 인식 모델이 discriminative power를 향상시키도록 합니다. [그림 2]가 이 ArcFace의 작동 과정을 나타내는데요. 자세한 설명은 아래에 나오니 대략적인 흐름만 보고 넘어가면 됩니다.
어쨋든 이러한 ArcFace의 장점에 대해 논문 저자들은 아래와 같이 정리합니다.
- Engaging : geodesic distance를 직접 최적화하면서도, 이러한 과정에 대한 직관적인 설명을 할 수 있다.
- Effective : 성능이 좋다.
- Easy : 구현이 매우 쉬우면서 학습에 수렴하기도 쉽다.
- Efficient : 계산 복잡도가 매우 적게 추가되면서도, 병렬 GPU에 대한 지원도 쉽다.
Proposed Approach
ArcFace
[수식 1]은 classification에서 흔하게 사용하는 softmax loss입니다. Softmax loss는 얼굴 인식 분야에서도 흔하게 사용되었지만, intra-class (같은 클래스 내부) 끼리는 더 큰 유사도를 가지고, inter-class (서로 다른 클래스) 끼리는 차이점을 가지도록 feature embedding을 명확하게 최적화하지 않는다는 문제점이 있습니다. (얼굴 인식에서는 클래스는 많은데, 클래스마다 할당된 적은 이미지로 학습해야해서 이런 문제가 더 부각되는 듯 합니다.)
그래서 ArcFace에서는 이 softmax loss를 바탕으로 아래 5가지 부분을 수정해서 새로운 Loss로 만들었습니다.
- bias로 할당된 b_j를 0으로 고정 (simplicity)
- 기존의 logit인 W_j^Txi을 ||W_j||*||x_i||cosθ_j로 변경함 (여기서 θ가 feature와 weight사이의 각도를 의미)
- weight를 L2 정규화
- feature를 L2 정규화하고 s에 맞추어 re-scale
- feature와 weight 사이의 margin penalty를 뜻하는 m을 추가
이 부분들을 모두 수정하면 최종적으로는 [수식 3]과 같은 모습이 됩니다.
그럼 이렇게 수정을 하면 실제로는 어떻게 되는지에 대해서는 [그림 3]을 통해 확인할 수 있습니다. 실제로 Softmax같은 경우에는 잘 구분된 것 처럼 보이지만, 잘 확대해서 보면 클래스의 경계면에서 클래스끼리의 구분이 잘 이루어지지 않는 것을 확인할 수 있습니다. 그에 비해 AcrFace 같은 경우에는 inter-class 끼리의 분별력이 확실한 것을 볼 수 있습니다.
Comparison with SphereFace and CosFace
Numerical Similarity
[그림 4-a]는 학습 동안에 변하는 angle의 수치이고, [그림 4-b]는 최적 세팅에서 각각의 Loss를 학습한 결과입니다. CM이라고 적혀있는 것은 combined margin framework라고 하는데요.
이 CM은 [수식 4]와 같은 구조를 가지고 있습니다. ArcFace에서 사용하는 additive angular margin은 m_2입니다. SphereFace의 multiplicative angular margin은 m_1이고, CosFace의 additive cosine margin은 m_3입니다. 수치 분석 관점에서 서로 다른 패널티일지라도 결국은 intra-class의 컴팩트함을 추구하고, inter-class의 다양성을 학습하도록 되어있습니다. 그래서 잘 안보일 수도 있지만 [그림 4-b]를 보면, 이 CM에 대한 실험 결과가 꽤 비슷한 것으로 볼 수 있습니다. 그래서 이 마진들을 (cos(m_1θ + m_2) − m_3)와 같이 통합해서 사용할 수도 있다고 합니다.
Geometric Difference
마진을 두는 방법론이 결국은 목적이 비슷한데요. ArcFace만의 차이점이 존재하긴 합니다. Arcface의 경우에는 linear angular margin을 가지지만, 기존의 방법론들에서는 non-linear angular margin을 가지는 것을 확인할 수 있습니다. 또한, 선형적인 마진이 기하학적(geometric attribute)으로 더 좋다고 표현하고 있습니다. (예시에서는 학습시에 발산을 막는 경향성이 존재함)
Comparison with Other Losses
다른 loss 함수들도 ArcFace처럼 angular representation을 바탕으로 학습하도록 수정될 수 있습니다. 그래서 이 논문에서도 3가지에 대한 수정 예시를 보여주는데요.
Intra-Loss
수정된 Intra-loss는 sample과 GT 사이의 각을 줄이도록 해서, 클래스 내부의 compactness를 향상시키도록 설계되었습니다.
Inter-Loss
수정된 Inter-loss는 서로 다른 중심점 사이의 각을 증가시켜서 inter-class간의 차별성을 강화시킵니다.
Triplet-Loss
수정된 Triplet loss는 triplet sample들 사이의 각을 증가시키도록 설계되었는데요. Triplet loss가 arccos(x^{pos}_i x_i) + m ≤ arccos(x^{neg}_i x_i) 가 되도록 수정했다고 합니다.
Experiments
동일한 백본에서 학습한 결과를 보면 [표 2]와 같습니다. 모든 경우에서 ArcFace가 좋은 성능을 보입니다. 어떻게 보면 비슷한 컨셉을 가진 SphereFace와 CosFace와 비교해봐도 좋은 성능을 보입니다.
그리고 이러한 Loss들이 강조하는 것이, angle이 좁게 나와야 그만큼 boundary가 모호해지는 문제가 없다는 것인데 이에 대한 실험 결과입니다. 이 각도가 작을수록 좋다고 보시면 되는데요. 일단 ArcFace 같은 경우에는 W-EC가 weight angle의 평균이고 W-Inter가 최소값인데요. 이 격차가 큰 것을 볼 수 있습니다. 이 말은 이러한 각도가 클래스 불일치를 표현할 수 없다는 뜻이 됩니다. (W-EC가 낮은 ArcFace가 학습을 잘 했다는 뜻)
또한 [표 3]의 triplet loss를 보면 intra에서의 압축은 좋지만, inter에서의 분별력이 떨어집니다. [그림 6]을 보면 실제로 triplet loss보다도 ArcFace가 Negative-Positive 간의 구분이 잘 되는 것을 볼 수 있습니다.
Conclusion
다른 실험들도 많긴 한데, 특정 데이터셋에서의 성능 비교 실험 결과들이라 관심 있으신 분들은 찾아서 보시면 좋을 것 같습니다.
1. 요즘 읽고 계시는 논문에 ArcFace loss가 자주 등장했다고 하셨는데, 현재 어떤 분야의 논문을 읽고 계신건가요? face recognition 이외의 task에도 소개해주신 loss가 사용되고 있는지 궁금합니다.
2. 병렬 GPU에 대한 지원도 쉽다는 점을 저자가 위 loss의 장점으로 언급했다고 하셨습니다. loss의 어떤 점이 이런 하드웨어와 연관되는 장점을 가져올 수 있는지 잘 이해가 되지 않는데, 간단하게 설명해주실 수 있나요?
Object-centric image retireval 논문들을 읽고 있는데, DELG와 DOLG같은 방법론에서 이 Loss를 사용하고 있습니다. 병렬 GPU에 대한 부분은 ArcFace 자체가 구현 자체가 간단해서 그렇습니다. 설명에서도 Softmax Loss에서 시작해서 약간의 변경을 하는 것을 볼 수 있는데요. 이러한 부분들 때문에 GPU 지원도 용이합니다.
좋은리뷰 감사합니다.
초반부에 closed-set classification problem 과, open-set face recognition problem 를 말씀해 주셨는데 각각 무엇을 의미하는지 간단하게 설명 해 주실 수 있나요?
open-set face recognition problem은 학습 데이터 셋에 없는 데이터를 예측하는 문제고, closed-set classification problem은 석준님이 생각하시는 일반적인 분류 문제라고 생각하시면 됩니다.
좋은 리뷰 감사합니다.
Geometric Difference에서 마진을 두는 방법론의 목적이 비슷하다고 하셨는데, inter-class간의 분별력을 기르기 위해서인가요??
또한 ‘선형적인 마진이 기하학적(geometric attribute)으로 더 좋다고 표현하고 있습니다. (예시에서는 학습시에 발산을 막는 경향성이 존재함)’이라고 하셨는데 그림 5를 통해 확인할 수 있는 것인가요?? 어떻게 발산을 막아주는 지 궁금합니다.
Geometric Difference에서 마진을 두는 방법론의 목적이 비슷한건 inter-class간의 분별력을 키우는 것이 맞습니다. 선형적인 마진에 대한 내용은 저도 잘 모르겠습니다. 그림 5를 통해 선형과 비선형의 차이를 보여주고, 본문에 예시로서 발산을 막을 수 있다고 하고는 있는데요. 제가 더 찾아봐도 마땅한 자료가 없네요. 다른 자료들에서도 기하학적으로 선형 마진이 비선형보다 좋다고만 설명하고 있습니다. 이 부분은 저도 계속 찾아보는 중이라 좋은 자료 찾으면 공유해드리겠습니다.
안녕하세요 좋은리뷰 감사합니다. 그림 3에서 제안하는 방법론을 사용하면 class간 분별력이 좋아진다고 하였는데 class간 연관 혹은 종속관계가 있는 경우에도 해당 방법론이 도움이 되나요? 혹시 실험에서 사용한 데이터셋 중 그러한 성격을 갖는 예시가 있는지 궁금합니다.
감사합니다
연관 혹은 종속 관계에 해당하는 데이터셋이 무엇인지 잘 모르겠습니다. 해당 Loss는 얼굴 인식 task에서 사용하기 위해 제안되었기 때문에 사용되는 데이터셋은 모두 얼굴 데이터셋입니다.