Triplet Loss
개요
Triplet Loss는 앞에 설명한 Contrastive loss 와 같이 Deep learning based Face recognition에서 두가지 기술 발전방향중 Loss function에의한 발전에 속하고 그 중에서 verification loss function에 해당. 간단히 말하면 무작위 데이터셋을 뽑은후 positive pair와 negative 를 sample한후 positive는 가까이, negative는 멀리 배치하는 방법.
설명
-Distance based loss function
- Anchor(a), Positive(p), Negative(n) 세가지 input 사용
- 식
L=max(d(a,p)−d(a,n)+margin,0).
-> positive sample은 가까이, negative sample 은 멀리배치하도록 학습하게됨. 이때 margin 이 더해져 있기 때문에 negative를 멀리 보내게 됨.
Triplet Mining
개요
Triplet Loss 에 따라 dataset의 카테고리를 나눌 수 있음. 종류는 Easy, Hard, Semi-hard
설명
-Easy triplets = loss 가 0 일때 = Max안의 함수가 음수 일때= n은 멀리, a는 가까이 충분히 분리가 잘 되어있을때
=d(a,p)+margin<d(a,n)
-hard triplets = negative가 positive보다 anchor에 가까울때
=d(a,n)<d(a,p)
-Semi-hard triplets = negative가 positive보단 멀리 떨어져 있지만 충분한 margin을 넘진 못해서 Loss가 양수일때
=d(a,p)<d(a,n)<d(a,p)+margin
실질적으로 max(~~,0)인 함수이므로 anchor와 positive + margin을 기준으로 negative값에 따라 좌우되게 된다.
그러므로 hard negative, easy negative, semi-hard negative라고도 표현한다.
위 설명을 그림으로 표기하면 다음과 같다.
Training
-Offline Triplet mining : manually triplet 을 만든다음 network에 적용시킨다(positve, anchor, negative pair를 일일히 만든다)
-Onling Triplet mining : training data를 batch 형식으로 주어 batch 내에서 triplet을 생성하게 된다. 이렇게하면 triplet을 random하게 뽑게 하므로 high loss를 가지는 triplet(학습에 영향을 많이 끼치는 중요한 triplet)을 찾는 기회가 생긴다.
batch size가 N이면 최대 N^3의 triplet을 생성 할 수 있다. 한번에 모든 data에 대해 triplet 을 만드는것보다 학습속도가 빨라진다.
-실제 구현 코드
-offline : github.com/eroj333/learning-cv-ml/blob/master/SNN/Offline%20Triplet%20Mining.ipynb
-online : github.com/eroj333/learning-cv-ml/blob/master/SNN/Online%20Triplet%20Mining.ipynb
출처 : medium.com/@enoshshr/triplet-loss-and-siamese-neural-networks-5d363fdeba9b
'인공지능 > Face Recognition' 카테고리의 다른 글
[Paper Review] MV-Softmax (SV-Softmax, SV-X-Softmax) 정리 (0) | 2021.02.09 |
---|---|
Face Recognition 트렌드 정리 (0) | 2021.01.29 |
[Paper Review] L2Softmax, NormFace 총 정리 (5) | 2021.01.27 |
[Paper Review] Center loss 정리 (4) | 2021.01.27 |
Open set/ Closed set 에 따른 Identification/Verification + Contrastive Loss 정리 (2) | 2021.01.26 |