Maintenant que vous savez détecter et décrire les features d'une image, nous allons apprendre, dans ce chapitre, à nous en servir pour classifier des images.
La classification d'images est un problème fondamental en vision par ordinateur, qui a de nombreuses applications concrètes. Le but est de construire un système capable d'assigner correctement une catégorie à n'importe quelle image en entrée. Un tel système exploite des algorithmes de Machine Learning issus de l'apprentissage supervisé.
Pourquoi s'embêter à faire du Machine Learning ? A la place, on pourrait définir les caractéristiques de chaque classe (par exemple, classe "oiseau" : bec, ailes ; "chien" : museau, pattes...), puis classifier l'image en fonction des features trouvées. C'est bien plus simple !
Cette stratégie, qui consiste à définir "à la main" des règles pour différencier les classes d'images, était en fait traditionnellement utilisée il y a 40 ans. Mais elle demande un travail fastidieux et manque de flexibilité : avec la quantité énorme d'images à notre disposition aujourd'hui, elle est extrêmement difficile à mettre en oeuvre ! Le Machine Learning a l'avantage de définir automatiquement les règles permettant de distinguer n'importe quelle classe d'une autre.
La méthode de résolution
Le problème de classification d'images est posé formellement de la manière suivante :
Il y a classes d'images possibles. L'ensemble définit les labels des différentes classes (exemple : 0 = "oiseau" et 1 = "chien")
Nous avons une collection de images en entrée :
Les classes des images sont connues à l'avance : chaque image est étiquetée par
Le but est de classifier correctement une nouvelle image, dont on ne connaît pas la classe : on veut trouver la bonne étiquette de
Le schéma ci-dessous illustre la méthode utilisée pour résoudre ce problème :
Vous savez déjà faire l'étape 1 : il suffit d'appliquer les méthodes étudiées dans les deux chapitres précédents ! En pratique, on utilise seulement SIFT pour détecter et décrire les features.
La suite du chapitre est donc consacrée à l'explication des étapes 2 et 3.
Création des bag-of-features
Si vous avez suivi le cours sur les données textuelles, le terme "bag-of-features" doit vous sembler familier : il s'agit du modèle bag-of-words adapté pour décrire les images !
Comme son nom l'indique, un bag-of-features représente une image par un "sac" dans lequel on a mis ses features en vrac. Mathématiquement, c'est un vecteur créé en deux temps : d'abord, on crée les "visual words", puis on construit un histogramme.
Création des visual words
Le bag-of-words caractérise un document textuel par les mots qu'il a utilisés. Ici, les images sont caractérisées par les features trouvées lors de l'étape 1.
Néanmoins, s'il est possible de retrouver plusieurs mots strictement identiques dans deux documents, ce n'est pas le cas pour les images et les features. En effet, le critère de répétabilité nous dit qu'une feature peut se retrouver dans plusieurs images, mais les features sont toutes différentes lorsqu'on les compare pixel par pixel. Cela s'explique par les variations géométriques, photométriques, ou mêmes dues aux apparences différentes d'un objet d'une classe (exemple : il y a plusieurs types d'oiseaux).
Ainsi, on obtient beaucoup de features, mais certaines représentent un même élément de façons différentes. Ces éléments qui se déclinent en plusieurs versions sont appelées des visual words. par analogie avec les données textuelles : les textes sont caractérisés par des mots, et les images par des mots visuels.
Pour créer le "dictionnaire" de visual words, il suffit d'appliquer un algorithme de clustering aux descripteurs de features construits à l'étape 1, comme le k-means. Les visual words correspondent alors aux centres des clusters trouvés.
Construction de l'histogramme
Il reste à décrire les images en fonction de ces visual words. Pour chaque image, on crée un histogramme qui indique la fréquence d'apparition de chaque visual word dans l'image :
Finalement, le bag-of-features d'une image est le vecteur dans lequel on a stocké les valeurs de l'histogramme et qu'on a normalisé (en divisant par la norme euclidienne).
Classification supervisée
C'est la dernière étape de notre méthode de résolution : l'objectif est d'apprendre les règles de décision permettant d'assigner correctement une représentation bag-of-features à une classe. Cela signifie qu'on va entraîner un algorithme d'apprentissage supervisé sur les bag-of-features construits à l'étape 2.
Les algorithmes que l'on peut utiliser ont déjà été expliqués en détails dans d'autres cours. Si vous n'êtes pas familiers avec les techniques d'apprentissage supervisé, je vous encourage très fortement à lire les chapitres suivants, classés dans l'ordre croissant de difficulté :