26 août 2016

Augmentation des images pour améliorer les modèles Machine Learning – Partie 1

Data & IA

Khalil

Elleuch

image homme ordinateur.

26 août 2016

Augmentation des images pour améliorer les modèles Machine Learning – Partie 1

Data & IA

Khalil

Elleuch

image homme ordinateur.

26 août 2016

Augmentation des images pour améliorer les modèles Machine Learning – Partie 1

Data & IA

Khalil

Elleuch

image homme ordinateur.


Les modèles d’apprentissage automatique ont besoin de données pour être formés. Plus on a de données, plus le modèle gagne en performance vu qu’il aura la possibilité de capter plus de comportements dans la partie Apprentissage. Alors que faire quand on n’a pas la quantité de données nécessaire ? Comment augmenter les images pour améliorer les modèles de Machine Learning ?



Dans cet article, on va parler de l’augmentation des images qui est une méthode très connue en Machine Learning qui permet d’enrichir notre set de données d’apprentissage. On va se concentrer sur l’aspect théorique pour comprendre l’utilité de l’augmentation des images et détailler les techniques d’augmentations d’images.



Un second article traitera l’aspect pratique en présentant un package Python populaire (imgaug) permettant d’augmenter les images et expliquer comment l’intégrer avec PyTorch et Keras pour traiter des problèmes de Deep Learning



Pourquoi on augmente les images ?



Les algorithmes, même les plus complexes et puissants, ont besoin de données pour entrainer le modèle. L'augmentation des données est l'une des solutions les plus adaptées pour ce genre de problématique. Au lieu d'essayer de trouver et d'étiqueter plus de données, nous en construisons de nouveaux en fonction de ce que nous avons.



L'augmentation des données d'image est peut-être la technique la plus connue d'augmentation des données. Elle regroupe les techniques utilisées pour augmenter artificiellement la taille d'un groupe de données d’apprentissage en créant des versions modifiées d'images à partir des images d’apprentissage disponibles.



Nous pouvons alors améliorer efficacement le processus d'apprentissage puisqu'il en résulte en plus d'échantillons d’entrainement pour le modèle de réseau de neurones. Les techniques d'augmentation peuvent créer des variations d’images qui peuvent améliorer la capacité des modèles d’entrainement pour généraliser ce qu'ils ont appris à de nouvelles images, ce qui améliore fortement la performance du modèle. Donc, si j'utilise les techniques d’augmentation d’image, mon algorithme d’apprentissage serait robuste ?



Augmenter les images suivant le scénario



Si vous utilisez les techniques d’augmentation des images de la bonne façon, le modèle serait plus performant et robuste. Mais, parfois, quelques techniques d'augmentation n'ont pas de sens pour un ensemble de données. L'objectif est d'étendre l'ensemble de données d’apprentissage avec de nouveaux exemples utiles et plausibles. Cela signifie que les variations des images permettront au modèle de détecter des comportements susceptibles d’apparaître dans l’ensemble de données de test.



Par exemple, un retournement horizontal d'une photo de voiture peut avoir un sens, parce que la photo aurait pu être prise à gauche ou à droite. Un retournement vertical de la photo n'a pas forcément de sens et ne serait probablement pas approprié étant donné que le modèle a très peu de chances de voir une photo d'une voiture à l'envers. Mais, si vous possédez une compagnie d'assurance qui s'occupe des accidents de voiture et que vous souhaitez également identifier des modèles de voitures cassées à l'envers, le retournement vertical aura du sens. L’image suivante présente les 2 cas de figures :





Par conséquent, il est clair que le choix des techniques d'augmentation de données est spécifique à chaque scénario et les variations doivent être choisies avec soin prenant en compte le contexte de l'ensemble de images et la problématique traitée. Nous devons nous assurer de ne pas ajouter des données non pertinentes, aberrantes à notre modèle. C’est la raison pour laquelle il est recommandé d'expérimenter des méthodes d'augmentation des données de manière isolée pour voir si elles permettent d'améliorer de manière mesurable les performances du modèle.



Augmenter uniquement les images d’entrainement



L'augmentation des données s'applique uniquement au jeu de données d’apprentissage et non pas au jeu de données de validation ou de test. Cela diffère de la préparation des données tel que le redimensionnement de l'image qui doit être exécuté de manière cohérente sur tout l’ensemble de données interagissant avec le modèle. Comme expliqué précédemment, l’augmentation des images est une technique permettant d’enrichir le modèle afin de détecter plus de variations de la donnée en entrée.



