Data augmentation : des solutions face au manque de données

Si vous nous suivez depuis quelque temps, vous n’êtes pas sans savoir que les données constituent un rouage absolument essentiel dans tout projet IA.

En effet, ces données sont à la base de tout apprentissage machine, que l’on parle du Deep Learning comme du Machine Learning. Dans la plupart des cas, ce sont les données et leurs caractéristiques qui vont orienter d’autres choix technologiques comme la cible de déploiement (le hardware nécessaire), les algorithmes d’apprentissage et les modèles.

Depuis longtemps, le volume de données cristallise l’attention de biens des personnes, pensant que seule la quantité de données revêt d’un caractère crucial.

Or, avec les dernières avancées scientifiques et technologiques en matière de data engineering, la quantité de données n’est plus le Graal tant convoité puisqu’il est possible d’augmenter son jeu de données et donc augmenter le volume de données. Concrètement, il existe des solutions pour répondre aux problématiques quantitatives.

Aujourd’hui, donc, la qualité des données prime puisqu’un jeu de données représentatif est indissociable d’un entraînement réussi et donc d’un modèle performant.

Rappel – Qu’est-ce qu’une donnée exploitable ?

Si vous suivez assidûment Neovision et nos différentes publications, vous avez probablement lu notre article relatif au traitement des données. Ou plutôt des traitements, qui permettent de rendre des données brutes exploitables par un algorithme d’apprentissage.

Mais revenons-en au sujet du jour, l’augmentation de données.

L’Augmentation de données, ou Data Augmentation

Qu’est-ce que c’est ?

La data augmentation, ou l’augmentation de données comme le disait Molière en son temps, consiste à augmenter la quantité de données disponibles pour un apprentissage.

Or, avant de vouloir augmenter la quantité de données, encore faut-il partir d’une base solide et donc d’un jeu de données représentatif.

Admettons donc que nous ayons ces fameuses données de très bonne qualité. L’augmentation de données capitalise sur cette base de qualité pour générer de nouvelles données tout aussi représentatives mais en amenant une variabilité supplémentaire. Cette variabilité renforce le caractère représentatif et exhaustif du jeu de données d’entraînement. A terme, cette augmentation de données permet de déboucher sur des modèles plus performants et fiables car plus robustes aux variations.

Pour procéder à cette augmentation du jeu de données, il existe plusieurs approches.

Comment ça marche ?

Transformation de données

La première approche consiste à transformer des données existantes, c’est ce que nous appelons la transformation de données ou la génération de données. Pour expliquer cela le plus simplement possible, et avant d’approfondir le sujet par la suite, prenons l’exemple des images. Pour réaliser une transformation de données, il s’agira d’appliquer un traitement sur chaque image, pour générer de nouvelles images, des variantes de l’image initiale. On peut, par exemple, parler de rotation, de contraste, de rognage, etc. Mais nous y reviendrons par la suite.

Simulation et données de synthèses

La seconde approche se base elle aussi sur un jeu de données représentatif mais ici, le but sera de créer de toutes nouvelles images réalistes, et non pas des variantes d’images existantes. Ici, nous aurons recours à des IA dites génératives comme les GANs, par exemple, mais aussi à des moteurs 3D pour créer des images de synthèses ou encore du transfer learning. Le but de cette approche est de créer de véritables données synthétiques, tout aussi représentatives que les données originales car générées à partir d’un jeu de données, de qualité, sur lequel un apprentissage aura été mené.

Transformation de données

Qu’est-ce que c’est ?

Revenons-en donc à la transformation de données. Comme expliqué précédemment, il s’agit ici de partir d’un jeu de données qualifié et de créer des “variantes” (pour reprendre un mot à la mode).

Le but n’est donc pas de créer de toutes nouvelles données mais bien d’apporter une certaine variabilité dans les données existantes.

Quelques traitements d'images permettant de transformer les données
Quelques traitements d'images permettant de transformer les données

Pour ce faire, nous allons donc transformer les données, leur apporter un traitement particulier que l’on ciblera en fonction de la variabilité que l’on peut trouver sur le terrain. Le but est donc d’ajouter ces variations aux jeux de données pour le rendre toujours plus représentatif et exhaustif.

Comment ça marche ?

Pour bien comprendre cela, intéressons à différentes méthodes aussi classiques qu’efficaces. Mais avant cela, il faut savoir que la plupart de ces méthodes consiste à représenter des variations que l’on peut trouver lors de l’utilisation de la technologie sur le terrain. Ces variations peuvent avoir des causes diverses : variété dans les capteurs utilisés, mauvaise utilisation de la technologie, variables environnementales…

