Blog de Pythonia

Guides, IA, tutos et newsletter pour devenir une bête en programmation

Télécharger Apprendre-la-programmation-avec-python

Rejoignez notre communauté de professionnels et de passionnés, pour rester à la pointe des dernières actualités.

La classification d'image c'est quoi?




Mis à jour le July 14, 2022, 1:36 p.m.



Dans cet article, nous explorerons en détail les techniques et les méthodes utilisées pour réaliser la classification d'image. Nous commencerons par comprendre les principes de base de la classification d'image, puis nous plongerons dans les différentes approches, des méthodes classiques aux réseaux de neurones profonds. Nous aborderons également des sujets tels que la préparation des données, l'entraînement des modèles, l'évaluation des performances et les bonnes pratiques.


1- Introduction
2- Qu'est-ce qu'un CNN?
3- Que fait chaque couche du réseau?
4- Qu'est-ce que le padding?
5- Qu'est-ce qu'un kernel?
6- Vous avez dit fonction d'activation?
7- Softmax, kezako?
8- Stride
9- Pooling
10 -La couche flatten
11- Couche finale vs couches cachées (hidden)


Introduction

La classification des images consiste essentiellement à prendre une image et à trouver ce qu'elle représente. C'est un processus qui consiste à prendre une image et à la classer dans l'une de plusieurs classes prédéfinies. Ces classes peuvent sont en règles générales définies par un utilisateur. La classification est effectuée à l'aide de l'apprentissage supervisé, où l'algorithme apprend à partir d'exemples d'images étiquetées avec leur classe correcte. Par exemple, pour apprendre qu'une image de chat appartient à la classe "chat", on le labellise chat. Nous verrons en pratique comment faire.

Cela revient simplement à donner un label à une image. Par exemple, on donnera à l'image ci-dessous le label voiture.

 

On donnera à l'image ci-dessous le label camion. Vous avez compris l'idée. Et il nous faut faire ça pour de nombreuses images



 

Ensuite nous allons créer un algorithme qui apprendra les différentes caractéristiques de chacune des classes afin de pouvoir les classer.
Le type d'algorithmes utilisés pour la classification d'images est appelé réseaux de neurones à convolutions (CNN).

1- Qu'est-ce qu'un réseau neuronal convolutif (CNN)?

Comme nous l'avons vu, en apprentissage automatique, un classificateur attribue une étiquette de classe à un point de données. Par exemple, un classificateur d'images produit un label pour chaque classe (voiture, camion) pour les objets présents dans une image. Un réseau neuronal convolutif (CNN) est un type de classificateur qui excelle dans la résolution de ce problème !

Un CNN est un réseau neuronal : un algorithme utilisé pour reconnaître des patterns dans les données. Les réseaux neuronaux en général sont composés d'une collection de neurones organisés en couches, chacune avec ses propres poids et biais (qui sont les paramètres que le reseaux de neurones apprends à modifier pour "apprendre" le mieux possible). Décomposons un CNN en ses éléments constitutifs de base.

1 - Un tenseur peut être considéré comme une matrice à n dimensions. Dans le réseau CNN, les tenseurs seront tridimensionnels, à l'exception de la couche de sortie.
2 - Un neurone peut être considéré comme une fonction qui prend plusieurs entrées et produit une seule sortie.
3 - Une couche est simplement une collection de neurones avec le même fonctionnement, y compris les mêmes hyperparamètres.
4 - Les poids et les biais des noyaux, bien qu'uniques à chaque neurone, sont réglés pendant la phase d'apprentissage et permettent au classificateur de s'adapter au problème et au jeu de données fourni.
5 - Un CNN une fonction de score différentiable, qui est représentée sous forme de scores de classe dans la visualisation sur la couche de sortie.

Si vous avez déjà étudié les réseaux neuronaux, ces termes peuvent vous sembler familiers. En quoi un CNN est-il différent ? Les CNN utilisent un type de couche spécial, appelé à juste titre couche convolutive, qui les rend bien placés pour apprendre à partir d'images. En effet, les CNN peuvent être utilisés pour de nombreuses tâches de vision par ordinateur, telles que le traitement, la classification, la segmentation et la détection d'objets..

2- Que fait chaque couche du réseau ?

