22 mars 2012

TER

Dans le cadre de mon Master 1 info à Nice, nous devons à partir d'Avril à temps plein faire un stage de recherche en informatique. Notre coordinateur nous a proposé un panel de sujets de TER (Travaux Encadré de Recherche) et j'ai fait mon choix.



Avec 3 autres camarades de classe nous allons nous attaquer à la reconnaissance d'images similaires et plus particulièrement les différents moyens d'y arriver. On nous a donc imposé l'algorithme SURF pour la détection de points d'intérêt et la génération de descripteurs, et l'algorithme KNN pour trouver les images les plus similaires.
C'est un algorithme de détection et de description de caractéristiques d'images. On peut voir SURF comme une boîte noire qui prendrait une image, et en sortie nous donnerait des descripteurs ou pour faire plus simple des vecteurs de dimension 64 qui serraient une sorte de tag quasi-unique de l'image en entrée. SURF se base sur un autre algorithme similaire apellé SIFT (Scale Invariant Feature Transform),SURF se démarque par l'utilisation de propriétés mathématiques différentes, et bien évidement celà joue énormément sur les performances globales.

Il est d'ailleurs possible d'avoir des vecteurs plus petits avec SIFT (dimension 36) et plus rapides à obtenir, mais ils sont alors moins représentatifs de l'image (on pourrait avoir des faux positifs). SURF se décompose en 2 parties, que je ne vais pas trop détailler car moi même j'ai encore des difficultés à comprendre les rouages mathématiques par derrière. La première partie est la détection des points d'intérêt, j'y reviendrais plus en détails dans un prochain article sans doute :D mais il faut se rendre compte que le nombre de points d'intérêts peut varier d'une image à une autre. Dans la deuxième partie on calcule un descripteur qui permettra de le comparer avec un autre, puisque la taille du descripteur est statique. La comparaison dans notre cas, nous permet de chercher la distance euclidienne entre 2 descripteurs, si on ajoute à cela la possibilité de le faire pour chacun des descripteurs de 2 images, on peut alors établir des correspondances entre les 2 images. Maintenant si on applique ça à un ensemble d'images, on peut trouver pour une image de référence son image la plus similaire.

Pour notre TER nous allons devoir comparer l'implémentation de SURF et la recherche des images similaires en utilisant des Threads natifs (en Java), l'implémentation en Java sur Hadoop, et l'implémentation sur GPU. Notre encadrant de TER nous a laissé assez de liberté pour qu'on puisse choisir nous même les implémentations qui nous intéressent, ce qu'on devra implémenter, et même le cahier des charges pour les benchmarks.

Aucun commentaire: