[논문 읽기] FaceNet: A Unified Embedding for Face Recognition and Clustering

JeongMin·2025년 4월 9일

논문 읽기

목록 보기
3/5

이 논문은 재식별에서 많이 사용하는 triplet loss를 처음 도입한 논문이라 읽게 되었다.
얼굴인식 분야에서 triplet loss를 처음 도입한 논문이다.

I. Introduction

이 논문에서는 아래의 시스템을 통합하기 위한 시스템을 제안한다.

  • Face verification (얼굴 식별) - Is this same person?
  • Face Recognition (얼굴 인식) - Who is this person?
  • Face Clustering (얼굴 클러스터링) - Who are similar persons?

intro1

FaceNet 이전의 모델들과 다른 점은 CNN -> BottleNeck Layer -> PCA 같은 복잡한 과정을 거치지 않고, 모델이 128D embedding vector를 추출해내게 된다.
Embedding vector를 얻으면,

  1. 두 vector 사이의 거리에 threshold를 걸어 verification에 이용할 수 있고
  2. k-NN classification을 사용하면 recognition을 할 수 있고
  3. k-means나 agglomerative clustering을 사용하면 외형이 비슷한 사람끼리 묶을 수 있다

intro2

학습에는 Triplet Loss를 도입하여 임베딩 공간에서
같은 사람의 이미지는 가깝게, 다른 사람의 이미지는 멀게 학습한다.


II. Proposed Method

1. Triplet loss

1) Basic idea

Anchor-Positive 거리보다 Anchor-Negative의 거리는 멀어야한다.
'멀다'의 기준은 margin α\alpha로 정한다.
→ 같은 사람의 이미지끼리는 임베딩 공간에서 가깝게 위치해야하고, 다른 사람의 이미지끼리는 멀리 위치해야한다.


2) Equation

f(xia)f(xip)22+α<f(xia)f(xin)\|f(x_i^a)-f(x_i^p)\|_2^2 + \alpha < \|f(x_i^a)-f(x_i^n)\|

좌변을 우변으로 이항하면,

L=iN[f(xia)f(xip)22f(xia)f(xin)+α]+L = \sum_i^N[\|f(x_i^a)-f(x_i^p)\|_2^2 -\|f(x_i^a)-f(x_i^n)\|+ \alpha]_+
[x,0]+=max(x,0)[x, 0]_+ = \max(x, 0)

이 식을 최소화하는 문제가 된다.

배치 사이즈를 1이라고 가정하고, 식을 좀 더 쉽게 써보면

L=max(dapdan+α)L = \max(d_{ap} - d_{an} + \alpha)

2-1) dandap+αd_{an}\geq d_{ap}+\alpha

loss0

이 경우에는 이미 Anchor-Positive 거리 + α\alpha보다 Anchor-Negative 거리가 멀기 때문에 L=0L=0으로 더 이상 학습할 필요가 없는 상태이다.

2-2) dan<dap+αd_{an}< d_{ap}+\alpha

loss1

반대로 Negative가 더 가까이 있는 경우는 L>0L > 0이기 때문에 학습을 진행해야하는 상태이다.


3) Triplet Selection

Triplet은 어떻게 선택할까?

기본적으로 Triplet loss equation을 위배하는 쌍을 찾는 것이 빠른 수렴에 도움이 된다.

  • Anchor-Positive 거리가 먼 경우 (Hard Positive)
  • Anchor-Negative 거리가 가까운 경우 (Hard Negative)

이를 수식으로 나타내면 다음과 같다.

  • argmaxxipf(xia)f(xip)\arg\max_{x_i^p}\|f(x_i^a)-f(x_i^p)\| (Hard Positive)
  • argminxinf(xia)f(xin)\arg\min_{x_i^n}\|f(x_i^a)-f(x_i^n)\| (Hard Negative)

하지만 전체 데이터 셋에 대해 argmax/min을 구하는 것은 비효율적이고,
노이즈 이미지나 잘못된 라벨에 의해 학습이 불안정해 진다.

논문에서는 두 가지 방법을 소개한다.

1. Online Triplet Selection
모델의 최근 체크포인트를 사용하여 전체(or 일부) 데이터 셋에 대해 임베딩을 구하고 임베딩으로부터 hard triplet을 선택.

2. Offline Triplet Selection
매 배치마다 배치안의 데이터에서 현재 모델로 부터 임베딩을 구하고 hard triplet을 선택

논문에서는 online triplet을 다루고 있다.

논문에서의 Online Triplet Selection:

  • 각 미니배치 당 한 명에 대해 약 40장의 이미지 사용
  • 각 미니배치에 negative face도 랜덤하게 샘플
  • 배치 사이즈는 약 1800
  • Hard positive를 선택하는 것 대신 모든 anchor-positive를 선택
  • Hardest negative를 사용하면 local minima에 빠질 가능성이 있어 Semi-Hard Negative를 선택

4) Semi-Hard Negative

𝑓(𝑥𝑖𝑎)𝑓(𝑥𝑖𝑝)22<𝑓(𝑥𝑖𝑎)𝑓(𝑥𝑖𝑛)22\|𝑓(𝑥_𝑖^𝑎 )−𝑓(𝑥_𝑖^𝑝)\|_2^2 < \|𝑓(𝑥_𝑖^𝑎 )−𝑓(𝑥_𝑖^𝑛)\|_2^2

Anchor-positive 거리보다는 멀리 있지만
여전히 margin α\alpha만큼은 더 멀지 있지 못하는 경우를 선택한다


2. Deep Convolution Network

cnn

FaceNet은 CNN기반 네트워크이다.
ZFNet 기반 모델과 GoogleNet 스타일의 Inception 기반 모델을 소개하고 있고,
이 두 네트워크의 차이는 파라미터 수FLOPS에 있다.

이 외에도 모바일 기기에서 사용할 수 있을 정도로 작은 네트워크도 설계했다고 한다.

mobile


III. Results and Discussion

1) Embedding Dimensionality

  • 임베딩은 128 차원일 때 가장 좋은 성능을 보였고,
  • 더 큰 차원의 경우에는 유사한 성능을 보였지만, 같은 정확도를 얻기 위해 더 많은 학습이 필요

dim


2) Performance

dataset은 LFW (Labeled Face in the Wild), Youtube Faces DB에서 실험,
DeepFace, DeepId2+와 비교.

  • LFW:

    • 중앙 크롭만 했을때: 98.87% ± 0.15
    • Face Alignment 시: 99.63% ± 0.09
      → 얼굴 방향을 정렬했을 때 더 높은 성능을 보임
      → DeepFace 보다 오류가 7배 감소, DeepId2+ 보다 30% 감소
  • Youtube Faces DB:

    • 95.12% ± 0.39
      → DeepFace: 91.4%, DeepId2+: 93.2% 보다 개선

3) 정리

FaceNet은 CNN bottle neck layer를 사용하여 임베딩을 추출하고
PCA/SVM 등의 후처리를 필요로 하지 않고, 128차원의 임베딩을 추출하여
end-to-end로 Triplet loss를 사용하여 임베딩을 직접 학습한다.

profile
영상처리와 AI에 관심이 있는 학생입니다.

0개의 댓글