La couche d'entrée représente l'image d'entrée dans le CNN. Comme nous utilisons des images RGB en entrée, la couche d'entrée comporte trois canaux, correspondant respectivement aux couleurs rouge, vert et bleu, qui sont représentés dans cette couche.

Les couches de convolutions sont la base du CNN, ce sont elles qui vont apprendre les caractéristiques des images du jeu de données sur lesquelles on entraine l'algorithme. C'est exactement ce dont nous avons besoin pour la classification !

Blabla matheux: Le neurone convolutif effectue un produit scalaire (dot product en anglais) par élément avec le kernel et la sortie du neurone correspondant de la couche précédente. Cela donnera autant de résultats intermédiaires qu'il y a de kernels uniques. Le neurone convolutif est le résultat de tous les résultats intermédiaires additionnés avec le biais appris.

Pour un reseau de neurones, plusieurs hyperparamètre entrent en jeu. Les hyperparamètres d'un réseau de neurones sont des paramètres qui ne sont pas directement appris à partir des données, mais qui doivent être choisis avant l'entraînement du modèle. Ils peuvent avoir un impact significatif sur la performance du réseau de neurones et doivent donc être soigneusement sélectionnés. Certains exemples d'hyperparamètres courants d'un réseau de neurones comprennent le nombre de couches cachées dans le réseau, le nombre de neurones par couche, le taux d'apprentissage utilisé pour l'entraînement, et la fonction d'activation utilisée pour chaque couche. Il est important de noter que l'optimisation des hyperparamètres peut être une tâche complexe et prendre beaucoup de temps, car il est souvent nécessaire de les ajuster de manière expérimentale pour trouver les meilleurs réglages pour un modèle donné. En gros, c'est la partie qui nécessite pas mal de patience, surtout au début.

 

3- Qu'est ce que le padding?

Le padding est une technique utilisée dans le traitement d'images ou de données pour ajuster la taille des données en entrée d'un modèle de traitement. Cela consiste généralement à ajouter des zéros en fin de ligne ou en fin de matrice, afin d'obtenir des données de même taille. Cela peut être utile pour des modèles de traitement qui nécessitent des données de taille fixe en entrée, ou pour aligner les données avant de les traiter.

 

4- Qu'est-ce qu'un kernel et à quoi ça sert? Quelle taille faut il lui donner?

Un kernel est un petit tableau de valeurs utilisé dans les opérations de convolution en traitement d'images ou de données. Le kernel est appliqué sur des données en entrée, en les faisant glisser sur ces données pour calculer des nouvelles valeurs en sortie. Le kernel peut être utilisé pour effectuer des opérations de filtrage ou de transformation sur les données en entrée.

La taille d'un kernel dépend de l'application pour laquelle il est utilisé. Généralement, les kernels sont de petite taille, souvent compris entre 3x3 et 7x7 valeurs. Cependant, il peut être utile d'utiliser des kernels de taille plus grande dans certains cas, en fonction des besoins de l'application.

 

5- Qu'est ce qu'une fonction d'activations et pourquoi sont-elles indispensables?

Une fonction d'activation est une fonction mathématique utilisée dans les réseaux de neurones pour introduire une non-linéarité dans les calculs. Cela permet au réseau de neurones de modéliser des relations non-linéaires entre les données d'entrée et les valeurs de sortie.

Les fonctions d'activation sont indispensables dans les réseaux de neurones car elles permettent au réseau de traiter des données complexes et de modéliser des relations non-linéaires. Sans elles, les réseaux de neurones ne seraient pas capables de résoudre des problèmes complexes et leur performance en matière d'apprentissage serait considérablement réduite.

 

6- Qu'est ce que la softmax?

La softmax est une fonction d'activation utilisée dans les réseaux de neurones pour la classification. Elle est généralement utilisée dans la couche de sortie d'un réseau de neurones pour produire des probabilités pour chaque classe en sortie.

La fonction softmax est définie comme suit :

softmax(x)i = exp(xi) / sum(exp(x))

où x est un vecteur de valeurs en entrée et i est l'indice de chaque valeur dans le vecteur. La fonction softmax calcule la probabilité associée à chaque valeur en entrée en normalisant les valeurs en entrée avec la fonction exponentielle, puis en les divisant par la somme de toutes les exponentielles des valeurs en entrée.

