19 octobre 2022

Les Datasets synthétiques, un atout pour booster vos projets

Retrouvez toutes nos autres videos sur notre chaîne YouTube.

 

I-L’apport de la génération de données synthétiques pour l’IA

 

L’accès à une grande quantité d’images est crucial pour les applications de Deep Learning (DL) et notamment en Computer Vision (CV). Nous avons vu ces dernières années beaucoup de discussions sur les approches data centric [1] qui sont un véritable sujet pour les performances de solutions d’IA. En effet, la volumétrie et la qualité de la donnée avec laquelle nous entraînons un modèle de DL ont un impact direct sur les performances de nos modèles. C’est pourquoi il est important d’avoir accès à de la donnée de qualité en quantité suffisante et permettant de représenter la diversité souhaitée pour la tâche demandée.

Cependant, collecter et labelliser/annoter des images du monde réel représente un investissement financier et en temps non-négligeable. Effectivement, la mise en place d’un protocole de prise d’image peut être compliqué dans un contexte industriel voir parfois impossible. À cela il faut ajouter l’intervention humaine lors de la labellisation qui est sujette aux erreurs et donc à l’introduction d’un biais lors de l’entraînement.

Dans ce contexte, la création d’un jeu de données synthétiques est une solution tout à fait adaptée. Cette approche permet de générer des données labélisées à partir de peu (ou pas) de données. Selon les problématiques et le contexte du notre client, nous pouvons proposer plusieurs approches telles que les méthodes de data augmentation, data randomizer, ou encore les generative adversarial network (GAN) ou des rendus d’image 3D :

Data augmentation : ajouter au dataset existant des copies d’images légèrement modifiées. Appliquer cette technique permet d’accroître la quantité d’images avec des features équivalentes et de légères différences en termes de couleur, exposition, position, bruit, etc. Cette méthode nécessite d’avoir un minimum de données.

Data randomizer : cette méthode permet de transférer des éléments entre images. Par exemple, changer de fond ou changer des objets entre deux images (par exemple, échanger la chevelure de deux personnes différentes).

Synthetic data (GAN, rendu 3D, etc) : Créer des objets nouveaux avec les caractéristiques des objets réels sans les représenter directement (contrairement à une photo qui représente directement l’objet). Ces méthodes permettent de remplacer ou compléter un jeu de données réel.

Pour la mise en place de solutions de CV, nous devons avoir à notre disposition un dataset d’images ainsi que les annotations associées représentatives de la tâche à réaliser (classification, détection, segmentation). Cette collecte d’images et leur labellisation dans un contexte industriel est un réel challenge. Dans ce cas, générer des images synthétiques est un moyen de créer un dataset adapté au contexte. De plus cela peut être une solution flexible permettant de faire évoluer rapidement les données selon les limites du modèle mises en évidence.

  • L’utilisation de datasets synthétique permet de lever ces différents verrous pour la création rapide, faible et robuste de solutions d’IA.
    • Pas de prises d’images
    • Pas de labellisation d’images
    • Dataset modifiable rapidement

Dans la suite de cet article, nous présentons l’utilisation d’un logiciel de rendu 3D pour la génération d’un jeu de données.

 

II-La génération d’images synthétiques grâce à Blender

 

De façon générale, les jeux de données réelles peuvent présenter différents types d’obstacles : labellisation souvent chronophage et laborieuse, difficulté d’obtenir des annotations correctes et précises d’autant plus lorsque les objets à annoter sont petits, de la complexité de la tâche en fonction des réalités terrain (l’objet est pris sous différents angles, il peut être partiellement occulté, ou présenter une variabilité dans sa forme et ou sa couleur qui rend son identification plus délicate, etc.). Dans cet article, nous présentons l’utilisation d’un logiciel qui permet de créer des scènes artificielles et de générer un dataset synthétique, selon des critères prédéfinis. Plusieurs solutions sont envisageables lorsque l’on parle de la génération de données synthétiques : logiciel de rendu 3D,  Generative Adversarial Networks (GAN) ou AutoEncoders (AE).

 

Le logiciel open source Blender [2] est un logiciel de rendu 3D qui permet notamment de produire, à partir de fichiers CAO (modèles 2D ou 3D d’objets), un rendu d’image dans un environnement choisi. La labellisation est réalisée de manière automatique lors de la génération de l’image, que ce soit une annotation pour une tâche de classification, une bounding box ou encore un masque de segmentation. Ainsi selon le problème industriel à considérer, nous pouvons créer des images avec leur labels associés.

