CH01. FaceRecognition
<목차>
1-1. Face Recognition 이론 소개
1-2. Face Detection -대표 모델 및 코드 소개
1-3. [실습1] Dlib및 Retina Face 코드 구현
1-4. Face Alignment -대표 모델 및 코드 소개
1-5. [실습2] 황금비율 계산
1-6. Face Recognition -대표 모델 및 코드 소개
1-7. [실습3] 그룹 가수 사진에서 각각 멤버 인식하기
1-1. Face Recognition 이론 소개
- Face Recognition ?
Face Recognition이란, 말 그대로 얼굴 인식 기술이다. 얼굴을 포함하는 입력 정지 영상 또는 비디오에 대해 얼굴 영역의 자동적인 검출 및 분석을 통해 얼굴이 어떤 인물인지 판별해 낸다.
= 얼굴의 고유한 특징과 패턴을 분석하여 개인을 식별하는 기술
Face Recognition은 얼굴 검증Face Verification과 얼굴 식별Face Identification 두 종류로 구분할 수 있다.
Face Verification 검증은 해당 얼굴이 어떤 class가 맞는지 아닌지 검증한다. 쉽게 o/ x를 하는 Binary classification을 한다고 생각하자. Identification 식별은 해당 얼굴이 어떤 class인지 식별한다. 다중 분류를 한다고 생각하면 쉽다.
- Face Recognition 과정
위 도표를 확인해도 좋지만, 아래 그림이 더 함축적으로 잘 설명되어 있길래.. 다음과 같이 설명하겠다.
딥러닝에서 얼굴 인식은 다음과 같은 5가지 과정을 거친다.
1) 얼굴 검출 Face Detection
먼저, 입력된 이미지에서 얼굴 영역을 찾아 추출한다.
2) 얼굴 정렬 Face Alignment
그리고 얼굴의 주요 랜드마크 포인트인 눈, 코, 입, 얼굴 윤곽 등을 추출한다.
cf) 스노우, 인스타 글리터 필터 등은 얼굴 정렬을 활용한 것이다.
3) 얼굴 정규화 Face Normalization
랜드마크 포인트를 기준으로 얼굴 영역을 회전시키고 얼굴 매칭이 가능한 상태로 변경.
# 검출된 얼굴 영역을 동일한 크기와 형태로 만드는 과정이라고 이해하면 된다.
4) 얼굴 표현 Face Representation
이후, 얼굴 영역을 임베딩 과정을 거쳐 N차원의 특징(feature) 벡터로 표현한다.
# 이미지 행렬에서 CNN을 통해 feature를 추출하여 긴 n x 1 백터로 만든다고 생각하면 된다.
이미지 행렬을 CNN에 넣어, n x 1 백터로 만든다. 이를 Embedding 과정이라고 한다.
5) 얼굴 비교 Face Matching
마지막 단계는 입력된 이미지 속 얼굴이 누구인지 판단하기 위해 특징 벡터 간의 유사도를 계산하는 것으로, 목적에 따라 두 종류로 구분할 수 있다. # 얼굴 검증 Face Verification vs 얼굴 식별 Face Identification
cf. 아까 얼굴 인지에는 검증, 식별 두 종류가 있다고 했다. 여기서 이게 구분되는 것이다.
위 1번, 2번, 3번 과정인 검출, 정렬, 정규화를 Face Recognition의 전처리 과정으로 본다.
이미지, 비디오에서 얼굴 및 특징점(Landmark)의 위치를 검출한다(Localization). 이후 일정한 크기 혹은 위치에 맞게 이미지를 정규화 한다. 아래 예시를 보면 쉽게 이해할 수 있다.
작고, 삐딱한 아기 얼굴이 정규화를 통해 커지고 회전되었다.. 정규화 과정으로 얼굴들을 동일한 크기, 형태로 바꾼것이다.
cf. 용어 혼동 주의
Classification: 단순히 이미지를 분류하는 것 사진을 보고 고양이인지, 강아지인지.. 객체(object) 위치는 중요하지 않다
Classification with localization: 이미지 내에 object 위치를 찾고, 어떤 객체인지 구분한다... 한 object
Detection: localization을 통해 이미지에서 하나의 객체가 아닌 여러 객체를 인식.
- Face Recognition model
이러한 얼굴 인식의 대표적인 모델은 다음과 같다.
- 손실 함수Loss function
당연하겠지만.. 딥러닝는 경사 하강법(gradient descent)을 통해 손실 함수를 최소로 하는 특이점을 찾는다.
1) Softmax
cross Entropy를 이용하여 softmax 출력값과 정답 사이의 오차를 계산한다.
softmax란 출력층(output layer)에서 주로 사용되는 함수로, 확률과 비슷한 성질을 가지게 처리한다.
cf) softmax 함수 설명
이를 설명하기 위해 output layer 직전의 output을 $X = [x1, x2, x3, x4... ,xn]^T$ 라고 하고, softmax 함수를 f(x)라고 하자.
이렇게 하면 모든 원소가 0보다 크거나 같고, 합이 1인 확률과 비슷한 값을 갖는 벡터가 완성된다.
학습 과정에서 점차적으로 f(x) 값과 정답이 최소가 되도록 parameter들이 조정된다..
Q. softmax에서 왜 지수 함수를 사용하는가..
미분이 가능하도록, 입력값 중 큰 값은 더 크게, 작은 값은 더 작게 만들어 입력 벡터가 더 잘 구분되도록 지수 함수를 사용한다.
AlexNet • ResNet • DeepFace • DeepID 등 모델이 softmax 손실 함수를 사용한다.
2) 거리 기반
feature 벡터 간의 거리를 활용해 loss를 정의한다. Contrastive Loss Function • Triplet Loss Function가 대표적이다.
3) Angular margin
softmax 기반의 손실 함수. margin을 정의하여 학습 과정에서 각 클래스를 구분하는 decision boundary 사이의 margin를 최대로 하겠지..
CosFace • ArcFace • SphereFace등의 손실 함수 종류가 존재한다.
그렇군.. 하고 넘어가면 된다. 각 손실 함수는 중요한 모델을 공부할 때 제대로 공부하고 넘어가자.
- Face Recognition Dataset
얼굴 인식에서 주로 사용하는 데이터 셋이다.
https://paperswithcode.com/task/face-recognition
Papers with Code - Face Recognition
**Facial Recognition** is the task of making a positive identification of a face in a photo or video image against a pre-existing database of faces. It begins with detection - distinguishing human faces from other objects in the image - and then works on i
paperswithcode.com
- Dlib
이미지 처리, 선형대수 뿐 아니라 ML 알고리즘을 활용할 수 있는 Dlib 라이브러리. C++로 작성되었지만 python 패키지로도 설치해 사용할 수 있다. 특히 HOG(Histogram of Oriented Gradeints) 특성을 사용하여 얼굴 검출하는 기능으로 많이 사용된다.
사실 이제 dlib 라이브러리 사용 성능 상의 이점이 크지 않고, 라이센스 문제도 있기에 다른 모델을 사용하는 경우가 더 많다... 얼굴 인식을 할 때 이런 방법도 있구나 알고 넘어가면 된다...
'Autonomous Driving > 1. Perception' 카테고리의 다른 글
Ch01. Face Recognition - 2) Face Detection - RetinaFace (3) | 2024.09.02 |
---|