본문 바로가기
ML & DL

Deep face 프레임 워크

by IT손흥민 2024. 4. 8.

목적

얼굴 유사도를 판별하는 모델을 만들기 위해 얼굴 인식 모델에 대해 조사하게 되었다.

 

 

얼굴 인식 과정

  1. 얼굴 검출 (Face Detection) - 얼굴 영역 찾아 추출
  2. 얼굴 정렬 (Face Alignment) - 포인트 (눈, 코, 입, 윤곽 등) 추출
  3. 얼굴 정규화 (Face Normalization) - 얼굴 영역 회전 및 매칭 가능한 상태 변경. 모델
    • 1~3 모델 : opencv, ssd, dlib, mtcnn, retinaface, mediapipe, yolov8, yunet, fastmtcnn
  4. 얼굴 표현 (Face Representation) - 임베딩 과정을 거쳐 N차원 특징 벡터로 표현
    1. 모델 : VGG-Face, Facenet, Facenet512, OpenFace, DeepFace, DeepID, ArcFace, Dlib, SFace
  5. 얼굴 비교 (Face Matching) - 벡터 간 유사도 계산
    1) Verification 얼굴 검증
    2) Indentification 얼굴 식별

얼굴  인식 종류

name sub 작업
Face Detection   얼굴감지
Face Recognition Face Verification [얼굴 파악] 1:1 파악
서로 같은 사람인지
  Face Identification [얼굴 파악] 1:N 파악 입력값이 DB 속 얼굴 중 어디에 해당하는지

* 현재 내가 필요한 인식종류는 Face Identification이다.

 

 


Deep Face 프레임워크

다양한 모델을 wrapping하고 있는 얼굴 인식(face recognition) 프레임워크

종류

 

library 정확도(LFW) 정확도(YTF) model 특징 특징2 출시년도
deepface 99.65%   FaceNet512 기존의 임베딩 차원이 128 -> 512로 증가.
512개의 노드
   
deepface 99.60%   SFace   Sigmoid-Constrained Hypersphere Loss  
deepface 99.41%   ArcFace 얼굴 인식의 특성 모방하여
다양한 각도와 조명 조건에서 얼굴 특징 벡터의 유사성 최대화하는 방식으로 학습
Angular Margin loss 2018
deepface 99.38 %   Dlib      
deepface 99.20%   FaceNet 임베딩 학습을 위해 삼중항 손실
임베딩 공간에서 서로 더 가까워지는 방식으로 인코딩하는 방법 학습
Triplet loss 2015
deepface 98.78% 97.40% VGGFace   Triplet loss + softmax loss 2015
deepface 93.80%   OpenFace      
deepface     DeepFace      
deepface   97.05% deepID      
      evoLVE 중국    
  99.53%   ElasticFace 고정된 패널티 마진 softmax  

* 삼중항손실(Triplet loss):  긍정과 부정의 거리를 비교한 후 부정의 거리를 늘리는 것

  • LFW(Labeled faces in the Wild : 5,749명 13,233개의 유명인 얼굴 이미지 데이터셋
  • YTF(Youtube Face): 1,595명 3,242개의 비디오로 구성된 영상 데이터셋. LFW 데이터세트의 유명인의 하위 집합
  • 정확도 출처 : deepface git

 

ArcFace

  • 서로 다른 클래스 사이에 충분한 거리가 있는 임베딩 공간을 만듦. 임베딩 공간이 더 희박해지기 때문에 클래스가 더 잘 분리됨
  • 얼굴 이미지 사이의 거리 계산을 위해 softmax 손실을 각도 마진 손실로 대체
  • 일반적인 softmax와 달리 ArcFace 모델은 margin 값을 이용하여 클래스 간의 거리를 보다 잘 유지하면서 클래스 내부의 유사도 더욱 강화
  • 특징 벡터 크기 512
  • 기존 FR에서 DCNN 학습은 두가지 방법이 있었음 (softmax, triplet loss).
    하지만 단점이 있었으며 새로 도입한 방법이 ArcFace
    클래스 간 각도를 통해 차이를 주어 서로 다른 클래스에는. 더 큰 격차를 만드는 방법

FaceNet

  • google에서 만듦
  • 이미지 사이의 거리 유사성 (두 이미지가 가까울수록 유사한 것으로 간주)
  • 인식이나 검증을 위해 추가 레이어를 사용하는 대신 이미지에서 매핑을 하고 학습하고 직접 임베딩 생성
  • 모델이 가벼움. 128바이트의 데이터만 사용하여 각 얼굴 표현

 


 

마무리

Deepface 라이브러리는 한번에 설치도 가능하기에 어떤 모델을 사용할 지에 대한 선택이 좀 더 편리해 보인다.
개인적으로 공부를 하기위해서는 직접 모델을 만드는 방향도 고려해 보는 게 좋을 듯하다.

 

'ML & DL' 카테고리의 다른 글

딥러닝 기본 구조 파악하기  (1) 2024.04.06

댓글