인공지능 논문정리/Vision 논문

[술술 읽히는 논문 요약] FaceNet 논문 - Triplet loss

jimmy_AI 2021. 10. 31. 18:48
반응형

FaceNet: A Unified Embedding for Face Recognition and Clustering

저자 : Florian Schroff, Dmitry Kalenichenko, James Philbin 외(구글 팀)

학회 : Computer Vision and Pattern Recognition(CVPR)

연도 : 2015년

논문 링크 : https://arxiv.org/abs/1503.03832

 

실험에서 구현하려고 한 것은?

A사람 앞 모습 <-> A사람 옆 모습 : 거리 0.9로 인식

A사람 앞 모습 <-> B사람 앞 모습 : 거리 1.2로 인식

=> 1~1.1 이정도를 기준으로 삼으면? : 같은 사람 / 다른 사람 구분 가능!

 

학습 방법(Triplet Loss)

Input

1 세트의 구성(같은 사람 얼굴 이미지 2개 + 다른 사람 얼굴 이미지 1개)

A 사람 사진 1 : Anchor : \(x^a\) -> 기준

A 사람 사진 2 : Positive : \(x^p\) -> 기준과 같은 사람 이미지

B 사람 사진 : Negative : \(x^n\) -> 기준과 다른 사람 이미지

 

Output

각 input 이미지들을 모델에 투영한 결과(f는 encoder에 해당) \(f(x^a)\), \(f(x^p)\), \(f(x^n)\)

 

원하는 식

$$ ||f(x^a) - f(x^p)||_2^2 + \alpha < ||f(x^a) - f(x^n)||_2^2 $$

 

해석 : AnchorPositive 사이는 가깝게, Anchor Negative 사이는 멀게하여 우리가 설정한 마진 \(\alpha\) 이상의 거리 차이를 벌린다. (정확히는 투영 벡터 사이의 2-norm 거리의 제곱)

 

예를 들면, \(\alpha = 0.1\) 이면, A사람 사진끼리 거리가 0.8, A사람과 B사람 사진 사이의 거리가 0.95 이러면 충분히 히 f라는 모델이 사람 간 구분을 잘하고 있다는 의미

 

반면에, A사람 사진끼리 거리가 0.8, A사람과 B사람 사진 사이의 거리가 0.85 이러면 다른 사람 이미지 사이에서 충분히 거리를 벌리지 못하고 있다는 의미

 

Loss 함수

전체 N 세트, 각 i번째 세트의 이미지에 대하여 다음과 같이 계산

 

$$ \sum_i^N max( ||f(x_i^a) - f(x_i^p)||_2^2  - ||f(x_i^a) - f(x_i^n)||_2^2 + \alpha , 0)$$

 

의미 : 각 세트의 이미지 데이터들에 모델 투영 결과에 대해서 만일 Anchor와 Positive 사이가 Anchor Negative 사이보다 충분히 가깝다면 0(거리 차를 \(\alpha\) 이상의 차이로 따돌림)

 

반면, Anchor와 Positive 사이가 Anchor Negative 사이에 비해 충분히 가깝지 못하다면, 거리차이 + \(\alpha\) 만큼의 패널티 부여(더 학습되어야 하는 모델)

 

ex) A사람 사진끼리 거리가 0.8, A사람과 B사람 사진 사이의 거리가 0.95 -> 패널티 0

A사람 사진끼리 거리가 0.8, A사람과 B사람 사진 사이의 거리가 0.85 -> 패널티 0.05 (0.8 - 0.85 + 0.1)

A사람 사진끼리 거리가 0.8, A사람과 B사람 사진 사이의 거리가 0.75 -> 패널티 0.15 (0.8 - 0.75 + 0.1)

 

Triplet Data Set Selection(hard positive / hard negative)

 

hard positive : 같은 사람 사진이긴 한데 꽤나 구분이 힘듦

hard negative : 다른 사람 사진이긴 한데 꽤나 구분이 힘듦

 

3개씩 이미지 데이터 세트를 구성할 때, hard positive / hard negative 를 잘 선별하는 것이 학습 성능 및 속도에 매우 중요함

 

직접 모든 이미지 쌍에 대한 거리 비교를 하는 것은 어렵기 때문에(이미지 개수의 제곱에 비례하는 횟수 필요),

다른 이미지 분류 모델에서 잘못 분류된 결과를 대상으로 선별하는 방법 사용

 

또한, 다음 초기 조건을 가지는 semi-hard 데이터셋도 고려

$$ ||f(x^a) - f(x^p)||_2^2 < ||f(x^a) - f(x^n)||_2^2 $$

 

결과

 

이미지 투영 모델(encoder에 해당)

 

CNN 구조를 기반으로 한 NN1, NN2 등 모델 사용

자세한 구조는 논문에 제시된 Table 1, Table 2를 참조

 

성능 평가

 

같은 사람 이미지 pair 중 예측 성공률 VAL, 다른 사람 이미지 pair 중 예측 성공률 FAR로 성능 평가

 

1. 모델의 FLOP 수가 많을수록(더 크고 복잡한 encoder 사용), VAL이 높아지는 경향은 뚜렷했음(Figure 4)

2. 학습 이미지가 고화질이었을수록 대체로 더 높은 VAL을 기록한 경향

3. 벡터 encoder의 임베딩 차원 수를 다양하게 실험한 결과 128차원일 때가 근소하게 VAL이 좋았음

4. 학습 이미지 데이터 수는 2억 6천만개까지 늘려보았을 때, 데이터가 많아질수록 VAL이 조금씩 향상되는 결과

5. 최종 분류에서 분류에 실패한 케이스를 살펴보면, 인상착의가 뚜렷하게 다른 경우, 실제로 닮았다고 생각할 수 있는 두 사람 사이 등에서 분류에 실패한 경우가 많았음