본문 바로가기
AI Study/Paper Reading

[Paper]FaceNet: A Unified Embedding for Face Recognition and Clustering

by 하람 Haram 2022. 9. 19.
728x90

FaceNet은 얼굴 이미지로 부터 유클리드 공간

(distance : measutre of face similarity)의 관계를 학습한다

 

기존 방법 : Bottleneck Layer

Bottleneck layer :

핵심은 1x1 convolution (Pointwise Convolution)

-> parameter L 1x1xInput Channel x Output Channel

-> Feature Map(Output channel)을 줄이거나 키울때 사용

1.First Channel :

Input Image (320 x 320), channel 수 : 256

2. Second Channel :

Input Channel 256 -> Output Channel 64

256을 64로 채널을 강제로 축소한 이유는 오로지 연산량을 줄이기 위함입니다.

3. Third Channel:

Input Channel 64 -> Output Channel 64

1x1 Convolution에는 Spatial(공간적인) 특징을 가지고 있지 않다.

Convolution 연산이 공간적인 특징을 추출하기 위해선 Kernel이 최소 2 이상 되어야 한다.

3x3 Convolution은 특성을 추출하는 역할.

3x3 Convolution 연산은 = 3 x 3 x Input Channel x Output Channel 입니다. ( 3 x 3 x 64 x 64 )

3x3 Convolution은 1x1 Convolution 보다 9배 연산량이 많기 때문에, 1x1 Convolution에서 채널을 줄인 후에 3x3 Convolution에서 특성을 추출한다.

4. Fourth Channel:

Input Channel 64 -> Output Channel 256

CNN은 Feature Map의 특성이 많으면 많을수록 학습이 잘 되기 때문에, 1x1 Convolution으로 강제적으로 채널을 증가시켜준다.

Standard는 Channel 수가 적을지라도, 3x3 Convolution을 두 번 통과했고,

BottleNeck은 1x1, 3x3, 1x1 순으로 Convolution을 통과하고, Channel 수는 4배 정도 많지만, Parameter가 세 배 정도 적다.

단점

indirectness(간접적임) and inefficiency(비효율적임)

(새로운 얼굴에 대해서 bottleneck representation이 잘 일반화 해주길 바래야 하며

병목층을 이용하기에 얼굴마다의 representatipon size가 보통 매우 크다).

최근에는 PCA(고차원의 데이터를 저차원으로 환원해주는 통계학적 기법)를 이용하여

이런 차원문제를 줄였다.

but this is linear transformation that can be easily learnt in one layer of the network

FaceNet : Deep Conv Network

이미지마다 Deep Conv Net을 사용하여 유클리드 임베딩을 학습하는 것.

세가지 관심사

1. Face-Verification(동일인물인지)

2. Recognition(누구인지)

3. Clustering(공통되는 사람들 찾기)

Euclidean embedding per image using a deep convolution network

임베딩 공간의 squared L2 Distances(유클리드 거리의 제곱)을 이용하여서 얼굴 유사도를 구함

즉 같은 사람의 얼굴은 적은 거리를 가지고 다른 사람일 경우 큰 거리를 가지게 된다.

Face-Verification: 두 임베딩 사이의 거리가 일정 차이를 넘는지

Recognition: k-NN Classfication문제

Clustering: k-means나 집적(agglomerative) clustering

LMNN

FaceNet은 LMNN(Large margin nearest neighbor)을 기반으로 triplet loss를 이용하여 128차원 임베딩이 아웃풋이 되도록 곧바로 학습

triplet은 2개의 일치하는 얼굴과 하나의 다른 얼굴로 이루어져 있으며 loss는

distance margin으로 일치하는 쪽을 불일치하는 쪽으로부터 분리해내는 데 초점을 두고 있다.

(matching face thumbnails and non-matching face thumbnails)

-> These thumbnails are tight crop(자름) of the face area (scale and translation 적용)

-> Curriculum learning 방식을 채택

* Curriculum learning

https://ronan.collobert.com/pub/matos/2009_curriculum_icml.pdf

