Siamese Network
- 두 사람이 같은 사람인지 알기 위해 두 개 사진의 '거리(distance)'를 계산함
- 사람인지 알기 위해 함수 d를 계산하는 인코딩을 구하는 것
- 신경망은 128차원의 인코딩 f(x)를 반환함
Triplet loss
- 항상 하나의 앵커 이미지를 살펴본 다음 같은 사람인 것을 뜻하는 긍정 이미지와 앵커 이미지 사이의 거리를 구하고, 반대의 경우(다른 사람의 사진과의) 거리를 구함
- 항상 3개의 (Anchor, Positive, Negative) 이미지를 보기 때문에 'Triple loss'인 것
- ||f(A)-f(P)||^2 ≤ ||f(A)-f(N)||^2 (|| || <- norm)
- ||f(A)-f(P)||^2 - ||f(A)-f(N)||^2 ≤ 0 (우변항 이항)
- 이 때 사실 f가 항상 0을 return하면 조건이 만족돼버림(그러나 그렇지는 않음)
- 또 다른 만족 조건은 모든 사진의 인코딩이 같을 경우..(문제가 됨)
- 따라서 α(마진)를 넣어 목적식을 약간 수정함
- ||f(A)-f(P)||^2 - ||f(A)-f(N)||^2 + α ≤ 0
- 마진이 생겼기 때문에 d(A,P)는 더 작아지고, d(A,N)는 더 커지는 쪽으로 학습됨
Loss Function
- Given 3 images
- L(A,P,N) = max(||f(A)-f(P)||^2 - ||f(A)-f(N)||^2 + α ,0)
- max의 효과로 0보다 작은 손실이 없게 됨(신경망 자체도 Loss가 '얼마나 음수'인지 신경쓰지 않게 됨)
- J = ∑ L(A,P,N) (모든 i에 대하여)
Dataset
- 성공적인 학습을 위해 (A,P) 페어의 데이터가 많이 필요하다(같은 사람에 대한 많은 이미지의 데이터셋)
- 예시는 1,000명의 사람에 대한 만 개의 이미지로 학습함(한 사람당 평균 10장)
- train set에서 무작위로 A, P, N을 뽑을 경우의 문제점
- (A,N)이 (A,P)보다 훨씬 다양한 것임
- 너무도 쉽게(보통의 경우 얼굴이 꽤 다르니까) 조건이 만족되는 문제(||f(A)-f(N)||^2 + α ≤ ||f(A)-f(P)||^2)
- 따라서 좋은 학습을 위해서는 학습하기 어려운 train set을 구성해야함(d(A,N)가 꽤 가까운(닮은?))
- 관련 논문(참고)
Face Verification
- 두개 사진의 인코딩을 로지스틱 유닛에 넣고 판단(이진 분류 문제로 정의)
- 로지스틱 유닛 : 같은 사람은 1, 다른 사람은 0으로 return
precompute
- 미리 임베딩을 계산해 둬서 계산량을 줄이는 테크닉
아래 영상 내용을 요약한 포스팅입니다.
https://www.youtube.com/watch?v=-FfMVnwXrZ0
'Undergraduate > ML & DL' 카테고리의 다른 글
[Research] 문헌조사① : Face Mask Detection (0) | 2020.09.19 |
---|---|
[winSCP] 서버 사용 시 유용한 프로그램 (0) | 2020.05.20 |
[PyTorch tutorial] 컴퓨터 비전(Vision)을 위한 전이학습(Transfer Learning) (0) | 2020.05.14 |
[GPU] 다수의 GPU 중 원하는 GPU 타겟팅하기 (0) | 2020.05.13 |
[PyTorch tutorial] PyTorch에서 GPU 활용하기 (0) | 2020.05.12 |