부스트캠프 AI Tech 2기 FaceNet
-
FaceNet
FaceNet은 각각의 얼굴 이미지를 128차원으로 임베딩하여 유클리드 공간에서 이미지간의 거리(거리가 얼굴 유사도를 나타냄)를 통해 분류하는 모델이다.
이 논문에서 Face-Vertication, Recognition, Clustering 세가지의 통합 시스템을 소개한다.
임베딩 공간의 squared L2 Distances(유클리드 거리의 제곱)은 얼굴 유사도와 곧바로 일치한다. 즉 같은 사람의 얼굴은 적은 거리를 가지고 다른 사람일 경우 큰 거리를 가지게 된다.
한번 이 임베딩이 만들어지고 나면 앞서 말한 것들은 쉽게 해결할 수 있다. Face-Verification은 두 임베딩 사이의 거리가 일정 차이를 넘는지, Recognition은 k-NN Classification 문제로, Clustering은 k-means나 agglomerative clustering 같은 것으로 바로 해결이 가능하다.
이전의 deep net 기반 얼굴 인식 접근은 known face identities의 집합으로 학습된 classification layer를 사용하였고 학습에 사용되었던 identities들의 집합을 넘어 얼굴 인식을 일반화하기 위한 방법으로 중간 병목층을 사용했다. 이 접근의 단점은 이 방법의 indirectness과 비효율성이다. 새로운 얼굴에 대해서 병목 representation이 잘 일반화 해주길 바래야 하며, 병목층을 이용하기에 얼굴마다의 representation size가 보통 매우 크기 때문이다. 최근에는 PCA를 이용하여 이런 차원문제를 줄였다.
이러한 접근과는 대조적으로 FaceNet은 LMNN(Large Margin Nearest Neighbor)을 기반으로 triplet loss를 이용하여 128차원 임베딩이 아웃풋이 되도록 곧바로 학습한다. 우리의 triplet은 2개의 일치하는 얼굴과 하나의 다른 얼굴로 이루어져 있으며 loss는 distance margin으로 일치하는 쪽을 불일치하는 쪽으로부터 분리해내는 데 초점을 두고 있습니다. thumbnails는 2D, 3D 정렬이 아니고 얼굴 영역에 맞게 잘려있으며 scale과 translation이 적용 되었다.
Triplet Loss
FaceNet은 학습과정에서 Metric Learning을 하기 위해 Triplet Loss를 사용했다. 학습시 미니배치안에서 어떠한 사람(Anchor)에 대해 같은 사람(positive)와 다른사람(negative)를 지정해 놓는다. 그리고 임베딩된 값들의 유클리드 거리를 구해 그림과 같이 Anchor와 Positive의 거리는 가까워지고 Negative와의 거리는 멀어지도록 학습을 스켰고 이러한 과정을 triplet loss로 구현하였다.
대괄호 안의 첫번째 항이 의미하는 것은 Positive와의 거리이고, 두번째 항은 Negative와의 거리이며 alpha는 마진을 의미한다. 따라서 L을 최소화한다는 의미는 Positive의 거리는 가까워지도록 하고 Negative와의 거리는 멀어지도록 한다는 것이다.
하지만 모데의 성능을 높이기 위해서는 Hard Positive(같은 사람이지만 다르게 보이는 사람)과 Hard Negative(다른 사람이지만 닮은 사람)와 같이 학습을 방해하는 요소를 제어할 필요가 있었고, 이러한 문제를 해결하기 위해 아래와 같은 식을 사용했다.
모델 구조
모든 실험에서 SGD를 이용한 CNN 활용.
참고자료
https://hwangtoemat.github.io/paper-review/2020-04-02-FaceNet-%EB%82%B4%EC%9A%A9/