- 단순히 주어진 데이터들을 전부 학습하는 데 사용하는 게 아니라 데이터들을 학습에 도움이 되도록 고르고 정렬시켜 학습시키는 방법.

- 처음에는 모델한테 쉬운 샘플만 보여주다가 점차 어려운 샘플을 보여주는 것.

- 학습 시에 전체 데이터를 한번에 학습시키는 것보다 쉬운 것과 어려운 것을 정의

- [쉬운 것->어려운 것] 순으로 학습하라는 의미

제시하는 전략 : novel(새로운) online negative exemplar(샘플) mining strategy

-> 훈련함에 따라 지속적으로 triplet 난이도를 증가시키는 전략

목표 : Hard-positive mining techniques 를 찾기

(한사람의 임베딩에 대한 구형의(spherical) Cluster를 강화하는 학습)

Related Work

1. M. D. Zeiler and R. Fergus. Visualizing and understanding convolutional networks. CoRR, abs/1311.2901, 2013.

2. C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, and A. Rabinovich. Going deeper with convolutions. CoRR, abs/1409.4842, 2014.

(base on)

Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, and L. D. Jackel. Backpropagation applied to handwritten zip code recognition. Neural Computation, 1(4):541–55

D. E. Rumelhart, G. E. Hinton, and R. J. Williams. Learning representations by back-propagating errors. Nature, 1986. 2, 4

우리는 engineered된 특성을 사용하기보다는

여러 포즈, 조명, 다양한 조건을 얻기 위해 large dataset of labelled faces를 사용한다.

이 논문에서 우리는 최근에 컴퓨터 비전 커뮤니티에서 큰 성과를 거둔 두개의 다른 deep net구조를 살펴볼 것이며, (두개다 CNN을 사용)

첫번째 모델은 Zeiler&Fergus Model에 기반을 둔 multiple inter- leaved layers of convolutions, non-linear activations, local response normalizations, and max pooling layers로 이루어져 있다.

FaceNet은 여기에 1x1xd의 conv layer를 추가.

두번째 모델은 최근에 ImageNet 2014애 입상한 Inception model of Szegedy에 기반을 두었다.

이 두 네트워크는 여러개의 다른 conv layer와 pooling layer를 병렬적으로 실행하는 mixed layers를 사용한다

FaceNet은 그 결과를 이어붙인다.

Using Large Dataset Of Labelled Faces

Deep net을 이용한 최근의 작업과 비슷하게 우리의 접근 방식은

순수하게 image의 픽셀로부터 얻어진 표현을 학습하는 data driven method이다.

Triplet Loss

Embedding은 f(x) ∈ R^d로 나타내어지며

이것은 이미지 x를 d차원의 유클리드 공간에 임베딩시킵니다.

(d-dimensional Euclidean space)

이 임베딩의 결과가 거리가 1인 d차원 hypersphere에 존재하도록 한다.( ||f(x)||2 = 1)

FaceNet은 특정 사람의 Anchor 이미지가 다른 모든 negative이미지보다 positive이미지에 가깝게 보장하려고 한다.

$\combi{x}_i^a\ =\ Anchor\ Image$xai = Anchor Image

α is a margin that is enforced between positive and negative pairs.

는 마진(하이퍼파라미터)을 의미) -> 뒤에 설명

positive와의 거리보다 negative의 거리가 다른 클래스라는 것을 보증할만큼 충분히 멀다는 걸 보증해 줄 파라미터

T is the set of all possible triplets in the training set and has cardinality N

( T: 훈련세트에서 가능한 모든 삼중항)

( N: 특정 집합의 유니크한 값의 개수)

Loss Function (최소화)

[value] = max(value, 0)

올바르게 임베딩 됐을 경우(학습이 잘 되어있는 경우) : 0,

아닌 경우 :그 값 자체를 가지게 됨

(negative와의 거리가 positive보다 충분히 멀지 않을 경우)

위의 loss 값을 줄인다 :

전체의 오류 합을 줄여나가는 것을 의미

