Introduction
La vision par ordinateur est l’un des sujets les plus chauds de l’intelligence artificielle. Le professeur Fei-Fei Li l’a défini comme un sous-ensemble de l’intelligence artificielle dominante qui traite de la science de la fabrication d’ordinateurs ou de machines visuellement compatibles, c’est-à-dire qu’ils peuvent analyser et comprendre une image.
Tout comme le cerveau humain fonctionne, les ordinateurs utilisent les données reçues pour essayer de comprendre les schémas dans les images et prendre des décisions basées sur ces connaissances. De nos jours, avec la grande quantité de données disponibles, les algorithmes sont de plus en plus capables de résoudre des problèmes complexes qui étaient considérés comme impossibles il y a des années.
Du point de vue de l’ingénierie, le but de la vision par ordinateur est d’accomplir des tâches similaires à celles du système visuel humain.
Après avoir lu cet article, vous saurez ce que sont les réseaux neuronaux convolutifs et pourquoi ils sont bien adaptés aux problèmes de vision par ordinateur. Nous passerons également en revue un exemple concret d’application.
Réseaux neuronaux convolutifs
Le réseau neuronal convolutionnel, ou CNN, est une architecture de réseau neuronal bien adaptée aux données d’image bidimensionnelles, mais peut être appliquée aux données unidimensionnelles ou tridimensionnelles. Il est composé de plusieurs couches convolutionnelles comme le montre la figure ci-dessous :


Comprenons maintenant le rôle d’une couche convolutionnelle. Comme son nom l’indique, il effectue une convolution qui est un type d’opération linéaire spécialisée. Sa définition dans l’apprentissage profond peut varier de celle utilisée en ingénierie ou en mathématiques pures.
Pour illustrer le rôle de l’opération de convolution, prenons un exemple concret. Supposons que nous recevons une sortie continue d’un appareil et que nous voulons utiliser une moyenne pondérée pour ajouter de la robustesse aux estimations, les dernières sorties ayant plus de poids. Nous utiliserions cette fonction “s” :


Dans cet exemple spécifique, “w” devrait être une fonction de densité de probabilité valide pour obtenir une moyenne pondérée. Cependant, l’opération de convolution est définie chaque fois que l’intégrale est définie. Dans le cas des réseaux de neurones convolutifs, “x” est une variable discrète et nous pouvons avoir une entrée multidimensionnelle.
Dans le cas d’une image bidimensionnelle, la convolution est définie comme :


Dans le contexte de l’apprentissage machine, l’algorithme d’apprentissage apprendra les valeurs appropriées du noyau à l’endroit approprié.


Dataset
Nous travaillerons sur un sous-ensemble de données Caltech-UCSD Birds-200-2011. Voici une brève présentation :
Dataset | Taille | Types d’oiseaux distincts |
Training set | 1082 | 20 |
Validation set | 103 | 20 |
Comme vous pouvez le voir, les données d’entraînement ne contiennent qu’un petit nombre d’images, ce qui est difficile car les réseaux neuronaux contiennent généralement des millions de paramètres à régler. L’idée ici est d’effectuer un apprentissage par transfert à partir d’un réseau neuronal préformé sur la base de données ImageNet où plus de 14M images ont été annotées à la main pour indiquer quels objets sont représentés et dans au moins un million d’images, des encadrés sont fournis.
En fait, certaines images de cet ensemble de données chevauchent des images d’ImageNet. Par conséquent, nous devons être prudents lorsque nous utilisons des modèles pré-entraînés pour éviter de tricher. Ceci sera traité dans le prétraitement (augmentation des données) et dans les étapes d’apprentissage (réentrainement des couches).
Pré-traitement
Afin de résoudre le problème précédent et d’éviter de surajuster les modèles, nous effectuerons des techniques d’augmentation de données sur les images d’entraînement.
- Redimensionnement : Nous redimensionnons toutes les images en 224*224 afin d’utiliser les réseaux de neurones préformés sur PyTorch.
- Rotation horizontale aléatoire : Nous effectuons un retournement horizontal sur les images avec une probabilité de 0,75.
- Rotation verticale aléatoire : Nous effectuons un retournement vertical sur l’image avec une probabilité de 0,5.
- Transformation affine aléatoire : Nous effectuons une transformation affine aléatoire en utilisant les paramètres suivants dans PyTorch : Degrés =[-30,30] – Traduire =[0.15,0.15] – Échelle =[0.5,2].
- Normalisation : Nous normalisons le tenseur de l’image à la moyenne zéro et à la variance unitaire.
Modèle
Le meilleur modèle est le VGG19 qui utilise des couches de convolution (filtres 3×3), des couches de pooling max (2×2). Nous avons ajouté deux couches denses (25088,2048) et (2048,64) et éventuellement une couche classificatrice.


En plus d’effectuer l’augmentation des données pour éviter le surajustement et la tricherie, nous figerons les trois premiers blocs de couches et reconfigurerons le reste.
Nous avons choisi de geler les quatre premières couches de convolution pour deux raisons :
- Leur but est de créer des caractéristiques simples comme des bords. Ainsi, nous pouvons conserver les poids générés à partir de l’ensemble de données ImageNet.
- Temps de calcul : Nous n’avons plus qu’à rétropropager le gradient pour les couches suivantes.
Résultats


Le meilleur modèle selon la précision de validation est celui correspondant à la 64ème époch.