Faecnet 이란 ?
구글에서 발표한 얼굴 인식을 위한 딥러닝 모델
얼굴을 임베딩 벡터로 변환하고 유사한 얼굴은 가까운 벡터로! 다른 얼굴은 먼 벡터로 !
얼굴 인식 작업을 위해 설계된 cnn 아키텍쳐
1. 얼굴 감지 -MTCNN ,Haar cascade Face Detection, Dlib 얼굴 인식을 통해서
2. 얼굴 임베딩 - 얼굴에서 추출된 특성을 표현하는 벡터, InceptionResnet 모듈 이용
3. 벡터 거리 계산 - Triplet Loss 이용해서 이루어짐
4. 얼굴 분류 - SVM
얼굴 이미지를 고차원 피처공간에 매핑하는 방법을 학습하는데 여기서 얼굴 임베딩 간 유클리드 거리를 통해 유사도를 측정한다. facenet은 훈련 중에 삼중 손실함수를 사용하여 같은 사람의 얼굴 임베딩이 피처공간에서 가깝고 다른 사람의 임베딩은 멀리 떨어져있도록 한다.
- 임베딩 - 각 얼굴 이미지를 128차원으로 임베딩하여 유클리드 공간에서 이미지 간 거리를 분류하는 모델
얼굴 사진에서 그 사람에 대한 특정 값(featurem embedding결과) 를 구해준다. 거리에 대한 결과를 이용해 clustering 할 수 있게 한다. ( 여기서 유 사한 얼굴은 가까운 벡터로! 다른 얼굴은 먼 벡터로 ! ==> triplet loss )
- triplet loss 함수 사용
triptlet loss 에서는 anchor(어떤 한 사람), positive(같은 사람),negative(다른 사람)에 대한 개념이 등장한다. 이 값들의 유클리드 거리를 통해 loss 함수를 만든다.
L을 최소화함으로서 Positive와의 거리는 가까워지도록 하고 Negative와의 거리는 멀어지도록 한다.
Facenet-pytorch 라이브러리
사전 학습된 Pythirch 얼굴 감지 (MTCNN) 및 얼굴 인식 (InceptionResnet) 모델
facenet-pytorch 라이브러리는 facenet 모델의 pytorch 구현으로 자신의 프로젝트에서 얼굴인식 작업에 facenet 활용할 수 있다. 원래 TensorFlow로 구현된 Facenet 모델을 PyTorch 환경에서 사용할 수 있도록 변환한 것이다.
facenet pytorch- face net 모델의 pytorch 구현을 제공하는 python 라이브러리로 pytorch 기반 프로젝트에서 얼굴 인식 작업에 facenet을 쉽게 사용할 수 있다.
대부분 facenet과 facenet_pytorch 의 주요 사용 사례는 얼굴 인식이다.
Embedding vector를 생성하기 위해 Inception Resnet을 사용
MTCNN(Multi-task Cascaded Convolutional Networks)
: 얼굴 인식에 사용되는 딥러닝 아키텍쳐
MTCNN은 얼굴 감지, 얼굴 랜드마크 로컬라이제이션, 얼굴 정렬의 세 단계로 구성된 계단식 네트워크이다.
이미지에서 얼굴과 얼굴 랜드마크를 감지하기 위해 함께 작동하는 3단계(P-Net, R-Net 및 O-Net) 존재
P-Net(제안 네트워크) :
mtcnn의 첫번째 단계이며 입력 이미지에서 잠재적인 얼굴 영역을 제안하는 역할 = 얼굴 감지
R-Net (네트워크 정제) :
mtcnn의 두번째 단계이며 p-net에서 제안된 얼굴 후보를 개선하는 역할 = 바운딩 박스 후보 정제
O-Net(출력 네트워크):
mtcnn의 세번째 단꼐이며 이전 단계에서 얻은 얼굴 후보 세부화하는 역할 = 얼굴 랜드마크 생성
cf) 바운딩 박스 후보란? - 이미지 내에서 객체가 있을 법한 위치를 사각형 형태로 나타낸 것 . "이 영역에 객체가 있을 것이다" 라고 예측되는 후보 영역을 나타내준다. 객체 검출 알고리즘에서 매우 중요한 역할을 한다. 얼굴 검출에서는 다양한 크기와 위치에 존재할 수 있는 얼굴들을 찾기 위해 이미지에서 여러 바운딩 박스 후보를 생성한다.
얼굴을 찾기 위해 이미지 전체를 작은 사각형들로 분할하고 , 각 사각형에 대해서 얼굴이 포함되어있을 확률을 계산한 다음 높은 확률을 가진 사각형들을 바운딩 박스 후보로 선택함
cf) 얼굴 랜드 마크란 ? - 얼굴에서 특정한 특징점들을 가리키는 것. 대부분 눈, 코, 입, 턱선 등의 위치를 말하며 얼굴 인식 및 분석에 중요하게 사용된다.
MTCNN에 대해서 전체 흐름을 이야기 하자면
얼굴 감지 - MTCNN 의 첫번째 단계 = P-net 는 이미지에서 후보 얼굴 영역을 감지하는 것 일련의 합성 레이어를 사용해서 잠재적인 얼굴 위치를 식별한다.
얼굴 랜드마크 로컬라이제이션 : 눈코입과 같은 얼굴 랜드마크를 찾아 후보 영역을 더욱 세분화한다. 감지된 얼굴을 정확하게 정렬하는데 도움이 된다.
얼굴 정렬 : 얼굴 랜드마크의 위치를 기반으로 감지된 얼굴을 정렬한다. 이를 통해 특징 추출 또는 인식에 적합한 잘 정렬된 얼굴 영역이 생성된다.