Techniques populaires d’augmentation d’images



Dans cette section, on va présenter quelques techniques populaires d'augmentation d’images qui sont couramment utilisées.



  • Flip / retournement



Un retournement (Flip) d'image signifie l'inversion des lignes ou des colonnes de pixels dans le cas d'un flip vertical ou horizontal respectivement. Certaines librairies ne fournissent pas de fonction pour les flips verticaux, ce qui n’est pas problématique. En effet, un flip vertical peut être obtenu grâce à une rotation d'une image de 180 degrés et à un flip horizontal. Voici un exemple de flip d'images :





  • Translation (Shift)



La translation consiste à déplacer l’image sur l’axe des X et/ou Y. Le shift horizontal translate l'image vers la gauche ou la droite tandis que le shift vertical translate l'image vers le haut ou le bas.



Dans l'exemple suivant, nous supposons que l'image a un arrière-plan noir au-delà de sa limite et qu'elle est translaté de manière appropriée (vous pouvez voir les parties noires apparues sur les nouvelles images). Cette méthode d'augmentation est très utile car la plupart des objets peuvent être localisés presque n'importe où dans l'image. Cela force votre réseau de neurones à regarder partout.





  • Rotation :



Une chose importante à noter à propos de cette opération est que les dimensions de l'image ne peuvent pas être conservées après la rotation. Si votre image est un carré, la rotation de 90° préservera la taille de l'image. Si c'est un rectangle, le faire pivoter de 180 degrés en préserverait la taille. La rotation de l'image selon des angles plus fins modifie également la taille finale de l'image.





  • Scale :



L'image peut être mise à l'échelle vers l'extérieur (outward) ou vers l'intérieur (inward). Lors de la mise à l'échelle vers l'extérieur, la taille finale de l'image sera plus grande que la taille d'origine. La plupart des cadres d'image découpent une section de la nouvelle image, avec une taille égale à l'image d'origine. Le scaling inward réduit la taille de l’image, nous obligeant à faire des hypothèses sur ce qui se trouve au-delà de la frontière. Vous trouverez ci-dessous un exemple d'image scaled :





  • Crop



Contrairement à la mise à l'échelle, nous échantillonnons aléatoirement une section de l'image d'origine. Nous redimensionnons ensuite cette section à la taille de l'image d'origine. Voici un exemple :





  • Le bruit Gaussien :



L’over-fitting se produit généralement lorsque le réseau de neurones tente d'apprendre des caractéristiques de haute fréquence (des patterns qui se produisent beaucoup) qui peuvent ne pas être utiles. Le bruit gaussien, qui a une moyenne nulle, a essentiellement des points de données dans toutes les fréquences, ce qui déforme efficacement les caractéristiques de haute fréquence. Cela signifie également que les composants de fréquence inférieure (généralement, vos données prévues) sont également déformés, mais votre réseau de neurones peut apprendre à regarder au-delà de cela. L'ajout de la bonne quantité du bruit Gaussien peut améliorer la capacité d'apprentissage. Une version atténuée de ceci est le bruit du sel et du poivre, qui se présente comme des pixels noirs et blancs répartis à travers l'image. Cela est similaire à l'effet produit par l'ajout de bruit gaussien à une image, mais peut avoir un niveau de distorsion de l'information inférieur.





  • Luminosité :



La luminosité de l'image peut être augmentée soit par l'assombrissement, soit par l'éclaircissement des images, soit par les deux. L'objectif est de permettre à un modèle de généraliser à travers des images formées sur différents niveaux d'éclairage. Voici un exemple de chien avec un changement de luminosité entre les 2 images :





Conclusion



Dans cet article, on a présenté les avantages de l’augmentation des images et expliquer les bonnes pratiques pour ne pas introduire de données aberrantes dans notre modèle. Il faut savoir augmenter les images et ne pas tomber dans le piège d’augmenter sans comprendre forcément le contexte le but du modèle de l’apprentissage automatique. On a fini par détailler les techniques populaires d’augmentations d’images. Plusieurs autres techniques de transformations d’images sont disponibles suivant les packages.



J’espère que cet article était une bonne introduction pour le sujet d’augmentation d’images. Un deuxième article sera disponible pour parler de imgaug, un package Python puissant d’augmentation d’images. On détaillera plus les méthodes d’augmentation d’images d’une façon pratique en explorant ce package.