La rotation : comme son nom l’indique, ce traitement consiste à modifier l’angle de l’image, à la faire tourner sur elle-même. Ainsi, lors de l’inférence, le modèle sera plus robuste aux changements d’angles et prises de vue. De ce fait, le protocole d’acquisition et d’utilisation se voudra plus souple.

Le flou et bruit : ce traitement consiste à ajouter un flou sur une image, l’information est donc plus difficile à extraire mais l’annotation de la donnée permet quand même de savoir ce qu’elle représente. En intégrant ce type de données visuelles, la technologie mise en production sera alors capable de traiter des images un peu plus floues. Ce qui arrive très souvent en utilisation réelle, soit par manque d’application ou de temps.

Le contraste : ici, l’idée est de modifier le contraste de l’image. En faisant cela, l’information intéressante peut être mise en évidence ou bien se fondre dans le reste de l’image. En fonction de l’appareil et du capteur utilisé, le contraste d’une image peut être amené à changer, et c’est là tout l’intérêt de ce traitement.

Le zoom ou rognage : le zoom permet de cibler une zone de l’image et de l’isoler. Là aussi, cette variation représente une réalité terrain. Pour identifier un objet, certains utilisateurs le prendront dans une scène tandis que d’autres iront zoomer dessus pour l’isoler. Pour que la technologie fonctionne en toute condition, ce traitement s’avère souvent nécessaire.

La luminosité : même idée que celle du contraste ou du flou. En utilisation sur le terrain, les conditions de luminosité peuvent changer fortement, ce qui aura un impact sur les données captées. En introduisant cette variable dans l’entraînement, le modèle obtenu sera robuste aux variations de luminosité.

Le but est de rendre le modèle généralisable et utilisable dans un maximum de contextes et cas de figure.

Voilà donc pour les traitements les plus basiques. Ces derniers peuvent être faits à la main mais cela représente une grosse charge de travail. Bien heureusement, il existe de nombreuses techniques pour automatiser ces traitements et les intégrer à des workflows.

Mais il existe d’autres méthodes encore plus efficaces et intéressantes, en fonction des tâches visées. Nous pensons par exemple à la composition. Cette méthode est certes plus complexe à mettre en œuvre mais elle apporte beaucoup plus de variations dans le jeu de données.

La composition : comme son nom l’indique, l’objectif visé par cette méthode est de créer… une composition donc. Elle se décompose en 2 grandes étapes. La première consiste à isoler l’objet que nous souhaitons détecter, classifier ou segmenter. La seconde étape revient à placer cet objet dans un nouvel environnement, un nouveau fond.
Pour bien comprendre cela, nous vous proposons deux exemples illustrés, le premier pour une tâche de détection, le second pour de la segmentation.

Exemple de données créées par composition, des objets positionnés aléatoirement sur des fonds représentant des scènes quotidiennes
Exemple de données créées par composition, des objets positionnés aléatoirement sur des fonds représentant des scènes quotidiennes

Retours d’Expériences Neovision

A Neovision, l’augmentation de données a une importance toute particulière et nous utilisons différentes techniques sur la quasi-totalité de nos projets.

En effet, nous sommes très challengeants avec nos clients lorsque nous diagnostiquons et qualifions leurs jeux de données. Une fois nettoyés, ils sont certes très représentatifs et parfaitement exploitables mais certains se retrouvent assez restreints.

Nous appliquons donc de nombreux traitements aux images exploitées pour augmenter le volume de données utilisées en apprentissage, mais aussi et surtout pour rendre le modèle plus généralisable.

Nous utilisons également d’autres traitements pour “standardiser” certains jeux de données. Prenons l’exemple de la rotation ou du bruit, ces traitements peuvent être utilisés pour amener des variations mais également pour corriger et standardiser certaines données.

Pour vous donner un peu de concret, sur le projet visant à reconnaître des dommages présents sur des pneus d’avions, le modèle devait être très robuste, invariant et généralisable.

En effet, la technologie est utilisée via une application mobile et reste tributaire de la précision humaine, assez aléatoire. De nombreuses photos seront prises de biais, avec une mise au point aléatoire et une luminosité variable. Il fallait donc intégrer cette variabilité au jeu de données d’entraînement. Pour cela, nous avons appliqué les traitements suivants :

  • random flip (inversion vertical/horizontal)
  • random width and height
  • random contrast
  • random rotation
  • random zoom

