Face Recognition Part

Lee Hyun Joon ·2022년 7월 30일
0

ML_Basic

목록 보기
13/14

Face vertification vs Face recognition

Face vertification은 input image 하나에 대해 해당 실존(true) 이미지와 일치하는지 체크하는 과정입니다. Face identification은 database 에서 k개 중 제일 똑같다고 판단되는 1개를 추출하는 과정입니다. database에 많은 데이터를 저장해야하며 vertification 과정보다 상대적으로 오래 걸리는 것이 특징입니다.
Face recongition은 identification과 vertification과정을 같이 진행합니다.
Face recognition은 one shot learning problem을 가지고 있습니다

Face Recognition

one shot learning problem을 갖고 있는데, 이 Recognition은 similiarity function을 훈련시킨다고 합니다.
input image와 실제로 저장된 image가 비슷하거나 같다고 판단되면 "same", 다르다면 "Different"라고 판단합니다.

이 과정에서 "Siamese network"를 사용합니다.

https://tyami.github.io/deep%20learning/Siamese-neural-networks/


이 이미지에서도 보시다시피 이전 내용들과 다른 매력적인 특징을 가지고 있습니다.
우선 input2를 실제 저장된 사람의 얼굴 이미지, input1을 현재 입력된 이미지라고 가정하겠습니다. 이 network는 서로 공유가 되어 같은 logic을 근거로 Embedding된 vector 결과가 나타납니다.
https://medium.com/swlh/one-shot-learning-with-siamese-network-1c7404c35fda
이때 d(x1,x2)d(x_1,x_2)라는 함수를 근거로 비슷하거나 같은 이미지인지, 다른 이미지인지를 수치적으로 판단합니다. 만약 같은 이미지라면 dd함수의 값이 작고, 다르다면 상대적으로 dd함수의 값이 큽니다.

Triplet loss

Triplet loss는 3개의 이미지를 가지고 훈련하는 방식입니다.

A,P,N라고 불리며, 각각 Anchor(db에 있는 저장 이미지), Positive(positive한 이미지), Negative(Negative한 이미지)라고 불립니다.
👇👇 Triplet loss 공식
f(A)f(P)22f(A)f(N)22+α0∣∣f(A)−f(P)∣∣^2_2 −∣∣f(A)−f(N)∣∣^2_2 +α≤0
margin 역할을 하는 ααd(A,P)d(A,P)d(A,N)d(A,N)이 모두 0이 되는 경우를 배제하고자 사용합니다.
L=max(f(A)f(P)22f(A)f(N)22+α,0)L=max(∣∣f(A)−f(P)∣∣^2_2 −∣∣f(A)−f(N)∣∣^2_2 +α, 0)
Loss의 값은 Triplet loss와 0 중의 max 값을 가집니다.
이 과정에서 αα는 값이 작아질수록 더 어려운 분류도 가능한 Triplet loss를 구현하는 셈이기에 hard task라고 합니다.
여기서 one shot learning이라는 Face Recognition인데 A,P,N 이라는 데이터셋만 봐도 one shot learning problem이 아니지 않냐는 생각이 드실 수 있습니다. 강의에서는 학습부터 one shot learning problem을 논하는 것이 아니라 실제로 test하거나 사용하는 과정에서 겪는 문제라고 설명해주셨습니다. 이 내용을 토대로 학습부터 one shot learning은 힘들다고 판단했습니다.


결과적으로 Cost function은
J=imL(Ai,Pi,Ni)J = \sum_i^m L(A^i,P^i,N^i)입니다.

Face Recognition 학습 방식(추가)

triplet loss를 사용하지 않는 또 다른 방식으로 binary classification을 사용한 방식이 있습니다.

위 강의 내용을 통해서도 알 수 있듯이, f(xi)f(x^i)f(xj)f(x^j)의 각 embedding vector 내의 값들을 추출하고, 둘이 뺀 값을 사용해서 w,bw, b를 곱해줌으로써 activation함수를 거친 후 1 또는 0을 도출해내는 방식입니다.

profile
우당탕탕 개발 지망생

0개의 댓글