À travers cet article, Freelance Informatique vous dit tout ce qu’il faut savoir sur le VGG, de son histoire à ses applications concrètes, en passant par son fonctionnement et ses différents algorithmes.
Pour bien comprendre le VGG, il convient de revenir quelques années en arrière pour évoquer le Deep Learning, dont le VGG fait partie intégrante.
S’il est apparu dès les premiers temps de l’informatique, le véritable Deep Learning moderne a émergé au tout début des années 2010. Il s’agit d’une méthode d’apprentissage automatique inspirée du fonctionnement du système nerveux humain. Il se différencie du machine learning par l’énorme quantité de données que ses algorithmes lui permettent de gérer.
Ces données sont traitées par des architectures de réseaux de neurones artificiels profonds. Le terme “profonds”, ou “deep”, fait référence au nombre de couches dont sont constituées ces architectures. Cette profondeur permet une haute performance dans la résolution de problèmes complexes faisant intervenir des données de haute dimension. Elle entraîne aussi inévitablement une complexification des modèles.
L’utilisation d’un grand volume de données couplée à une puissance de calcul importante permet d’accomplir des actions très spécifiques, notamment dans les domaines de la reconnaissance d’image, de la reconnaissance vocale, de l’imagerie médicale ou de la robotique.
C’est dans ce contexte de développement des architectures de réseaux de neurones qu’apparaît en 2014 le VGG. Il s’intègre donc dans la course à l’efficacité et à la simplicité qui caractérise alors le domaine du Deep Learning.
Conçu à l’université d’Oxford par A Zisserman et K Simonyan, il démontre toute sa cohérence lorsqu’il est présenté en 2014 à la conférence de l’ILSVRC (ImageNet Large Scale Visual Recognition Challenge). Confronté aux 14 millions d’images stockées par ImageNet, il obtient une précision de 92,7% dans la classification des images, ce qui reste le meilleur résultat à ce jour pour un algorithme.
Ce score a pu être obtenu grâce à une innovation technique : l’utilisation de noyaux de convolution (ou filtres) de dimensions nettement inférieures à ceux qu’employaient les prédécesseurs du VGG (3x3). Cette réduction de la taille des noyaux de convolution a permis plusieurs améliorations :
Toutefois, avant d’en venir aux applications concrètes du VGG, il convient de comprendre son fonctionnement précis.
Le fonctionnement du VGG repose sur l’utilisation de réseaux de neurones. Ces réseaux sont conçus pour apprendre à partir de données en utilisant des architectures complexes.
L’architecture des réseaux de neurones imite le fonctionnement du cerveau humain. Un neurone artificiel est une unité de base qui reçoit des entrées pondérées, les combine à l’aide d’une fonction d’activation et produit une sortie qui est transmise à d’autres neurones.
L’architecture en question se compose de plusieurs couches de neurones artificiels. Celles-ci garantissent une parfaite compréhension et intégration des données à la machine.
Ces couches de neurones sont de trois types :
Elles peuvent être :
Ce sont ces deux derniers types de couches qui vont permettre la conception du VGG.
Le fonctionnement des modèles de VGG se base sur les réseaux neuronaux convolutifs. L’entrée de ces derniers réseaux est composée de données d’image, tandis que la sortie fournit des prédictions de catégorie correspondant aux images d’entrée.
Comme nous l’avons vu précédemment, le VGG utilise des noyaux de convolution d’une taille de 3x3. Il prend en entrée une image de 224x224 et les différentes couches s’appuient sur ces noyaux convolutifs pour découper l’image dans son intégralité.
Chaque couche cachée (essentiellement des couches convolutionnelles et des couches de pooling) extrait ainsi des informations de plus en plus abstraites et complexes à partir des pixels de l’image en entrée. Ces mêmes informations permettent ensuite de reconnaître des motifs et des objets dans l’image finale.
Ces informations atteignent enfin la couche de sortie. Celle-ci attribue des probabilités à différentes classes d’objets, ce qui donne la possibilité au modèle de faire des prédictions sur ce que représente une image donnée.
Il existe deux algorithmes VGG préentraînés, le premier prenant en charge 16 couches (on parle alors de VGG16) et le second 19 couches (VGG19). Les deux algorithmes fonctionnent sensiblement de la même façon. Le VGG19 possède simplement 3 couches convolutionnelles supplémentaires.
Le VGG16 dispose d’environ 138 millions de paramètres et présente une architecture simple et uniforme. Le nombre de filtres est de 64, mais il est possiblement doublé pour atteindre d‘abord 128, puis 256 et enfin 512 filtres dans les dernières couches. En outre, avec ses 13 couches convolutionnelles et ses 3 couches connectées, sa structure brille par sa simplicité.
L’architecture du VGG19 est un peu plus complexe en raison des 3 couches supplémentaires. S’il nécessite en conséquence plus de ressources en termes de calcul et de mémoire, il est aussi plus performant notamment grâce aux 144 millions de paramètres qu’il possède. Sa profondeur plus importante permet de mieux capturer les caractéristiques complexes.
Il est possible de récupérer sur la bibliothèque Deep Learning Keras le modèle VGG16 de base, entraîné sur ImageNet. En raison de sa profondeur et du grand nombre de filtres, la création d’une architecture VGG est un défi de taille, l’apprentissage de ses différents paramètres prenant beaucoup de temps. Elle implique de réfléchir à sa finalité et de concevoir son architecture en fonction de cette dernière. Elle induit également des mises en œuvre techniques de programmation et de validation.
Avant de passer à la conception proprement dite, il est ainsi nécessaire de préciser certains points, comme le taux d’apprentissage, le nombre de filtres par couche, le nombre de couches, la taille des filtres, etc.
Il s’agit donc de définir la capacité du futur réseau, en fonction de ses objectifs et des possibilités du matériel informatique qui le soutiendra.
Cette étape est importante. Comme nous l’avons vu, un modèle VGG se compose de plusieurs couches de convolution suivies de couches de pooling. Les couches connectées sont ensuite utilisées pour la classification finale.
Une fois ces choix opérés, il sera nécessaire de passer à la programmation pour implémenter efficacement l’architecture VGG. Le langage Python figure parmi les langages de programmation les plus souvent plébiscités pour la conception d’un modèle VGG.
Ses bibliothèques d’apprentissage automatique (TensorFlow et PyTorch) facilitent la création et l’entraînement des réseaux de neurones. La bibliothèque Deep Learning Keras est également écrite en langage Python. Open source, facile à comprendre et à prendre en main, elle offre une aide non négligeable à la création de modèles et à leur évaluation.
Une fois l’architecture VGG créée, il convient de l’entraîner sur un ensemble de données comme ImageNet.
L’architecture VGG est terminée. Elle est également préentraînée. Il s’agit à présent de vérifier sa fiabilité.
Les tests unitaires évaluent chaque composant du réseau de manière isolée. Les tests fonctionnels, quant à eux, vérifient le comportement global du modèle sur des jeux de données.
La cross-validation (validation croisée) constitue également une méthode intéressante pour évaluer la généralisation d’une architecture VGG. Elle vérifie la capacité du modèle à généraliser sur des données non vues.
Enfin, pour quantifier les performances du modèle, il est aussi possible d’avoir recours aux matrices de confusion.
Un fois le modèle VGG entraîné et validé, l’utilisation du transfert learning peut lui apporter de nouveaux ensembles de données qui sont spécifiques à une tâche particulière. Il s’agit d’un simple transfert de connaissances qui permet d’obtenir de meilleures performances en adaptant le modèle aux caractéristiques des nouvelles données.
La même année que l’apparition du VGG, une équipe de chercheurs de Google a développé l’architecture Inception, également connue sous le nom GoogleLeNet. L’année suivante, en 2015, le ResNet (pour Residual Network), conçu par Microsoft Research, s’est immédiatement posé en concurrent du VGG et d’Inception dans le domaine de la vision par ordinateur.
Le modèle ResNet a notamment introduit le concept de blocs résiduels. Ces derniers ont permis de former des réseaux de neurones beaucoup plus profonds (jusqu’à 152 couches). Quant à Inception, il est conçu pour optimiser l’utilisation des ressources, mais se révèle très complexe et difficile à adapter aux différents contextes.
Le VGG reste le choix de référence lorsque la tâche à accomplir nécessite une architecture simple et uniforme. Il nécessite moins de ressources et apparaît donc plus adapté à des environnements limités par des contraintes de calcul.
Le modèle VGG est très largement utilisé dans divers domaines de la vision par ordinateur et de l’apprentissage profond.
Initialement développé pour la reconnaissance d’objets dans des images, il aide à la localisation, à l’identification et à la classification de différents objets avec une précision élevée. Ceci est indispensable dans le bon fonctionnement de nombreux objets robotisés.
Le VGG a également été appliqué avec succès dans la classification d’images médicales (IRM et radiographies) et apporte une précieuse contribution dans la détection de maladies ou d’anomalies.
C’est toutefois dans le domaine de l’IHM (Interface Homme-Machine) que l’évolution semble la plus prometteuse actuellement. Détection d’activités humaines, analyse d’émotions faciales, analyse des mouvements des mains ou du corps, identification d’objets ou de personnes : le VGG est essentiel à la gestion des relations homme-machine. Il participe à l’amélioration des interfaces visuelles et se combine à d’autres technologies pour créer des interfaces interactives capables d’interpréter et de répondre aux demandes et besoins des utilisateurs de manière proactive et immersive.