오늘의 인기 글
최근 글
최근 댓글
Today
Total
11-27 01:30
관리 메뉴

우노

[DL] One Shot Learning, Siamese Network, Triplet Loss, Binary Loss 본문

AI/Deep Learning

[DL] One Shot Learning, Siamese Network, Triplet Loss, Binary Loss

운호(Noah) 2021. 2. 10. 18:09

One Shot Learning

  • One Shot Learning이란, 이미지 인식 분야에서 많이 사용되며
  • 각 Class 에 따른 하나의 Training 이미지만으로, 이미지를 인식하고 분류하는 모델을 만드는 것을 말합니다.
    • 보통의 얼굴 인식 시스템은 사용자의 사진이 한 장만 존재할 수도 있기 때문입니다.
  • 하지만, 각 Class 에 따른 Training 이미지 수가 적다면, 이미지를 인식하고 분류하는 모델을 만드는 것은 어렵습니다.
    • 물론 augmentation 과 같은 방법으로 샘플 수를 늘려서 해결할 수 있지만,
    • 이 경우, 새로운 이미지가 데이터 베이스에 추가되었을 때, 모델을 새로 학습해야한다는 문제가 생깁니다.
    • 즉, 실시간 시스템에 적합하지 않습니다.
  • 따라서, 이러한 문제를 해결하기 위해, "입력 이미지와 사원 이미지 간의 유사도를 구하자"라는 아이디어가 나왔으며, 이 유사도 함수를 "Distance function" 이라고 부릅니다.
    • D(x_1, x_2) = 두 이미지의 차이
    • 두 이미지의 차이가 어떤 임계값 τ(타우) 보다 크면 두 이미지가 서로 많이 다른 것이고, 작으면 비슷한 것입니다.
  • 즉, 우리는 인식하고자 하는 이미지가 입력으로 들어오면, 유사도 함수를 사용해 DB 에 있는 모든 Image 와 distance를 계산한 후, distance 가 가장 작은 사람으로 분류할 수 있습니다.

Siamese Network

  • Distance function은 이미지가 입력되면, 모든 사원의 이미지와 입력 이미지를 비교해 각각의 d를 출력합니다.

  • 이 때 사용되는 신경망이 Siamese Network 입니다.

  • 아래 그림은, Siamese Network를 사용한 Distance function 연산 과정입니다.

    • x_1은 입력 이미지, x_2는 사원 이미지입니다.
    • x_1과 x_2는 동일한 Siamese Network를 거쳐 각각의 feature vector로 인코딩됩니다.
    • 이 때, x_1의 feature vector는 f(x_1) 이며, x_2의 feature vector는 f(x_2) 가 됩니다.
    • 이후, f(x_1)과 f(x_2)의 L2 norm 값이 바로 Distance function의 결과값이 됩니다.
  • 따라서 우리는, 두 이미지가 다르다면 d가 크게 나오고, 비슷하다면 d가 작게 나오도록 Siamese Network를 학습시키면 됩니다.

  • 입력 이미지와 사원 이미지에 사용되는 Siamese Network는 동일한 구조와 파라미터로 구성되어 있습니다.

