Three months ago, I participated in a data science challenge that took place at my company. The goal was to help a marine researcher better identify whales based on the appearance of their flukes. More specifically, we were asked to predict for each image of a test set, the top 20 most similar images from the full database (train+test). This was not a standard classification task. I spent 3 months prototyping and ended up third at the final (private) leaderboard. But let’s not enter the specifics of this challenge. The purpose of this post is to share with you my tips on building strong embedding models for visual similarity tasks. This challenge was a superb learning opportunity where I tried a lot of different techniques. So I’ll share with you here what best worked and what did not, and I’ll detail the different steps I undertook in the process.