INTELLIGENCE ARTIFICIELLE

Comment les manipulations d'images détériorent le Deep Learning

5 min

Comment supprimer les approximations liées à des manipulation d’images dans des modélisations 2D d’objets qui n’en sont pas en Deep Learning ?

Le Deep Learning pour analyser des images

Grâce aux réseaux de neurones convolutifs (CNN) et au Deep Learning, le domaine de la vision par ordinateur a connu de grandes avancées ces dernières années en matière de traitement et de classification des images. Ces progrès peuvent être exploités à de nombreuses fins, allant du suivi médical à la reconnaissance vocale (comme le montre Microsoft dans cet  article).

Ces approches sont complémentaires d’autres techniques, parmi lesquelles d’autres méthodes de Machine Learning. Là où ces dernières analysent en profondeur les features spécifiques des objets, les solutions de CNN étudient la forme générale d’objets semblables à des images pour faire une prédiction. Le Deep Learning ne s’appuie pas sur les features, mais les calcule implicitement. Comme les méthodes de Deep Learning donnent des prédictions uniquement à partir de la structure générale des images, elles présentent une capacité de généralisation qui leur permet d’obtenir de bons résultats sur des images qu’elles n’ont jamais vues. De ce fait, le Deep Learning offre une perspective différente, dont les autres techniques manquent, et qui le rend pertinent pour compléter les prédictions des autres techniques.

Dans de nombreuses tâches, les objets sources peuvent être modélisés comme images, même s’ils semblent de prime abord très différents (des sons ou des fichiers exécutables, par exemple). Les méthodes CNN fondées sur les images sont initialement incompatibles avec ces objets sources. Néanmoins, lorsque ces objets sources sont représentés sous forme d’images, le CNN et ses techniques peuvent effectuer des tâches de prédiction sur la représentation des objets sous forme d’images.

Comment les manipulations d’images détériorent les performances des modèles de Deep Learning

Description du problème

Une fois que l’objet source est transformé en image, il peut être traité exactement comme tel : visualisé, remodelé, redimensionné, enregistré ou chargé.

De nombreux outils sont disponibles pour effectuer ces opérations. Les plus populaires en Python sont OpenCV et Pillow. Ces librairies nous permettent de manipuler facilement des images et de les préparer à être données en entrée à un CNN en exécutant les actions mentionnées ci-dessus.

Cependant, ces traitements apparemment inoffensifs peuvent causer une sérieuse détérioration des performances. Le simple fait d’enregistrer et de recharger le même fichier peut modifier la prédiction d’un CNN !

Après avoir redimensionné l’image originale avec OpenCV et Pillow, les deux images semblent parfaitement identiques, mais le sont-elles vraiment ?

Analyser le problème de base

OpenCV et Pillow ont pour but de manipuler les données sur la base d’une perception humaine. La manipulation d’images avec ces solutions peut rapidement mener à de multiples approximations différentes au niveau des pixels. Ces différences entre les deux images peuvent sembler invisibles pour l’œil humain, mais elles constituent des informations radicalement différentes pour un CNN.

La différence absolue entre le redimensionnement OpenCV et Pillow effectué précédemment est affichée ici. S’il n’y avait pas de différence, le résultat aurait été une image noire.

Il faut aussi noter que les redimensionnements avec OpenCV et avec Pillow ont été effectués avec la même méthode de redimensionnement basique, l’interpolation bilinéaire. Les fichiers exécutables présentent des tailles variées, allant de quelques kilooctets à des centaines de mégaoctets.

Aussi, il faut redimensionner la représentation de l’image des fichiers exécutables pour fournir une entrée de taille uniforme au CNN.

Dans les applications de vision par ordinateur avec de vraies images, les images approximées conservent les caractéristiques importantes des images originales.

Toutefois, lorsque les CNN sont appliqués à des images qui ne sont qu’une représentation de différents objets sources, les principales caractéristiques des objets originaux sont compromises par ces approximations. De légères différences dans quelques pixels seulement se traduisent par une prédiction différente en sortie par le CNN.

Ci-dessous, un exemple de différence en sortie :

Le modèle est entraîné en utilisant le redimensionnement d’OpenCV. Après redimensionnement, le même son est prédit très différemment si le redimensionnement est toujours effectué avec OpenCV, ou s’il est effectué avec Pillow.

En matière de reconnaissance d’images, ce problème ne se pose pas vraiment. Même si les deux images ci-dessus présentent de légères différences, elles représentent toutes deux une chouette. Cependant, ces légères différences peuvent compromettre l’essence même des objets sources.

‍Deep Learning : améliorer les performances du modèle

Le formatage correct de l’image et le suivi des modifications exactes apportées par les différents outils utilisés à chaque étape de la manipulation de l’image sont essentiels à l’amélioration de la détection de malwares avec le Deep Learning. Plusieurs applications de vision par ordinateur peuvent profiter de cette pratique, en améliorant la connaissance de l’état des données et en garantissant la reproductibilité des prédictions.

Pour des raisons pratiques, et en règle générale, un seul outil de manipulation d’images devrait être retenu par projet. Dernier conseil : OpenCV et Pillow doivent toujours être utilisés avec des tableaux de uint8, sinon le résultat subira des approximations et des transformations inconnues susceptibles de nuire à la reproductibilité des prédictions du modèle.