Naver-AI-Hackathon / AI-Vision

67 stars 34 forks source link

simple questions about l2_normalize in baseline #300

Open visionNoob opened 5 years ago

visionNoob commented 5 years ago

현재 baseline의 l2_normalize 함수가 예상대로 제대로 동작하지 않는 것 같습니다. baseline에서 (제가 이해한 바로는) query, reference vectors간의 cosine similarity 계산에 앞서 vector normalization을 수행합니다. https://github.com/AiHackathon2018/AI-Vision/blob/5596b8e45541fc980d7d5effb80096872511c797/main.py#L44-L51

이때 l2_normalize 함수에서 np.linalg.norm를 이용해서 벡터의 norm 을 계산하는데, 현재 코드는 axis가 명시되어 있지 않아서 전체 matrix의 norm을 계산합니다. 아마도, column vectors별로 norm이 각각 계산이 되어야 cosine similarity가 제대로 계산되지 않을까 싶습니다.

https://github.com/AiHackathon2018/AI-Vision/blob/5596b8e45541fc980d7d5effb80096872511c797/main.py#L68-L72

image (see also, https://colab.research.google.com/drive/1XJ82_111ufE64CeA3ymMPisWYnePoyNK)

제안하고 싶은 해결방법이 있나요?

def l2_normalize(v):
    norm = np.linalg.norm(v, axis=1, keepdims=True)
    return np.divide(v, norm, where=norm!=0)  # only divide nonzeros else 1

https://github.com/insurgent92/AI-Vision/blob/c679010879078dbcf439310b355af081109290d4/main.py#L98-L100

Hackoperation commented 5 years ago

네, 언급하신 현재 베이스코드의 l2_normalization 함수는 전체 matrix기준으로 norm을 계산하여 실제로 하고자하는 각 feature별 l2_normalization을 수행하지 못하는 것 같습니다. colab에 올려주신 테스트 코드 확인하였고, 제안하신 l2_normalize 코드가 제대로 작동하는 것 같습니다. 오류를 바로잡아 주셔서 감사합니다! 제안하신 함수는 baseline코드에 반영하도록 하겠습니다. 감사합니다.