위 식의 최저값은 0 ( 모든 데이터들이 원하던 대로 올바르게 임베딩된 경우)

대부분의 삼중항들의 위의 식을 만족하지만 이는 학습에 도움을 주지 않음 (느림 수렴의 원인)

임의로만 이미지를 선택한다면

같은 클래스일 경우보다 다른 클래스일 경우가 압도적으로 더 많기 때문에

triplet을 만든 후 비교한다면 positive보다 negative가 큰 경우가 더 많을 것이다.

즉 위의 식에서 loss가 0인 경우가 많아지고 이는 결국 Cost Function이 완만해지는 결과를 낳음

그 결과 학습 효율 느려지게 된다

ㅡ> 그래서 우리는 Hard Triplet을 선택하는 것이 중요하다 (Triplet Selection)

Triplet Selection

1. 제어 사항(학습을 방해하는 요소) 제거

Hard Positive(같은 사람이지만 다르게 보이는 사람)

Hard Negative(다른 사람이지만 닮은 사람)

Hard Positive : 전부 학습을 진행

Hard Positive

Hard Negative : 아래의 조건을 적용(다음 조건을 만족하는 경우에만 학습)

Hard Negative

이 두 Hard Positive 와 Hard Negative 가 비슷한 Anchor를 찾고 싶다

->이러면 적당한 margin 값을 찾을 수가 있기 때문

한계

모든 Training Data에 대해 argmax 와 argmin 을 구할 수 가 없다.

(또한 대부분이 label이 잘못된 것들 아니면 얼굴이 잘 안나온 이미지들일 것이다)

해결 방안

1. Offline

Generate triplets offline every n steps, using the most recent network checkpoint and computing the argmin and argmax on a subset of the data

최근 network checkpoint를 이용하고 데이터의 일부로 argmin과 argmax를 계산해서 매 스텝마다 triplet을 offline으로 생성하는 것이다.

2. Online

Generate triplets online. This can be done by selecting the hard positive/negative exemplars from within a mini-batch.

triplet을 online으로 생산하는 것이다. 이건은 mini-batch에서 hard positive/negative예시를 고르는 것으로 이루어질 수 있다.

"FaceNet은 Online generation에 집중"

몇천개의 examplar에서 large-mini-batch를 사용하여 argmin과 argmax를 mini-batch내에서 계산함

※주의

의미 있는 Distance(anchor, positive)를 구하기 위해서는

특정 인물에 대한 최소한의 exemplar개수가 mini-batch속에 존재해야한다

FaceNet은 mini batch 마다 한 사람 당 약 40개의 얼굴을 묶고 Negative Faces를 랜덤으로 골라 각각의 mini-batch에 추가함

All Anchor Positive Set

Hard negative

시스템 그대로 유지

Hard positive

hardest positive 를 고르는 것 대신

mini-batch내의 모든 anchor-positive쌍을 골라 사용(all anchor positive set)

(결과가 꽤나 만족스럽다고 합니다)

Offline Generation도 연구

(Hard Negative에 아래 조건을 달게 된 이유 & margin (α) 가 추가된 이유)

offline generation연구는 더 작은 batch size를 사용.

hardest negative를 고르는 것은 bad local minima에 빠지게함

( f(x)=0 ) 인 경우 모델이 붕괴되기도 함

해결 방법 "Semi- hard"

Hard negative를 선택할 때는 다음의 식을 사용

semi - hard

ㅡ> f(x)가 0이 되는 것을 막아주고 적당한 거리에 있는 negative를 선택하게 해줌

다음과 같은 조건을 만족하는 hard-negative를 semi-hard라 부름

anchor와 positive exemplar사이의 거리보다 더 멀지만

거리가 여전히 ahchor-positive distance와 가깝기 때문에 (argmin이므로) 여전히 hard하다).

이 negatives는 내부의 margin α에 의존적이다

올바른 삼중항 선택 -> 빠른 수렴을 야기한다

 

1. SGD(Stochastic Gradient Descent)의 수렴 향상을 위해

