샴 네트워크(Siamese Network)는 "Siamese Neural Networks for One-shot Image Recognition"라는 논문에서 처음 소개되었습니다. 이 논문은 한 번의 학습으로 새로운 클래스에 대한 이미지 인식 작업에서 좋은 성능을 달성하기 위한 모델을 제안합니다. 이를 "원샷 학습(One-shot Learning)"이라고도 합니다.
왜 쓰는가?
- 일반적으로 이미지 분류 작업을 수행하는 네트워크는 다수의 클래스를 분류하기 위해 대량의 클래스 이미지로 학습되어야 합니다.
- 그러나 실제 상황에서는 클래스 수가 매우 많거나, 새로운 클래스에 대한 이미지를 대량으로 확보하기 어려운 경우가 있습니다.
- 이러한 제약을 극복하기 위해
샴 네트워크는 추가적인 학습 없이도 -> 새로운 클래스에 대한 좋은 성능을 달성할 수 있는 모델로 설계되었습니다.
구조
-
샴 네트워크는 두 개의 동일한 구조를 가진 신경망을 사용합니다.
- 이 네트워크는 입력 이미지 쌍을 받아들여 각각의 이미지를 임베딩(Embedding)하는 과정을 거칩니다. 임베딩은 이미지의 특징을 추출하는 작업으로, 고차원 벡터로 변환됩니다.
-
이미지 쌍의 임베딩은 유사도를 측정하기 위해 사용됩니다.
- 유사도 측정은 임베딩된 벡터 간의 거리나 유사성 척도를 계산하여 이루어집니다.
- 예를 들어, 유클리드 거리나 코사인 유사도를 사용할 수 있습니다.
-
샴 네트워크는 이미 학습된 모델의 파라미터를 사용하여 이미지의 임베딩을 얻습니다.
- 이렇게 얻은 임베딩은 이미지 분류나 객체 추적과 같은 작업에 사용될 수 있습니다.
- 새로운 클래스에 대한 이미지를 입력으로 주면,
- 해당 이미지의 임베딩과 기존 클래스 이미지의 임베딩을 비교하여 가장 유사한 클래스를 결정합니다.
학습 방법
- 입력 데이터(Input 1, Input 2)쌍을 준비합니다. 동일한 클래스 쌍의 경우 출력값을 1로, 다를 경우 0으로 합니다.
- 파라미터를 공유하는 CNN을 통과시켜 각 입력에 대한 임베딩 값 (Embedding 1, Embedding 2)을 얻습니다.
- 두 임베딩 사이의 거리를 계산합니다. L1, L2 norm등의 방법을 사용합니다.
- 두 입력이 같은 클래스면 거리를 가깝게, 다른 클래스면 거리를 멀게하는 Contrastive loss를 이용하여 학습합니다.
- 같은 class 이면 y = 0, 다른 class이면 y=1.
- D는 임베딩 벡터 간의 거리
- m 은 클래스 샘플들 간의 최소 거리