• 15 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 08/07/2022

Utilisez ces features pour classifier des images

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 $\(K\)$ classes d'images possibles. L'ensemble $\(\{0,1,...,K-1\}\)$ définit les labels des différentes classes (exemple : 0 = "oiseau" et 1 = "chien")

  • Nous avons une collection de $\(N\)$ images en entrée : $\(\{X_i \}_{i \in \{1,...,N\}}\)$

  • Les classes des $\(N\)$ images sont connues à l'avance : chaque image $\(X_i\)$ est étiquetée par $\(y_i \in \{0,1,...,K-1\}\)$

  • Le but est de classifier correctement une nouvelle image, dont on ne connaît pas la classe : on veut trouver la bonne étiquette $\(y'\)$ de $\(X'\)$

Le schéma ci-dessous illustre la méthode utilisée pour résoudre ce problème :

Les trois étapes d'un algorithme de classification d'images
Les trois étapes d'un algorithme de classification d'images

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. 

Exemple de visual words. Chaque ligne représente plusieurs features représentatives d'un visual word (exemple : première ligne = aile d'avion)
Exemple de visual words. Chaque ligne représente plusieurs features représentatives d'un visual word (exemple : première ligne = aile d'avion)

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.

Création des visual words par clustering des descripteurs
Création des visual words par clustering des descripteurs
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 :

Une image et son histogramme indiquant la fréquence d'apparition de chaque visual word
Une image et son histogramme indiquant la fréquence d'apparition de chaque visual word

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é :

  1. plus proches voisins (k-NN)

  2. Régression logistique

  3. SVM (2 classes)

  4. SVM (multi-classes)

  5. SVM à noyau

Exemple de certificat de réussite
Exemple de certificat de réussite