En d’autres termes, dans un cadre industriel où des fichiers CAO des objets sont à disposition, nous pouvons générer un jeu de données réalistes. L’automatisation de la génération d’images est réalisée à l’aide de script python. Grâce à cette approche, nous pouvons aisément produire une grande variété d’images de l’objet d’intérêt, et en quantité conséquente permettant ainsi un entraînement d’autant meilleur d’un modèle de Deep Learning.

Les facteurs influant sur la diversité des images générées incluent par exemple :

  • La position de la (des) source(s) de lumière
  • L’intensité de la (des) source(s) de lumière
  • La position de la camera
  • La distance focale
  • Les bruits
  • Les reflets
  • L’occlusion
  • Le choix du fond (homogène ou à partir d’images)

Grâce à cette flexibilité et à la variété qui peut être intégrée lors de la génération des images, nous pouvons créer et tester différents jeux de données, et ne conserver que les plus pertinents pour l’apprentissage d’une solution DL. De la même manière, les données synthétiques peuvent faciliter une première mise en œuvre d’un projet d’IA en tant que preuve de concept (PoC).

 

III-Exemple d’utilisation : les briques de Lego

 

Dans cet article, nous proposons d’illustrer le processus de génération d’un jeu de données synthétiques grâce à Blender et son application pour une solution d’IA. Nous nous intéressons ici à un exemple simple de classification d’images de briques de Lego [6], où les images sont prises en considérant une caméra fixe en top view (prises au-dessus de la pièce).

Pour cet exemple, nous avons constitué un jeu de données de 1 500 images synthétiques pour 10 briques de Lego différentes, à partir de modèles 3D de briques de Lego [3]. À cela nous avons ajouté un dataset réel d’une centaine d’images, qui nous sert uniquement à évaluer les performances du modèle sur des données réelles.

La figure 1 montre des exemples d’images générées avec le logiciel Blender avec des variations de lumière, de fond et de position de la caméra et de l’objet. Certaines de ces images frappent par leur réalisme !

 

Images synthétiques de la brique de Lego n°3001

Figure 1 : Images synthétiques de la brique de Lego n°3001. Images générées avec Blender [2].

Le jeu de données est constitué de 10 briques de Lego dont la couleur et la forme diffèrent. Les références des briques de lego sont les suivantes :

  • 3001 : 4x2x2 Orange ;
  • 3003 : 2x2x2 Bleu ;
  • 3008 : 8x1x2 Blanc ;
  • 3009 : 6x1x2 Blanc ;
  • 3010 : 4x1x2 Orange ;
  • 3020 : 4x2x1 Orange ;
  • 3024 : 1x1x1 Jaune ;
  • 3037 : 4×1 Violet ;
  • 3460 : 8x1x1 Blanc ;
  • 3666 : 6x1x1 Orange.

Ces briques ont été choisies afin d’illustrer certains des challenges qui surviennent régulièrement en pratique (sur des chaînes de production par exemple). Les figure 2 et 3 représentent un de ces challenges, à savoir la présence de pièces dans le dataset visuellement similaires mais qui diffèrent en termes de rapport de forme ou de couleur.

 

Briques oranges ayant des rapports de formes différents.

Figure 2 : Briques oranges ayant des rapports de formes différents. De gauche à droite : brique référence 3001, 3010 et 3020. Images générées avec Blender.

 

Briques blanches ayant des rapports de formes différents.

Figure 3 : Briques blanches ayant des rapports de formes différents. De gauche à droite : brique référence 3008, 3009 et 3460. Images générées avec Blender.

 

Un réseau de neurones convolutionnel (CNN) de type ResNet [4], pré-entrainé sur Imagenet [5], a été utilisé afin de classer les briques de Lego selon leur référence. Ce réseau a été adapté en ajoutant des couches de pré-traitement (augmentation des données pour ajouter de la diversité dans les images) et des couches de post-traitement pour améliorer les performances.