La fonction softmax est utile pour la classification car elle garantit que les probabilités en sortie de la couche de sortie somment toujours à 1, ce qui est requis pour les probabilités. Elle peut également être utilisée pour calculer la cross-entropy en combinaison avec la fonction de coût pour l'entraînement du modèle.

7- C'est quoi une stride?

Une stride est la distance à laquelle le kernel (ou filtre) d'une couche de convolution est déplacé lors de l'application sur les données en entrée. Plus précisément, la stride définit le nombre de pixels à sauter entre chaque application du kernel sur les données en entrée.

La stride est généralement réglée sur 1, ce qui signifie que le kernel est déplacé d'un pixel à la fois sur les données en entrée. Cependant, il peut être utile de régler la stride sur une valeur supérieure à 1 dans certains cas pour réduire la dimensionnalité des données en sortie ou pour accélérer le processus de convolution.

En général, le choix de la valeur de la stride dépend des besoins de l'application et peut être déterminé en fonction des performances du modèle lors des tests.

 

8- C'est quoi du pooling? A quoi ça servent les pooling layers?

Le pooling est une technique utilisée dans les réseaux de neurones convolutionnels pour réduire la dimensionnalité des données en entrée. Les pooling layers sont des couches dans lesquelles le pooling est appliqué.

Le pooling est généralement effectué en divisant l'espace de données en entrée en un ensemble de sous-régions, puis en calculant une agrégation des valeurs dans chaque sous-région, comme la valeur maximale ou la valeur moyenne. Cela permet de réduire la dimensionnalité des données en entrée sans perdre trop d'informations.

Les pooling layers sont utilisées dans les réseaux de neurones convolutionnels pour plusieurs raisons. Premièrement, elles permettent de réduire la quantité de données en entrée, ce qui peut accélérer le processus d'apprentissage et réduire la consommation de mémoire. Deuxièmement, elles peuvent aider à réduire l'overfitting en limitant la quantité d'informations disponibles pour les couches suivantes du réseau de neurones. Enfin, elles peuvent améliorer la robustesse des résultats en introduisant de la translation invariance dans le modèle, ce qui signifie que les résultats ne seront pas trop sensibles aux légers décalages des données en entrée.

 

9- A quoi sert la couche Flatten?

La couche Flatten est une couche utilisée dans les réseaux de neurones convolutionnels pour convertir des données de plusieurs dimensions en une matrice à une seule dimension. Elle est généralement utilisée après les couches de convolution et de pooling pour préparer les données en entrée pour les couches de neurones fully-connected qui suivent.

La couche Flatten est utile car elle permet de traiter les données en entrée avec des couches de neurones fully-connected, qui ne peuvent gérer que des données à une seule dimension. Elle permet également de combiner les informations provenant des différentes caractéristiques extraites par les couches de convolution et de pooling précédentes, ce qui peut améliorer les performances du modèle.

10- Quelles sont les différences entre les fonctions d'activation des couches cachées et de la couche de sortie?

Il n'y a pas de différence fondamentale entre les fonctions d'activation utilisées dans les couches cachées et celles utilisées dans la couche de sortie d'un réseau de neurones. Les deux types de couches peuvent utiliser les mêmes fonctions d'activation, comme la fonction sigmoïde ou la fonction ReLU.

Cependant, il peut être utile de choisir des fonctions d'activation différentes pour les couches cachées et la couche de sortie en fonction de l'application spécifique pour laquelle le réseau de neurones est utilisé. Par exemple, dans les cas où le réseau de neurones est utilisé pour la classification, il peut être utile d'utiliser une fonction sigmoïde dans la couche de sortie pour produire des probabilités de chaque classe en sortie. Dans d'autres cas, comme la régression, il peut être plus approprié d'utiliser une fonction linéaire en sortie. En général, le choix de la fonction d'activation dépend des besoins de l'application et peut être déterminé en fonction des performances du modèle lors des tests.

 

 

Pour apprendre à faire de la classification d'image en pratique je vous invite à aller voir sous la section computer vision ici: computer vision

 




Inscrivez-vous pour ne pas louper la suite de cette série.


Commentaires

Aucun commentaire pour cet article.

Laissez un commentaire