small mini-batch를 사용

2. inplementaion details을 고려

(예시 : 40개의 positive를 뽑고 negative 랜덤으로 선택)

->10에서 수백개의 exemplars들로 이루어진 batch를 더 효율적으로 만듬

3.batch size에 대한 주요 제약 조건 :

mini-batch로부터 hard 관련 triplets를 고르는 방법

(대부분의 실험에서 약 1800exemplar정도의 batch size를 사용)

Deep Convolution Networks

세팅

learning rate : 0.05 (모델을 마무리 할때 더 낮추기도 함)

margin α : 0.2

model initialize : Random

cpu cluster에서 1000~2000시간 정도 훈련

모든 모델은 non-linear activation함수 때문에 조정된 linear unit을 사용.

"Trade off via Parameter(FLPS) and Accurarcy"

case 1. In DataCenter

데이터센터에서 실행되는 모델은 많은 파라미터를 가질 수 있고 매우 좋은 컴퓨터 성능을 필요로 할 수 있다.

관련 논문 : Visualizing and Understanding Convolutional Networks[22]

원래의 Zeiler&Fergus 구조의 conv layer사이에 1 x 1 x d convolution layer를 추가 하였다

(총 1억 4천만개의 파라미터를 가지며 이미지마다 약 16억의 FLOPS가 필요)

(NN2가 가장 큰 네트워크 모델임)

case 2. In Mobile

( 파라미터 개수와 FLOPS에 따라 4가지(NNS1, NNS2, NN3, NN4)로 나뉨 )

핸드폰에서 돌아가는 모델은 적은 파라미터를 가져야하고 적은 폰 메모리에도 맞아야 한다.

Going deeper with convolutions [16] https://arxiv.org/pdf/1409.4842.pdf

GoogLeNet style Inception models에 기반

필터의 개수와 깊이 에서 사이즈가 줄어서 폰에서도 실행이 가능하다

(20X(6.6~7.5M)정도의 파라미터를 가지며 5X(500M~1.6B)정도의 더 적은 FLOPS까지만 필요)

NNS1 : 26M parameters , 220M FLOPS per image.

NNS2, 4.3M parameters 20M FLOPS.

NN3 is identical in architecture but has a reduced input size of 160x160.

NN4 has an input size of only 96x96, thereby drastically reducing the CPU requirements (285M FLOPS )

입력 사이즈를 줄이면 higher layer에서 5X5 conv를 사용하지 않음 (정확도 손실 감수)

첫번째 그림 -> FLops vs Accuravy Trade off

 
 

두번째 그림

ROC for FAR < 1E-4에서의 sharp drop는 테스트 데이터 속의 잘못된 라벨링을 의미

(매우 낮은 false accept rate에서, 하나의 잘못 라벨링된 이미지는 정확도 곡선에 메우 큰 영향)

Dataset and Evaluation

,

face verification(확인)

주어진 두 얼굴쌍에 대해 구해진 Squared L2 distance

두 얼굴이 같은지 다른지를 결정할 수 있는지를 보는 것

(두 임베딩 벡터 사이의 거리가 특정 threshold D(xi, xj) 를 넘는지를 이용하여

same 이냐 different 이냐를 판단)

-동일 인물에 대한 얼굴쌍 Psame => D(xi, xj) < d

-서로 다른 인물에 대한 얼굴쌍 Pdiff => D(xi, xj) > d

1. 같은 사람일 경우 (true accept) : 잘 분류

2. 잘못 매칭된 경우(false accpt) : 같은 사람이라고 잘못 분류된 집합

3. 주어진 거리 d 에 대한 Vaildation rate 와 False accept rate

(모델 평가지표로 활용)

VAL = True Positive, FAR = False Positive 라 생각

Hold Out Test Set

같은 훈련셋과 같은 분포를 가지지만 다른 사람들로 이루어진 약 100만개의 이미지를 세팅.

Evaluation을 위해, 우리는 이를 20만개씩, 5개의 disjoint set으로 나눔.

