본 글은 해당 링크의 튜토리얼을 실행하며 정리한 내용을 작성하였습니다.
현재 주어진 데이터셋의 불균형이 심하여 여러 클래스 중 유독 2개의 클래스가 서로 비슷하여 정확성이 낮은 문제가
있습니다.
이를 해결하기 위한 방법으로 Contrastive Learning을 적용하고자 합니다.
일단 적용 모델의 이름은 SimCLR이며 자세한 내용은 위쪽에 언급한 링크에서 확인하실 수 있습니다.
SimCLR의 핵심은 이미지를 Augumentation하여 같은 이미지의 쌍인 Positive pair의 loss는 줄이고
서로 다른 이미지쌍인 Negative Pair의 loss는 늘리는 것
으로 기존 Contrastive Learning 방식과 크게 다르지 않다고 생각합니다.
이러한 방식으로 같은 클래스는 더 가깝게 다른 클래스는 서로 멀게하여 latent space를 보다 구분되게 만들 수 있습니다.
이를 가능하게 만들기 위해 SimCLR은 InfoNCE loss를 적용하였으며 그림과 수식은 아래와 같습니다.
수식에서 가운데 식을 보시면 Softmax를 적용한 후에 negative log-likelihood를 계산하여 loss를 구하게 됩니다.
이때 분자는 Positive pair 의 유사도, 분모는 Negative Pair간의 유사도를 의미합니다.
유사도(sim)은 아래 식으로 구해지며 cosine similarity를 사용합니다.
위 loss는 negative log-likelihood loss이므로 아래 그림과 같이 값이 작을수록 loss가 크기에
Positive pair 의 유사도는 크게, Negative Pair간의 유사도는 작게 되도록 학습이 진행됩니다.
분모에서 k≠i 인 이유는 서로 같은 이미지의 유사도는 1이며 이는 Negative Pair간의 유사도 측정 목적에 맞지 않습니다.
따라서 k≠i 에 대한 유사도 측정을 진행합니다.
또한 위 식에서 τ(타우)는 유사도 결과를 스케일링 하여 보다 학습을 원활하게 만들기 위해 사용합니다.
이러한 방식을 통해 튜토리얼에서는 정확성이 아래와 같이 나타났습니다.
이는 기존 ResNet 결과 대비 8.02%(81.33-73.31) 증가한 결과로 상당히 큰 수치라 생각됩니다.
아래는 실제 저의 custom dataset을 사용한 학습 결과입니다.
학습을 진행함에 따라 점점 성능이 향상되었으며 최종적으로 79.63%의 성능에 도달했습니다.
Contrastive Learning을 하지 않은 기본 ResNet의 결과는 다음과 같습니다.
결과적으로 총 22.8%의 성능 향상
예상 보다 훨씬 좋은 결과를 보여줬습니다. 따라서 이를 토대로 detection 결과를 보정해야겠습니다.
'ML' 카테고리의 다른 글
[논문 리뷰] MoE-LLaVA (0) | 2025.02.28 |
---|---|
[논문]Swin Transformer (1) | 2025.02.10 |
[논문 리뷰] Learning from Rich Semantics and Coarse Locationsfor Long-tailed Object Detection (0) | 2025.01.27 |
[논문]Deep Learning Based Speed Estimation for Constraining Strapdown Inertial Navigation on Smartphones (1) | 2025.01.21 |
Precision, Recall에 대해 (0) | 2024.11.30 |