Triplet Loss

  • Distance Function을 위한 Siamese 신경망을 배워보았습니다.

  • 그렇다면, Siamese Network 학습 시, 목적 함수는 어떻게 정의해야할까요?

  • 이 때, 사용되는 목적함수가 바로 Triplet Loss(삼중항 손실) function 입니다.

  • Triplet Loss 는 3개의 이미지로부터 Loss Function 을 만드는 방법이며,

  • 3가지 이미지는 다음과 같습니다.

    • A (Anchor) : 입력 이미지 인코딩 벡터
    • P (Positive) : 입력 이미지와 동일한 사람의 인코딩 벡터
    • N (Negative) : 입력 이미지와 다른 사람의 인코딩 벡터
  • 기본적인 아이디어는, 입력 이미지와 동일한 사람과의 distance가 다른 사람과의 distance 보다 작아지도록 하는 것입니다.

    • d(A, P) : 입력이미지와 동일한 사람과의 distance
    • d(A, N) : 입력이미지와 다른 사람과의 distance
  • 즉, d(A, P) ≤ d(A, N)이 되도록 만드는 것이며, d(A, P)와 d(A, N)가 충분한 차이가 벌어지도록 alpha라는 margin 값을 추가로 할당합니다.

  • 따라서, [ d(A,P) + α ≤ d(A,N) ] 이 되며, 이는 [ d(A,P) - d(A,N) + α ≤ 0 ] 와 동일합니다.

    • 이 때, A, P, N 벡터는 0이 되면 안되며
    • d(A,P)와 d(A,N) 또한 0이 되면 안됩니다.
  • 이러한 아이디어를 통해, 실제로 정의되는 Triplet Loss는 아래와 같습니다.

    • d(A,P) - d(A,N) + a 가 0보다 작으면 Loss는 0
    • d(A,P) - d(A,N) + a 가 0보다 크면 Loss는 그 자체
    • 따라서, 이 목적함수는 d(A,P) - d(A,N) + a 값이 0보다 작거나 같아지도록 하는 효과가 있습니다.
  • 실제 배치 트레이닝 시, Loss는 아래와 같이 계산 될 것입니다.

    • m은 배치 샘플 수 입니다.
  • Triplet Loss의 단점

    • Triplet Loss 의 문제는 A, P, N 에 사용되는 이미지를 random 하게 골랐을 때,
    • Loss 가 너무 쉽게 0이 된다는 것입니다.
      • d(A,N)은 d(A,P)보다 거의 항상 크기 때문에
      • d(A,P) - d(A,N) + a 은 항상 0보다 작아지게 되고 Loss는 0이 되게 되므로
      • 훈련이 잘 안됩니다.
    • 그래서 실제 트레이닝 시 중요한 것은, 구분하기 어려운 샘플 조합을 고르는 것입니다.
    • 즉, A, P, N에 사용되는 이미지를 무작위로 고르는 것이 아닌
    • 세 개의 이미지가 비슷한, d(A,P) 와 d(A,N)의 차이가 크지 않은 이미지를 우선적으로 사용하는 것이 좋습니다.

Binary Loss

  • Siamese Network는 Triplet Loss 뿐만 아니라 Binary Loss를 사용할 수도 있습니다.

  • 예제를 통해 얼굴 인식이 어떻게 이진 분류로 진행될 수 있는지 알아보겠습니다.

    • x_1은 입력 이미지, x_2는 사원 이미지입니다.
    • 우선, 두 이미지를 Siamese Network로 통과시킨 뒤, 두 개의 인코딩 벡터 f(x_1), f(x_2)를 얻습니다.
    • 두 인코딩 벡터의 L1 vector를 구합니다.
      • L1 vector는 단순히 두 인코딩 벡터의 차이를 절대값 나타낸 벡터입니다.
    • L1 vector 를 hidden layer 에 통과시킨 후, output layer 에서 sigmoid 변환을 합니다.
      • hidden layer는 추가적인 W, b 파라미터를 가지며,
      • sigmoid(W*L1 vector + b)를 출력하게 됩니다.
    • Binary cross entropy 를 loss function 으로 두어 모델을 학습합니다.
      • loss function은 0~1 사이의 값을 output으로 내보내며
      • 1은 두 이미지가 비슷하다는 것을 의미하고
      • 0은 두 이미지가 다르다는 것을 의미합니다.
    • 따라서 우리는, 위와 같은 방법으로 두 이미지가 다르면 0이 나오도록, 비슷하면 1이 나오도록 Siamese Network를 학습시키면 됩니다.

추가 사항

  • Siamese Network를 구현했다면, 사원 이미지들에 대한 인코딩 값을 미리 계산해 둘 수 있습니다.
  • 사원 이미지들의 인코딩 값을 미리 계산해둔다면, 인식하고자 하는 이미지가 들어왔을 때
  • 사원 이미지 인코딩 값은 미리 계산 된 값을 가져오면 되기 때문에, 추가적인 계산이 필요 없어집니다.
  • 인식하고자 하는 이미지의 인코딩 값만 Siamese Network를 통해 계산하면 됩니다.

'AI > Deep Learning' 카테고리의 다른 글

[DL] Sequence Model이란?  (3) 2021.02.15
[DL] Neural Style Transfer  (1) 2021.02.10
[DL] Object Detection (Sliding Windows, YOLO)  (1) 2021.02.10
[DL] Landmark Detecting  (1) 2021.02.09
[DL] Object Localization (객체 위치 식별)  (3) 2021.02.09
Comments