Classification des images à l'aide des fonctionnalités SIFT et SVM

12

J'espère que quelqu'un pourra expliquer comment utiliser le modèle du sac de mots pour effectuer la classification d'images à l'aide des fonctionnalités SIFT / SURF / ORB et d'une machine à vecteur de support?

Pour le moment, je peux calculer les vecteurs de fonctionnalité SIFT pour une image et avoir implémenté un SVM, mais j'ai du mal à comprendre la littérature sur la façon d'utiliser le modèle de sac de mots pour `` quantifier par vecteur '' les fonctionnalités SIFT et construire des histogrammes qui donnent vecteurs de taille fixe, qui peuvent être utilisés pour entraîner et tester le SVM.

Tous les liens vers des tutoriels ou de la littérature sur le sujet sont les bienvenus, merci

Jono Brogan
la source

Réponses:

16

Si vous pouviez implémenter un SVM, vous pouvez quantifier les fonctionnalités. :)

En règle générale, les caractéristiques sont quantifiées à l'aide du clustering k-means. Tout d'abord, vous décidez de la taille de votre "vocabulaire" (disons 200 "mots visuels"), puis vous exécutez le clustering k-means pour ce nombre de clusters (200). Les descripteurs SIFT sont des vecteurs de 128 éléments, c'est-à-dire des points dans un espace à 128 dimensions. Vous pouvez donc essayer de les regrouper, comme tout autre point. Vous extrayez des descripteurs SIFT d'un grand nombre d'images, similaires à ceux que vous souhaitez classer à l'aide d'un sac de fonctionnalités. (Idéalement, cela devrait être un ensemble d'images distinct, mais dans la pratique, les gens obtiennent souvent des fonctionnalités de leur ensemble d'images d'entraînement.) Ensuite, vous exécutez le clustering k-means sur ce grand ensemble de descripteurs SIFT pour le partitionner en 200 (ou autre) clusters , c'est-à-dire affecter chaque descripteur à un cluster. k-means vous donnera 200 centres de cluster,

Ensuite, vous prenez chaque descripteur SIFT dans votre image et décidez lequel des 200 clusters il appartient, en trouvant le centre du cluster le plus proche. Ensuite, vous comptez simplement le nombre de fonctionnalités de chaque cluster que vous avez. Ainsi, pour toute image avec un nombre quelconque de fonctionnalités SIFT, vous avez un histogramme de 200 cases. C'est votre vecteur d'entités que vous donnez au SVM. (Remarque: le terme fonctionnalités est largement surchargé).

Si je me souviens bien, il y a eu beaucoup de travail sur la façon de normaliser ces histogrammes. Je me trompe peut-être, mais je semble me souvenir d'un article qui prétendait qu'un vecteur de caractéristiques binaires (c'est-à-dire 1 si au moins 1 caractéristique de ce cluster est présent, et 0 sinon) fonctionnait mieux qu'un histogramme. Vous devrez vérifier la littérature pour plus de détails, et les détails sont importants.

Edit: la boîte à outils du système de vision par ordinateur pour MATLAB fournit désormais le sac de fonctionnalités .

Dima
la source
Salut Dima, merci pour votre réponse, je viens d'avoir une question, quand vous dites "alors vous exécutez le clustering k-means pour ce nombre de clusters", sur quoi exécutez-vous le clustering k-mean? ps Je suis presque tenté d'accepter cette réponse pour votre commentaire sur le terme fonctionnalité étant excessivement surchargé, je suis tout à fait nouveau dans le traitement d'image et je ne pourrais pas être plus d'accord
Jono Brogan
@JonoBrogan: Vous devriez accepter ma réponse, car elle est correcte. :) J'ai édité la réponse pour essayer de clarifier k-means.
Dima
Est-ce que cela a du sens maintenant?
Dima
Oui, merci. J'ai accepté la réponse, bien que je me demande simplement comment savez-vous comment décider du nombre de "mots visuels" à utiliser?
Jono Brogan
3
Mais le plus gros problème est que l'algorithme Kmeans ne donne pas toujours le même résultat. Il est fortement aléatoire.