Le plus souvent, on les génère au moment même de l’entraînement. La transformation de données est alors un rouage intégré dans le système plus global et automatisé. Nous utilisons par exemple Dataset generator, il s’agit d’une classe qui contient toutes les règles de transformation et elle vient les appliquer automatiquement aux données.

Simulation et données de synthèse

Qu’est-ce que c’est ?

Contrairement à la transformation de données qui permet de générer des variantes de données existantes, la simulation de données vient générer des données totalement nouvelles. Seul point commun : avoir un jeu de données initial suffisamment représentatif.

Nous pouvons identifier deux approches différentes lorsque nous venons à parler de simulation de données :

  • l’utilisation de moteur 3D pour créer des environnements virtuels réalistes,
  • l’utilisation de réseaux génératifs capables de créer de toutes nouvelles données,
  • un mix des deux.

Des données représentatives permettront de refléter au mieux la réalité terrain, et donc les cas de figure que l’IA aura à analyser une fois utilisée. Cela assure que les données utilisées durant l’apprentissage seront proches de celles que l’IA aura à traiter une fois mises en production. Cette représentativité des données est un véritable facteur clé de succès dans le développement d’une IA. Elle cause des pertes de performances importantes si l’on passe à côté.

Quant à l’exhaustivité, elle permet de s’assurer que le jeu de données représente tous les cas de figure que l’IA pourra rencontrer. Réussir à être totalement exhaustif est utopique, mieux vaut alors viser une exhaustivité relative, mais la plus large possible.

Comment ça marche ?

Moteur 3D et environnements virtuels

Pour améliorer son jeu de données, les univers virtuels peuvent se révéler très intéressants et d’une grande aide !

En utilisant certains moteurs 3D à l’état de l’art, il est possible de créer des environnements bluffant de réalisme, que ce soient des objets, des scènes ou même des phénomènes physiques.

Le recours à ces moteurs est un bon moyen pour créer des jeux de données difficiles à capter : rareté des données, conditions et contraintes d’acquisitions complexes et/ou chronophages…

Reprenons un exemple, celui de la composition, présenté plus haut. Si nous souhaitons détecter un objet dans tous les contextes possibles et que cet objet est en 3D, vous devrez alors le prendre en photo, sous tous les angles possibles, pour pouvoir l’observer et donc le représenter quelle que soit sa position dans la scène. Et ça fait beaucoup de photos pour un seul objet ! Ensuite, vous devrez détourer chaque photo pour isoler l’objet et enfin, vous pourrez le positionner sur des photos de fonds représentant différentes scènes.

Avec un moteur 3D, vous pouvez reconstruire votre objet en 3D et produire tout un tas d’images le présentant sous tous les angles, de manière aléatoire, automatique et directement détouré. Vous pourrez ensuite incorporer ces images dans des scènes aléatoires (que vous pourriez aussi créer directement dans le moteur 3D).

Les GAN : Generative Adversarial Networks

Autre méthode et technologie permettant de générer des données de synthèse : l’IA !

Eh oui, l’intelligence artificielle peut se rendre service quand nous en venons à parler d’augmentation de données. Dans ce contexte, ce sont des réseaux de neurones bien particuliers qui entrent en jeu : les GAN. GAN pour Generative Adversarial Networks. Le concept est assez simple, un GAN est composé de deux IA, deux réseaux, un faussaire et un expert/discriminateur. Le faussaire est un générateur, et comme le nom choisi (merci Etienne) l’indique, son objectif est de générer les données les plus réalistes possibles. L’autre réseau, l’expert ou discriminateur, vient analyser les données générées par le générateur. Le discriminateur indique si la donnée qui lui est donnée en entrée est une vraie donnée ou une simulation.

Au départ, les données générées sont plutôt bien classifiées mais au fur et à mesure, le générateur apprend et génère des données toujours plus représentatives. Il faut dire que le générateur a un avantage de taille puisqu’il connaît le mode opératoire du discriminateur. Il va donc apprendre puis comprendre quelles données sont en mesure de “tromper” le réseau expert.

Ces technologies permettent de créer de toutes nouvelles données en partant d’un dataset réel et original. Ces données nouvellement créées rendent l’entraînement plus complet et conséquent. En guise de résultat, nous obtenons un modèle bien plus robuste et performant.

Allier GAN et environnement virtuel

