0

Je veux mettre en œuvre un système où une image d'entrée donnée, il renvoie un similaire similaire (approximation est acceptable) dans un ensemble de données de (environ) 50K images. Les performances temporelles sont cruciales.Vecteur de Fisher avec LSH?

Je vais utiliser une version parallèle de SIFT pour obtenir une matrice de descripteurs D. J'ai lu à propos de Fisher Vector (FV) (VLfeat et Yael implémentations) comme une alternative d'apprentissage et beaucoup plus précise au sac de caractéristiques (BoF) pour représenter D comme un seul vecteur v.

Ma question sont:

  1. Quelle distance est utilisé pour FVS? Est-ce l'euclidien? Dans ce cas, j'utiliserais LSH en distance euclédienne pour trouver rapidement le voisin proche des FV.
  2. Il existe un autre FV efficace (en termes de temps) C++ mise en œuvre?

Répondre

0

Une autre méthode que vous pouvez prendre en compte est le codage VLAD. (Fondamentalement, une version non probabiliste de FV, en remplaçant les GMM par k-Means clustering)

La mise en œuvre ne diffère que légèrement de la quantification vectorielle standard, mais mes expériences ont montré une bien meilleure performance avec une taille de livre de codes significativement plus faible.

Il utilise la distance euclidienne pour trouver le vecteur de dictionnaire le plus proche, mais au lieu de simplement compter les éléments, il accumule tous les éléments résiduels.

Un exemple pour la recherche d'image: Link

FV/papier VLAD: Paper

+0

D'après ce que je comprends votre réponse, VLAD sont meilleurs que FV, ce qui me surprend depuis (très utile BTW, merci!) Je pensais que FV était une amélioration de VLAD. C'est une bonne chose, car je ne comprenais pas complètement les GMM. Quoi qu'il en soit, qu'en est-il de l'utilisation de LSH pour les distances E2 (comme [FALCONN] (https://falconn-lib.org/)) pour trouver le ANN? Dernière chose: quelles implémentations de VLAD/FV avez-vous utilisées? – justHelloWorld

+0

J'ai écrit ma propre implémentation basée sur le papier donné. J'ai utilisé OpenCVs BFMatcher pour faire la correspondance, mais vous pouvez remplacer cette partie par n'importe quoi d'autre. Le code est en C++ – s1h

+0

Bien sûr, cela dépend de l'implémentation, mais l'approche VLAD va être plus coûteuse que celle de BoF? – justHelloWorld