210727 EXPLORATION 5. 나랑 닮은 연예인 찾기

문소정·2021년 7월 27일
0

AIFFEL

목록 보기
17/66

임베딩이란?

(- 이론적인 내용말고 내가 이해한 내용을 적을 수 있는 정의가 필요함. 고차원이 무엇이고 저차원이 무엇이고 현실적으로 모르겠음 : 내용 추가 할것)

  • 데이터가 실제 값으로 표현된 간결한 특성 벡터 표현. 이런 벡터를 임베딩이라 함
  • 고차원 벡터를 저차원 공간으로 변환하는 것

Q : 컴퓨터에게 우리는 어떻게 다양한 형태의 정보를 표현해 줄 수 있을까요?
A : 벡터 공간(Vector Space) 에다가 우리가 표현하고자 하는 정보를 사상(mapping) 하는 방법을 사용

ex) 사람 : 두 얼굴이 얼마나 닮았나 비교 ⇨ 컴퓨터 : 두 얼굴 벡터 사이의 거리가 얼마인가?

임베딩 기법을 활용하여 표현할 수 있는 데이터의 유형
1. 텍스트(단어, 문장, 전체 문서), 이미지, 오디오 등과 같은 구조화되지 않은 데이터
2. 사용자가 시청한 영화 목록 및 사용자 ID와 같이 상호작용 환경설정만 있고 입력 특성이 없는 항목
3. 그래프 및 네트워크와 같은 복잡한 구조 데이터. 예: 소셜 네트워크 및 생화학 화합물
4. 텍스트 설명을 사용한 이미지 검색 및 이미지 캡션 작성과 같은 다중 모달 변환
5. 위치 및 점유와 같은 희소 특성(이를 밀집 특성으로 변환)
6. 인구통계, 사회, 금융, 행동 속성이 300개 이상 포함된 고객 레코드와 같은 고차원 항목(이러한 항목을 보다 간결한 표현으로 변환)

임베딩 사용사례 ex)

  • 유사성 분석, 검색, 기계 전이 학습에 활용

개요: 머신러닝을 위한 특성 임베딩 추출 및 제공

얼굴임베딩 만들기

1) 얼굴인식

detection : 탐지, 발견
Crop : 이미지 영역 자르기

  • 얼굴 인식 라이브러리 : dlib 기반 Face REcognition 라이브러리
  • dlib : Object Detection 패키지

2) FaceNet

  • 구글에서 발표한 FaceNet은 L2 Nomalzation을 거쳐 임베딩을 만들고 Triplet Loss를 사용
  • L2 Nomalzation
    • 모델 결과물의 L2 Distance를 구한 후에 이것으로 결과물을 나눠주어 Normalization을 해주는 과정
    • 임베딩 벡터가 벡터의 크기가 1인 결과물이 나옴
    • 이후 두 점 사이의 거리를 계산시, 두 벡터의 절대적 크기에 무관하게 두 벡터 사이의 각도에만 영향을 받게 됨
  • Triplet Loss
    • 대상 image, Positive image, Negative image로 세 개의 데이터 쌍을 이용해 계산하는 손실함수
    • 네트워크를 학습시킬 수 있음

얼굴임베딩 사이의 거리 측정(L1 distance vs L2 distance)

L1 distanceL2 distance
- Manhattan distance- Euclidean distance
- stepped path- straight line
- 두 점 사이의 거리 좌표상의 절대 차이값들의 합- 두 점 사이의 직선거리
x1x2+y1y2\vert x_1-x_2 \vert+\vert y_1-y_2 \vert(x1x2)2+(y1y2)2\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}

얼굴임베딩 공간의 시각화

  • 임베딩 : 고차원 데이터 → 저차원 Transform
  • PCA, T-SNE : 다차원 벡터를 시각화를 위한 차원 축소 - 두개의 의미를 알아볼 것
    • PCA(주성분 분석 Principal Component Analysis )
      • 분산(Variance)을 확인한 뒤 그 중 변화가 가장 큰 주요한 축을 남기는 방법
    • T-SNE
      • 고차원 상에서 먼 거리를 저차원 상에서도 멀리 배치되도록 차원을 축소하는 방식
      • random하게 목표하는 차원에 데이터들을 배치한 후 각 데이터들을 고차원 상에서의 배치와 비교를 하면서 위치를 변경해 주는 알고리즘

가장 닮은꼴 얼굴 찾아보기

  • def get_cropped_face(image_file) : 이미지 파일에서 얼굴 영역을 가져오는 함수
  • def get_face_embedding(face) : 얼굴영역으로부터 얼굴 임베딩 벡터를 구하는 함수
  • def get_face_embedding_dict(dir_path) : 디렉토리 안에 있는 모든 이미지의 임베딩 딕셔너리를 구하는 함수
  • def get_distance(name1, name2) : 두 이미지(사람 이름) 사이의 임베딩 벡터 거리를 구하는 함수

2개의 댓글

comment-user-thumbnail
2021년 7월 28일

정리 잘 해놓으셨어요👍

1개의 답글