Les performances en sortie de réseau monter une accuracy de 88% sur le jeu de données synthétique de test. Les erreurs du modèle en sortie de réseau sont dues principalement à 2 aspects :

  • Etant donné que nous avons des briques avec des couleurs identiques et des formes similaires, une image en top view peut être confondue même à l’œil nu (voir figure 2 et 3). C’est le cas, par exemple si nous regardons en top view de profil les briques 3001 et 3010 (figure 2). Cette confusion ne peut pas être supprimée en nous limitant à une image top view.
  • Certaines autres confusions sur ces briques semblables en sortie de réseau sont traitées en post traitement par une approche de computer vision détaillé ci-dessous.

La majorité des erreurs de classification sur les datasets synthétique et réel proviennent des briques ayant des formes similaires (figure 2 et 3). Afin d’améliorer ces performances, nous avons utilisé notre librairie interne SmartVision, outil développé pour répondre aux problématiques de computeur vision. Dans cette démonstration, SmartVision a été utilisé pour la gestion des données en entrée du modèle, mais aussi pour booster les performances de notre modèle. En effet, notre module feature extractor (FE) post-traite les images en sortie de la classification DL et extrait les features de rapport de formes pour les briques ambigües, permettant ainsi d’apporter une correction sur la prédiction du modèle de classification DL. Grâce à ce post-traitement supplémentaire nous améliorons les résultats de 88% à 92% Pour le dataset synthétique.

Nous avons ensuite testé notre modèle sur un dataset réel d’images de brique de lego de même référence prises en top view. Nous obtenons une accuracy de 74% en sortie de réseau et une accuracy de 80% avec notre post-traitement. Comme nous pouvons le noter, nous observons des performances moins bonnes sur le dataset de test sur images réelles.  Le transfert d’un apprentissage sur des données synthétiques aux données réelles n’est pas direct. Ces résultats sont communément admis dans la littérature et constituent un sujet de recherche active dans le domaine [7]. Ils mettent en exergue les limites de l’utilisation d’un dataset 100% synthétique pour l’apprentissage. Ce problème peut être en partie levé par l’introduction d’images réelles lors de l’apprentissage.

 

Conclusion

 

Comme il peut être parfois compliqué et coûteux de mettre en place un protocole opératoire de prise d’images et d’y associer une campagne de labellisation, l’utilisation de données synthétiques devient de plus en plus courante. Ces approches de création de jeu de données peuvent être particulièrement pertinentes dans certains cas comme la création d’une proof of concept (POC) où l’investissement dans la création d’un jeu de données doit être limité, ou encore dans des cas où il est compliqué d’accéder à la donnée.

Comme nous l’avons vu précédemment, il existe plusieurs techniques pour générer des images synthétique (GAN, VAE, logiciel rendu 3D, etc.). Dans cet article, nous avons détaillé un exemple d’utilisation de rendu 3D, particulièrement pertinente dans les problématiques où nous avons accès à des modèles CAO d’objets. Les principaux avantages que nous voyons à l’utilisation d’un logiciel de rendu 3D sont :

  • La possibilité de générer autant de données que nous en avons besoin
  • La possibilité de choisir l’environnement (fond, position lumière, objet, caméra …)
  • Contrôle de la donnée : formatage, structure et labélisation

Cependant, le modèle entraîné sur des données synthétiques n’est pas suffisant pour représenter le monde réel et la généralisation de ce modèle n’est pas forcément directe. La première approche avec un entrainement sur des données 100% synthétique nous donne une première baseline satisfaisante que nous pouvons améliorer notamment par l’intégration de données réelle lors de l’entrainement.

By : Anita Dehoux, Mathilde Galinier et Francesco Gizzarelli

Anita Dehoux

Références

 

[1] Dr. Andrew Ng https://www.youtube.com/watch?v=06-AZXmwHjo

[2] Blender https://www.blender.org/

[3] LDraw https://github.com/TobyLobster/ImportLDraw

[4] Deep Residual Learning for Image Recognition  https://arxiv.org/abs/1512.03385

[5] Deng, J. et al., 2009. Imagenet: A large-scale hierarchical image database. In 2009 IEEE conference on computer vision and pattern recognition. pp. 248–255

[6] https://www.lego.com/fr-fr

[7] Swami Sankaranarayanan, Yogesh Balaji, Arpit Jain, Ser Nam Lim, Rama Chellappa, 2018. Learning From Synthetic Data: Addressing Domain Shift for Semantic Segmentation. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pp. 3752-3761

 

 

Nous respectons
votre vie privée

En poursuivant votre navigation sur ce site, vous acceptez l’utilisation de cookies pour réaliser des statistiques de visites.