J'ai formé un réseau convolutionnel pour classer les images d'un composant mécanique comme bonnes ou défectueuses. Bien que la précision du test soit élevée, j'ai réalisé que le modèle fonctionnait mal sur des images qui avaient un éclairage légèrement différent.
Les fonctionnalités que j'essaie de détecter sont subtiles, et l'éclairage semble déclencher le modèle en appelant beaucoup de faux négatifs. La plupart, sinon la totalité, des données de formation et de test provenaient d'images qui ont été prises sous un éclairage diffus. Les nouvelles images sur lesquelles j'ai essayé le modèle ont été prises avec des lumières focalisées.
En espérant que l'égalisation de l'histogramme ( CLAHE ) aiderait, j'ai fait l'égalisation sur les images avant de l'alimenter sur le modèle, je l'ai fait pour la formation ainsi que pour les données de test. Le problème était alors que la précision était élevée, mais le modèle semblait avoir appris une autre corrélation entre les images et les étiquettes. Après l'égalisation, tout dans l'image se détache, les défauts deviennent encore plus subtils et difficiles à détecter même pour l'œil humain.
La prédiction du modèle a changé même lorsque le même composant a été tourné avec le même éclairage mais avec la lumière dans des orientations différentes. Donc, ma question est, que puis-je faire, soit à la fin des données ou avec le modèle, afin qu'il devienne robuste aux changements d'éclairage (ou au même type d'éclairage mais aux changements d'orientation de l'éclairage)?
Réponses:
Cela s'appelle le sur-ajustement, votre modèle a appris à prédire les étiquettes en fonction de fonctionnalités qui ne sont pas réellement responsables de prédictions particulières, donc lorsqu'elles ne sont pas présentées, il ne parvient pas à prédire correctement. Bien qu'il existe différentes façons de gérer le sur-ajustement (par exemple, le décrochage), vous semblez avoir besoin d'une augmentation de l'image. C'est un moyen simple mais très puissant de former un réseau neuronal robuste. Pour votre cas - simulez simplement différentes conditions d'éclairage en augmentant / diminuant par exemple les valeurs de pixels au hasard pour vos entrées pour les mêmes étiquettes. Il est également courant d'ajouter du bruit aléatoire, des rotations aléatoires, un retournement, etc.
Pour plus d'informations, consultez cette réponse stackoverflow.
De plus, j'ai récemment publié un projet où j'ai utilisé diverses fonctions d'augmentation que vous pourriez trouver utiles. Voir: https://github.com/Naurislv/P12.1-Semantic-Segmentation/blob/master/augmentation.py
la source