Il existe enfin une approche combinant les deux précédemment présentées. Pour faire simple, il est possible de créer des objets et environnements virtuels, plus ou moins complexes. Une technologie GAN peut ensuite être utilisée pour transformer un environnement ou un objet simpliste en un environnement photo-réaliste. Cet environnement peut ensuite être utilisé pour générer des données d’entraînement.

Pour bien visualiser cela, nous vous invitons à visionner la vidéo ci-dessous. Ici, l’environnement virtuel utilisé est celui du jeu vidéo GTAV. Ce jeu vidéo offre un environnement virtuel assez réaliste. L’idée était alors d’utiliser cet environnement pour générer des données utiles à l’entraînement des véhicules autonomes. Mais il y avait un problème, le rendu graphique du jeu n’est pas représentatif des images générées par les caméras embarquées dans les véhicules. Un GAN a alors été utilisé pour venir changer le rendu visuel et le faire coller avec l’aspect des images réelles captées par les véhicules.

Retours d’Expériences Neovision

La simulation de données, c’est quelque chose que nous connaissons bien à Neovision pour l’avoir mis en pratique sur de nombreux projets clients.

Reconnaissance optique de caractères

Dans le cadre du projet mené pour le CTC, nous avons dû générer des données de synthèses pour venir étoffer et consolider le jeu de données d’entraînement. Ici, nous avons eu recours à une technologie GAN.

Pour vous rendre compte du réalisme des données générées, vous pouvez observer des données réelles et des données de synthèses ci-dessous.

Sauriez-vous distinguer lesquelles sont réelles et lesquelles sont de synthèse ? Survolez les images pour le découvrir !

VRAIES

FAUSSES

Détection et reconnaissance de disjoncteurs

Dans le projet de détection et reconnaissance de disjoncteurs électriques de Schneider Electric, nous avons eu recours à une autre technique, tout en impliquant un GAN. Ici, nous avons créé des masques sémantiques qu’un GAN a ensuite transformés en données photoréalistes, le tout accompagné des annotations.

Détection de chutes

Sur un projet de R&D interne visant à travailler sur la détection de chutes de personnes sur des images infrarouges, la cellule R&D a eu recours à un moteur physique et 3D pour créer des scènes animées représentant des chutes. Un rendu infrarouge a ensuite été appliqué à ces scènes.

Simulation de données représentant des chutes de personnes en infrarouge, le tout à partir du moteur graphique Blender
Simulation de données représentant des chutes de personnes en infrarouge, le tout à partir du moteur graphique Blender

Il faut dire que les données représentatives de chutes sont difficiles à collecter, en effet, ce sont des situations que nous essayons d’éviter au maximum. Cela est d’autant plus rare sur des images infrarouges.

Données réelles vs Données générées : comment s’assurer de leur représentativité ?

Maintenant que nous savons comment augmenter un jeu de données, nous pourrions penser qu’il ne reste plus qu’à lancer l’entraînement. Mais pas si vite !

Générer des données, c’est bien, mais générer des données représentatives, c’est mieux. Pour ne pas dire essentiel.

Une fois générées, vous devrez auditer et diagnostiquer ces données fraîchement créées pour vous assurer qu’elles soient bien similaires aux données réelles.

Pour cela, vous pouvez utiliser des outils de data engineering et plus particulièrement des outils permettant de cartographier et visualiser vos données.

Avec ce type d’outil, vous pourrez voir si vos données réelles et générées se fondent bien et se regroupent en clusters.

À Neovision, nous utilisons un outil maison, Tadaviz, qui nous permet de cartographier, visualiser, mais aussi annoter les données de nos projets. Depuis peu, nous mettons cet outil à disposition de nos clients ayant des compétences en data science pour qu’ils puissent devenir un peu plus autonome dans la préparation et la qualification de leurs jeux de données.

Conclusion

Comme nous avons pu le voir tout au long de cet article, un jeu de données restreint n’est plus considéré comme un frein ou un obstacle infranchissable pour votre projet IA.

Dès lors que vous disposez d’un jeu de données représentatif, il existe de nombreuses approches et méthodes d’augmentation de données permettant de le développer au niveau quantitatif : transformation de données, composition, génération et simulation de données…

Toutefois, et au risque de nous répéter, accroître le volume de données ne doit pas se faire aux dépens de sa représentativité. Or, comme vous l’avez compris, il existe là aussi des solutions pour s’en assurer.

Une chose est sûre, si vous avez des données qualifiées, il existe de nombreux moyens de les valoriser !

Mathieu Poissard
1 Comment

Post a Comment

Neovision © 2024