• Aucun résultat trouvé

7.2.2 Partitionnement de l’espace

Si nous considérons maintenant plusieurs points requête, la méthode BF devient très coûteuse en temps de calcul. Le calcul d’une distance étant souvent long en haute dimension, l’inconvénient de la méthode BF vient du fait que toutes les distances sont calculées. Ainsi, de nombreux travaux de recherche ont proposé des méthodes minimisant le nombre de distances calculées (branch and bound).

Un kd-tree [Ben75, Ind04] (pour k-dimensional tree) est une structure de données (arbre binaire) construite à partir d’un ensemble de points défi- nis dans un espace Euclidien de dimension k. Par la suite, cette dimen- sion sera notée d pour lever l’ambiguïté avec le paramètre k utilisé pour la recherche des kPPV. Un kd-tree est une partition de l’espace Euclidien, chaque noeud et chaque feuille étant un point de l’ensemble considéré. L’arbre est construit en début de programme en considérant l’ensemble des points de référence. Ensuite, chaque point requête parcourt l’arbre se- lon une procédure particulière jusqu’à trouver ses kPPV. L’arbre étant une partition de l’espace, le parcourt consiste grossièrement à descendre dans l’arbre en calculant à chaque étape la distance entre le point requête et le point de référence contenu dans le noeud courant. À la fin de la procédure, seule une partie de l’arbre a été parcourue.

La construction d’un kd-tree est une procédure récursive simple à mettre en oeuvre. Cette procédure est fondée sur la recherche du point médian, c’est-à-dire la recherche du point appartenant à un ensemble et qui sépare cet ensemble en deux parties égales. Dans un espace Euclidien de dimen- sion 1, la notion de médian est clairement définie. Pour un espace de dimen- sion supérieure, cette notion n’est pas claire car il existe un grand nombre de partitions possibles d’un ensemble de points en deux sous-ensembles de taille égale. Pour la construction d’un kd-tree, la recherche du médian est toujours réalisée relativement à une dimension choisie. Cette recherche est donc semblable à celle en dimension 1.

SoitPun ensemble de m points définis dans un espace Euclidien de dimen- sion d. La première étape consiste à déterminer le médian de l’ensemble

P relativement à la première dimension. Ce médian constitue la racine de l’arbre. Les points inférieurs au médian (relativement à la dimension 1) constituent le sous-arbre gauche, et les points supérieurs constituent le sous-arbre droit. Le médian de chaque sous-ensemble est alors déterminé relativement à la seconde dimension. Ces médians correspondent aux ra- cines des sous-arbres gauche et droit, mais aussi aux fils gauche et droit de la racine de l’arbre. Nous disposons à ce stade de 4 sous-ensembles dans lesquels la recherche du médian est réalisée relativement à la troisième di- mension, et ainsi de suite. Cette procédure est itérée jusqu’à ce que l’en-

106 Chapitre 7. Recherche des k plus proches voisins

semble des dimensions ait été utilisé. La figure 7.2 illustre l’exemple de la construction d’un kd-tree.

FIGURE7.2 – Construction d’un kd-tree à partir d’un ensemble de 7 points dé- finis dans un espace Euclidien de dimension 2. Figure inspirée d’une illustration provenant du site Internet Wikipedia [Wik].

7.2.3 Locality sensitive hashing

Pour des méthodes fondées sur le partitionnement de l’espace (e.g. kd- tree), il a été montré [WB98] que la recherche des kPPV en haute dimension n’était pas nécessairement plus rapide qu’une simple méthode exhaustive. Andoni et al. ont proposé [IM98, GIM99, DIIM04, AI06] une méthode de re- cherche des kPPV particulièrement intéressante pour de telles dimensions. Cette méthode, nommée LSH (pour Locality Sensitive Hashing), est fondée sur des fonctions de hachage.

Les fonctions de hachage sont des outils très utilisés en informatique et en cryptographie. Pour une information donnée, une fonction de hachage associe une valeur appelée valeur de hachage (ou empreinte). Le calcul d’une fonction de hachage doit être extrêmement rapide. Pour des appli- cations classiques en informatique, la valeur de hachage est généralement un condensé ou tout simplement un indice servant à identifier très rapide- ment une donnée particulière. En règle générale, la valeur de hachage est plus courte que la donnée initiale. Le terme collision est employé pour in- diquer que deux données différentes ont la même valeur de hachage. Une collision empêche de différencier des données ayant une même valeur de hachage. Ainsi, il est en général judicieux de choisir une fonction de ha- chage permettant d’éviter au maximum les collisions.

La méthode LSH repose globalement sur la remarque suivante. Pour une fonction de hachage donnée, la probabilité que deux points proches aient une même valeur de hachage est forte. Inversement, la probabilité que deux points éloignés aient une même valeur de hachage est faible. Soit

7.2. Méthodes de recherche des kPPV 107

F une famille de fonctions de hachage h : M → S définies sur l’espace métriqueM = (M, ρ). Soient R > 0 un seuil, c> 1 un facteur d’approxi- mation, h ∈ F une fonction choisie aléatoirement, et p et q deux points de

M.F est une famille LSH si elle vérifie les deux conditions suivantes : – Si ρ(p, q) ≤R alors Pr[h(p) =h(q)] ≥ P1,

– si ρ(p, q) ≥cR alors Pr[h(p) =h(q)] ≤P2.

