logo

이미지 임베딩

얼굴로 잠금 해제

  • 스마트폰이나 노트북 등에서 얼굴로 잠금 해제
  • 이미지 분류로는 어려움
    • 일반적인 이미지 분류 방법은 한 종류의 이미지를 매우 많이 수집하여 학습
    • 얼굴 인식의 경우 같은 사람의 이미지를 많이 모으기 어려움
    • 같은 사람의 얼굴이라도 날마다 다름
    • 컨디션, 조명, 화장, 각도 등등에 따라 이미지는 다르게 찍힘
  • 요구 조건:
    • 카메라에 얼굴을 비췄을 때 정확하면서도 빠르게 잠금이 풀려야
    • 저장된 얼굴 이미지와 카메라에 비춰진 이미지를 잘 비교할 수 있어야
  • 사람의 얼굴에서 특징을 추출하는 것이 중요
    • 같은 사람을 찍은 사진에서는 비슷한 특징을, 다른 사람을 찍은 사진이면 최대한 다른 특징을 추출하도록 학습
    • 새로운 이미지가 입력되었을 때, 가장 유사한 특징을 갖는 사람의 이미지를 찾아 신분을 확인

임베딩 embedding

  • 유사성을 보존하면서 원래보다 낮은 차원의 벡터로 표현하는 것 또는 그렇게 표현된 벡터
    • embed: 어떤 좁은 공간에 무언가를 심어넣는 것
  • 일종의 좌표 또는 디지털 지문과 비슷한 개념
  • 비슷한 내용의 이미지는 비슷한 임베딩 값을 가짐
  • 지문만 비교하면 두 사람이 같은 사람인지 확인할 수 있듯이, 임베딩을 비교하면 두 이미지가 비슷한 이미지인지 빠르게 비교할 수 있음

CNN으로 이미지에서 임베딩을 추출하는 구조

듀이 십진 분류 코드

  • 도서관에서 책의 내용을 몇 개의 숫자로 표시한 것
  • 000은 컴퓨터, 지식, 정보 등에 대한 책들, 100은 철학, 300은 사회과학, 400은 자연과학, 800은 한국 문학 …
  • 국립중앙도서관에서 자연어 처리에 대한 책들은 004로 시작되는 코드가 붙어 있음
  • 책의 내용을 몰라도 004번 서가 있는 책들은 비슷한 내용일 것이라는 것을 짐작할 수 있음
  • 도서관의 분류 코드는 사람이 임의로 만들어놓고 분류
  • 임베딩은 도서 분류 코드와 달리 데이터에 딥러닝을 적용해서 만든 것

이미지 임베딩의 필요성

  • 이미지는 많은 점들로 이뤄져 있음
    • HD 해상도 1280x720 = 92만개의 픽셀
    • 4K 해상도 3840x2160 = 829만개의 픽셀
  • 원본 이미지를 바탕으로 검색할 경우 하나의 이미지와 비교하기 위해 수 십 만~수 백 만 개의 값을 계산 필요
  • 고해상도 이미지에는 불필요한 디테일을 많이 포함
  • 단순히 크기만 줄이는 것으로는 불충분
  • 이미지의 '의미'를 보존해야

이미지 임베딩의 응용

  • Face identification
    • DB에 저장된 얼굴 이미지들 중에서 찾기
    • 예: 출입 시스템
  • Face verification
    • 특정 얼굴과 일치 여부를 확인
    • 예: 얼굴로 잠금 해제
  • Image recommendation systems
    • 검색 또는 구매한 상품과 시각적으로 비슷한 상품을 추천
  • object re-identification
    • CCTV 등에서 특정 대상을 추적할 경우 서로 다른 이미지에서 동일 대상을 식별할 수 있어야 함

임베딩 구현 방법

  • 교차엔트로피 손실
  • 대조 손실
  • 삼중항 손실

교차 엔트로피 손실 crossentropy loss

  • 이미지 분류 모형을 학습 (crossentropy를 최소화)
  • 신경망의 마지막 예측 레이어를 제거
  • 신경망의 특정한 레이어를 출력으로 사용
  • 해당 레이어가 추출하는 특징을 임베딩으로 사용

이미지 분류 모델에서 마지막 예측 레이어를 제거하고 임베딩을 얻는 구조

대조 손실 contrastive loss

  • 대조(contrast): 두 가지를 비교해본다는 뜻
  • 대부분 이미지, 텍스트, 오디오 등 다양한 도메인에서 효과적으로 사용
  • 긍정적 쌍과 부정적 쌍을 데이터로 사용해서 학습
  • 얼굴 인식의 경우:
    • 긍정적 쌍(positive pair): 같은 사람의 서로 다른 사진 두 장은 겉보기에 아무리 달라도 비슷한 이미지
    • 부정적 쌍(negative pair): 다른 사람의 얼굴 사진이면 겉보기에 아무리 비슷해도 다른 이미지

대조 손실 contrastive loss

  • 이미지를 입력하면 임베딩을 출력하는 딥러닝 모델을 만듦
  • 모델에 두 장의 이미지를 입력 → 두 개의 임베딩이 출력
  • 긍정적 쌍의 이미지 두 개를 입력했을 때 두 임베딩이 서로 다르면, 모델을 약간 수정해서 두 개의 임베딩이 좀 더 비슷하게 고침
  • 긍정적 쌍만 가지고 임베딩을 출력하는 딥러닝 모델을 학습시키면, 어떤 이미지를 입력해도 똑같은 임베딩을 출력하도록 학습이 될 수 있음
  • 부정적 쌍의 이미지 두 개를 입력했을 때 두 임베딩이 서로 많이 다르면 특별한 조치가 필요 없음
  • 부정적 쌍의 임베딩이 비슷한 경우, 모델을 수정해서 두 개의 임베딩이 달라지도록
  • 이런 수정 과정을 수많은 이미지에 대해서 조금씩 아주 여러 번 반복해주면, 딥러닝 모델은 사람의 얼굴에 있는 어떤 패턴을 찾아내서 같은 사람의 얼굴은 같은 임베딩을 출력하고, 다른 사람의 얼굴은 다른 임베딩을 출력하도록 학습

삼중항 손실 triplet loss

  • 대조 손실의 확장
  • a, p, n 3개의 이미지를 사용
    • a, p는 같은 대상의 이미지, n은 다른 대상의 이미지
    • a는 n보다 p에 가깝게 출력하도록 학습
  • 적절한 난이도의 삼중항 찾기
    • a와 n이 너무 다르면 학습이 전혀 안됨
    • a와 n이 너무 비슷하면 데이터가 잘못되었거나(예: 같은 사람이 다른 사람으로 잘못 레이블링) 특이 사례일 수 있음
    • 너무 쉽거나 너무 어렵지 않은 정도의 semi-hard data를 찾아 학습

임베딩과 오토 인코더

  • 오토 인코더로 압축된 값을 임베딩으로 사용할 수도 있으나, 여러 가지 단점을 가짐
  • 오토 인코더는 원본 이미지를 정확하게 복원하는 데 초점, 비슷한 이미지가 비슷한 임베딩을 가진다는 보장 없음
  • 대조학습은 서로 비슷한 이미지와 다른 이미지를 명시적으로 비교 → 임베딩 공간에서 의미론적으로 유사한 이미지가 가까이 위치하도록 만듦
  • 오토 인코더는 학습 과정에서 임베딩으로부터 이미지를 복원
    • 임베딩만 만드는 목적으로는 불필요한 과정 → 학습 속도 느려짐
    • 더 복잡한 패턴을 학습할 필요

코사인 유사도

  • 코사인 유사도(cosine similarity)는 두 벡터 간의 유사성을 측정하는 방법 중 하나
  • 코사인 유사도의 결과 값은 -1에서 1 사이의 범위
    • 값이 1에 가까울수록 두 임베딩이 매우 유사한 방향
    • 값이 -1에 가까울수록 두 임베딩이 완전히 반대 방향을 가리킴
    • 값이 0인 경우, 두 임베딩은 서로 관련이 없음
  • 코사인 유사도는 문서 유사도, 추천 시스템, 이미지 및 텍스트 임베딩 간의 유사성을 측정하는 데 널리 사용됨
Previous
전이 학습