FAR, VAL rate는 10만 X 10만 이미지 쌍에 대해 구함

Standard error는 5개 Set을 통틀어 기록

Personal Photos 사용

training set과 같은 분포를 가진 test set이지만 매우 명확한 label을 가지기 위해 수작업.

3사람의 약 1만2천개의 사진 모음으로 이루어져있다.

LFW(Labeled Faces in the Wild) 사용

(얼굴 검증을 위한 de-facto academic test set)

YouTube Faces DB 사용

https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.230.5417&rep=rep1&type=pdf

-> verifying pairs of image 대신 Pair of videos 를 사용

8M명의 서로 다른 사람으로 이루어진 100M~200M의 training face thumbnails를 사용

face detector를 각각 이미지마다 실행하여 각 얼굴 주변에 딱 맞는 바운딩 박스가 생성.

이 face thumbnails들을 각 네트워크의 input size로 resize시킨다.

FaceNet의 input size는 96 x 96 ~ 224 x 224pixels.

 
 

80 x 80 pixel 까지는 성능 저하가 크지 않는 것을 보여준다

(네트워크는 220x220 사이즈의 이미지로 학습되었으며

더 낮은 해상도의 얼굴이미지로 학습시킨다면 더 향상가능)

작은 임베딩은 정확도의 손실이 존재하나

모바일 기기에서 사용되어질 수 있습니다.(크게 떨어지지 x )

더 많은 이미지를 사용했을 경우, 여전히 학습은 더 빨라지겟지만 그 효과는 점점 줄어들 것이다.

Performance on LFW

모델을 LFW를 사용해 평가.

L2거리의 threshold를 고르기 위해 9개의 훈련셋으로 나눔.

classification은 10개로 나누어진 테스트 set으로 실행되었고 8번째를 제외한 모든 테스트에 대해 선택된 최적의 threshold는 1.242이다.(8번째는 1.256)

두가지 평가 방식

1. Fixed center crop of the LFW provided thubnail

2. Face detector를 사용하여 얼굴을 딴 다음 자르기.

(두개의 이미지에서 얼굴 할당 실패) ㅡ> LFW alignment를 사용

1번 방법 : 98.87%의 정확도

2번 방법 : 99.83%의 정확도

Performance on Youtube Faces DB

Face detector가 각 영상에서 찾아낸

모든 첫 100프레임의 모든 쌍의 평균 유사도를 사용. :95.12%의 정확도

모든 첫 1000프레임을 사용했을 때 95.18%의 정확도

Face Clustering

순수한 Verification이 이난 얼굴을 clustering 해보면 놀라운 결과가 나온다.

It is a clear showcase of the incredible invariance to occlusion, lighting, pose and even age.

( 나이 조명 혈색에 영향을 받지 않음 ) -> 신기하네...

Summary


FaceNet은 face verification을 위한 유클리드 공간에 직접적으로 임베딩하는 법을 학습하는 방법을 제시.

이는 CNN bottleneck layer를 사용하거나 추가적인 후처리를 해야하는 다른 방법들과는 다르다.

FaceNet의 end-to-end training은 초기 설정을 간단하게 하고 성능을 향상시키는 수작업과 같은 손실을 최적화하는 것을 직접적으로 보여준다.

FaceNet의 다른 장점은 최소한의 조절(얼굴 주변 영역을 정확히 자르는 것)만이 필요하다는 것.

복잡한 3D alignment 같은거 할 필요가 없음

추후 작업하겠다고 한거

에러케이스에 대한 더 나은 이해와 모델을 향상시키는 것

모델 사이즈를 줄이기

cpu필요요건을 줄이기

매우 긴 훈련 시간을 개선하기.

요약

FaceNet

triplet loss 학습 방법을 사용하여

이미지로부터 임베딩 벡터를 직접적으로 생성해내는 모델

참고자료

https://arxiv.org/abs/1503.03832

https://marades.tistory.com/9

https://butter-shower.tistory.com/233

https://marades.tistory.com/10

https://cake.tistory.com/44

728x90