où Pr[h(p) = h(q)] désigne la probabilité que les points p et q aient la même valeur de hachage (collision). Une telle famille est dite (R,cR,P1,P2)-

sensitive et est intéressante pour P1 > P2. Dans notre application, l’espace

métrique considéré est l’espace Euclidien muni de la distance Euclidienne. Soit ha,b : Rd →Z une fonction de hachage définie sur Rdet à valeur dans

Z. Pour p∈Rd, ha,best définie par :

ha,b(p) =

 a·p+b w



(7.1) où a est un vecteur de dimension d pour lequel chaque composante est tirée aléatoirement dans R selon une loi normale, et où b est un nombre réel tiré uniformément dans [0, w]. Le paramètre w correspond à la largeur de la projection. Dans [DIIM04], ce paramètre est fixé à w=4. SoitG une famille de fonctions de hachage construites par la concaténation de v fonctions de hachage h=ha,b:

g(p) = [h1(p), h2(p),· · · , hv(p)] (7.2)

Pour p∈ Rd, g(p)est vecteur à valeurs dans Zv. g(p)est appelé sceau (bu- cket en anglais) car plusieurs points différents peuvent « tomber » dans le même sceau, c’est-à-dire avoir la même valeur de hachage relativement à la fonction g.

Nous disposons de deux ensembles de points : R = {r1, r2,· · · , rm} les

points de référence etQ = {q1, q2,· · · , qn}les points requête. La première

étape de l’algorithme consiste à construire L fonctions de hachage g1, g2, · · ·, gL. Chaque point de référence ri est ajouté aux sceaux g1(ri), g2(ri), · · ·, gL(ri). Le nombre de sceaux possible étant trop important, les diffé-

rents sceaux rencontrés sont stockés dans une table de hachage classique. Ensuite, pour chaque point requête qj, l’algorithme collectionne les points

de référence appartenant aux sceaux g1(qj), g2(qj),· · ·, gL(qj). Afin d’opti-

miser le temps de calcul, l’algorithme parcourt ces différents sceaux jusqu’à obtenir 3L points de référence, répétitions incluses, où jusqu’à ce que les L fonctions g aient été parcourues. Dans cette version de l’algorithme, seuls les points collectionnés tels que d(qj, ri) < R sont gardés. Cela permet de

s’assurer que les kPPV sont à une distance inférieure de R des points re- quête. L’ultime étape consiste à calculer les distances entre qj et les points

de référence collectionnés. Les kPPV sont les points de référence (collec- tionnés) fournissant les k plus petites distances.

108 Chapitre 7. Recherche des k plus proches voisins

L’intérêt de l’utilisation de la méthode LSH réside dans le fait de ne devoir calculer les distances qu’avec un nombre très restreint de points de référence. Ceci permet à LSH d’être actuellement la méthode de re- cherche la plus rapide en haute dimension. Cependant, cette méthode pré- sente quelques inconvénients pour des applications de traitement d’images. Premièrement, la méthode LSH est intéressante par rapport à une méthode de type kd-tree pour une très haute dimension et pour un grand nombre de points. Le gain observé est de l’ordre de 30 si 100000 points de dimen- sion 500 sont utilisés. En traitement d’images, les dimensions rencontrées dépassent rarement 100 (généralement <20). Le gain est alors assez faible (de l’ordre de 5). Deuxièmement, l’étude réalisée par les auteurs ne tient compte que de la partie recherche, la création de l’ensemble des sceaux étant pré-calculée. Ce pré-calcul n’étant pas toujours possible en traite- ment d’images, le temps nécessaire au calcul des sceaux (souvent très long) s’ajoute au temps de recherche. Par conséquent, la méthode LSH peut être plus lente qu’une méthode de type kd-tree pour la recherche de kPPV. Enfin, la méthode LSH ne garantit pas que les k points de référence sélec- tionnés soient effectivement les kPPV pour un point requête donné. Les paramètres v et L doivent être choisis de manière à minimiser le temps de calcul tout en garantissant une qualité minimale des kPPV sélectionnés. Dans [DIIM04], les auteurs utilisent v = 10 et L = 30 pour toutes leurs expérimentations.

§ 7.3

R

ÉSUMÉ

La recherche des k plus proches voisins, notée kPPV, est un problème couramment rencontré dans différents domaines du traitement d’images. En particulier, la recherche des kPPV permet d’estimer efficacement des mesures statistiques telles que l’entropie de Shannon ou la divergence de Kullback-Leibler en haute dimension. La méthode la plus simple est la re- cherche exhaustive consistant à tester l’ensemble des points de référence pour ne retenir que les k plus proches. Cette méthode a pour inconvénient majeur d’être très lente. De nombreuses méthodes sont proposées pour ac- célérer le processus de recherche. Par exemple, l’utilisation d’un kd-tree permet de partitionner l’espace. La recherche des kPPV consiste alors à par- courir une partie de l’arbre (de l’espace) évitant de fait un grand nombre de calculs. La méthode LSH, fondée sur l’utilisation de fonctions de hachage, est à l’heure actuelle la méthode de recherche la plus rapide en haute di- mension. Cependant, cette méthode est peu adaptée à des problèmes de traitement d’images. Il en résulte que des méthodes utilisant des kd-trees sont souvent plus rapides pour de telles applications.

Toutes ces méthodes sont adaptées à l’architecture des ordinateurs actuels utilisant les processeurs (CPU) standard pour effectuer des calculs. Cepen-