0

So I've built an arcface model with this arcface layer implementation: https://github.com/4uiiurz1/keras-arcface/blob/master/metrics.py

I trained for a few epochs and now that I'm comparing the results I'm quite baffled.

According to the paper and resources I've read the embedding should produce embeddings where similar images are closer and should have a higher cosine similarity.

But I have the exact opposite case, I ran the models embedding layers through the hold out set and to 95% the mismatches are closer than the matches. Thus I have a reversed 95% accuracy.

My feed and labels are correct

I binned similar images in groups similar to here: https://www.kaggle.com/ragnar123/unsupervised-baseline-arcface but for a different dataset.

Could someone guess why this is happening? Is it possible that some initialization would produce the opposite goal?

user199590
  • 125
  • 6

1 Answers1

1

Cosine similarity, $s$, is an angle distance. The nature of its distance is represented in the range $s \in [-1, 1]$ being $s=-1$ very dissimilar and $s=1$ very similar.

However the intuition of distances is that the closest to $0$ it is the more similar. So if you say

if s < threshold: 
    match = True 
else: 
    match = False

It would produce the exact opposite results since cosine similarity is a measure where the closest similarity equals to $1$. So you have 2 options:

  1. Transform cosine similarity into a traditional normalized distance $d \in [0,1]$ where $0$-similar, $1$-dissimilar by transforming: $d = (-x + 1) / 2$. The $-$ sign is a source of hassles in metrics computation.
  2. Do the thresholding with the above equal threshold like threshold=0.8 and then just issue the decission: if s >= threshold: match=True
JVGD
  • 1,088
  • 1
  • 6
  • 14