Dans les entreprises de produits de consommation, il est important de développer des modèles de prévision de la stabilité afin d'anticiper la durée de conservation des produits ou le risque de défaillance à long terme dès les premières étapes de leur développement. La photographie en accéléré (TLP) s'est imposée comme un outil essentiel pour mesurer la stabilité physique des produits liquides de consommation.
Un modèle d'IA/apprentissage profond avait été précédemment développé en Python pour prédire les modes de défaillance liés à la stabilité physique à partir d'images TLP. Grâce au nouveau module complémentaire Torch Deep Learning pour JMP Pro, nous pouvons développer rapidement un modèle d'IA/apprentissage profond capable de détecter les défaillances liées à la stabilité physique à partir d'images, sans aucune programmation. Dans cette présentation, nous illustrons l'application de ce module complémentaire à un problème de classification d'images pour la détection des défaillances liées à la stabilité physique de produits de consommation formulés.
Je m'appelle Fangyi Luo. Je suis statisticienne et data scientist chez Procter & Gamble. Aujourd'hui, je présenterai un poster avec Russ Wolfinger de JMP. Je travaille chez P&G depuis environ 28 ans et, actuellement, je me consacre à l'accélération de l'innovation en matière de produits et d'emballages grâce aux statistiques et à l'analyse de données. Russ, pourriez-vous vous présenter brièvement ?
Oui. Merci Fangyi. Je suis ravi de collaborer avec toi sur ce projet. Comme tu le sais, l'apprentissage automatique et l'IA sont des sujets d'actualité, et nous apprécions les applications concrètes comme celle-ci, qui, je pense, font vraiment la différence aujourd'hui, notamment grâce à la possibilité d'utiliser le nouveau module complémentaire Torch pour la classification d'images. Je le trouve très puissant et pratique. Ce sera une belle histoire à raconter aujourd'hui, celle de tes progrès. Personnellement, je suis impatient de voir le résultat. Ce projet est en développement depuis plusieurs années et commence enfin à prendre de l'ampleur.
Merci, Russ. Aujourd'hui, nous allons aborder le problème de la classification d'images à l'aide du nouveau module complémentaire d'apprentissage profond JMP Torch. Je vais commencer par vous présenter le contexte du problème. Chez Procter & Gamble, nous fabriquons de nombreux produits de consommation, dont certains sont des produits liquides, comme le shampoing, l'après-shampoing, la lessive liquide, le liquide vaisselle, etc.
Avant de commercialiser un produit, nous effectuons de nombreux tests sur le prototype. Nous utilisons une technique photographique en accéléré pour suivre l'évolution du prototype placé à différentes températures au fil du temps. À droite, vous pouvez observer certains modes de défaillance de la stabilité de certains prototypes liquides, comme la séparation de phases et l'apparition d'une texture crémeuse. Une fine couche se forme en surface. Il s'agit de fluctuations, de fissures et de cristallisations.
Nous avons testé des milliers de prototypes de produits formulés. Nous utilisons une caméra numérique pour suivre l'évolution de tous ces prototypes au fil du temps. Nous avons capturé des millions d'images. Une classification manuelle de ces images selon les différents modes de défaillance était impossible. Il y a quelques années, nous avons constitué une équipe chez PNG et développé un algorithme d'apprentissage profond pour classer ces images en modes de défaillance stables et présentant différents modes de défaillance liés à la stabilité physique, grâce à un modèle d'apprentissage profond développé en Python.
Avec la nouvelle disponibilité de JMP Pro Torch Deep Learning, je pense que nous allons essayer de l'appliquer, en l'ajoutant à notre problème de classification d'images.
Nous avons appliqué la classification d'images à notre problème en utilisant la classification binaire (images stables et instables) et la classification multiclasse (images stables versus différents modes de défaillance physique). Nous avons testé le meilleur module complémentaire d'apprentissage profond sur ces deux types de problèmes de classification. Notre ensemble d'entraînement comprenait environ 3 500 images et notre ensemble de test plus de 500. Voici quelques résultats.
Lorsque nous avons testé l'extension Torch Deep Learning pour la classification binaire, j'ai initialement utilisé les paramètres par défaut et choisi le modèle d'image ResNet-34. J'ai rapidement obtenu un excellent modèle avec une précision de validation de 95 %, et ce, très facilement et rapidement. Au centre, vous pouvez voir un exemple de graphique d'historique d'entraînement. Nous observons que la perte diminue avec l'augmentation du nombre d'époques, c'est-à-dire d'itérations d'entraînement. Notre objectif est de développer un modèle atteignant une précision de validation de 95 %. Ce modèle initial était très performant, mais nous souhaitons vérifier s'il est possible d'améliorer encore sa précision de validation.
J'ai donc essayé de modifier manuellement certains hyperparamètres. J'ai testé un modèle d'image plus complexe, comme ResNet-50, et j'ai également tenté de réduire le taux d'apprentissage tout en augmentant le nombre d'époques. Après quelques essais, j'ai rapidement obtenu un modèle de classification binaire avec une précision de validation de 99 %. J'étais ravi de ces résultats. Ensuite, pour la classification multiclasse avec l'extension JMP Torch Deep Learning, cela a pris un peu plus de temps, et je n'ai pas réussi à obtenir un bon modèle du premier coup.
J'ai appris de Peter Hirsch (JMP) que vous proposez un module complémentaire Torch Companion permettant d'optimiser les hyperparamètres du module Torch Deep Learning. Je l'ai téléchargé, comme vous pouvez le constater sur marketplace.jmp.com. Vous pouvez télécharger à la fois le module Torch Deep Learning et le module Torch Companion. Après l'avoir testé, j'ai pu élaborer un plan d'expériences pour les hyperparamètres.
J'ai utilisé 20 combinaisons d'hyperparamètres. Le générateur a généré 20 combinaisons différentes, avec un nombre d'époques, un taux d'apprentissage, une taille de lot, un nombre de couches, une taille de couche et une taille d'image variables. J'ai testé l'extension Torch Companion, et le meilleur modèle obtenu pour cette classification multiclasse atteignait une précision de validation d'environ 78 %. Notre objectif étant d'obtenir un modèle avec une précision de validation d'environ 95 %, ce modèle est insuffisant. J'ai ensuite tenté d'optimiser manuellement le modèle en utilisant différents hyperparamètres et différents modèles d'image, notamment ResNet-50. J'ai également essayé d'augmenter le nombre d'époques, de diminuer le taux d'apprentissage, de modifier la taille des lots et la taille des images.
Pour la classification multiclasse, l'exécution est beaucoup plus longue. Voici une capture d'écran du modèle qui tourne encore après une journée. Il m'arrive d'avoir un message d'erreur indiquant que ma carte graphique NVIDIA manque de mémoire, mais j'ai persévéré et, après plusieurs essais, j'ai réussi à obtenir un excellent modèle d'apprentissage profond pour classer les images en plusieurs catégories, comme « stable » et « différents modes de décoloration ». La précision de validation était de 95 %. J'étais très satisfait des résultats. Russ m'a également suggéré de réduire la consommation de mémoire en diminuant la taille des lots ou le nombre d'époques. Voilà quelques enseignements tirés de cette expérience.
Je reviens en arrière. Comme vous pouvez le constater, il est très facile et rapide de développer un modèle de classification binaire grâce à l'extension Torch Deep Learning, et nous pouvons utiliser l'extension Torch Companion pour optimiser les hyperparamètres. De plus, nous pouvons développer un bon modèle pour les problèmes de classification multiclasse en ajustant manuellement les hyperparamètres. Russ, as-tu quelque chose à ajouter ?
Oui, c'est une belle évolution, Fangyi, et je sais que plusieurs de nos clients suivent cette voie. Ce n'est pas l'analyse rapide habituelle de JMP, car le volume de données est considérable et les calculs sont très poussés. C'est formidable que tu puisses utiliser ton GPU NVIDIA. Fangyi, te souviens-tu de la capacité mémoire de cette carte graphique ?
Je pense que c'est plus de 200, 256 gigaoctets.
Généralement, les GPU ont environ 12 ou 16 gigaoctets de mémoire dédiée. Je parle bien de la mémoire du GPU, pas de celle du CPU. Il faudra vérifier, mais je sais que NVIDIA propose une multitude de cartes différentes. C'est difficile de s'y retrouver. On reçoit beaucoup de questions ces derniers temps sur le choix d'une carte graphique, et l'avantage, c'est que NVIDIA, grâce à son succès, propose sans cesse des cartes toujours plus performantes à des prix plus abordables. J'ai entendu dire qu'une nouvelle version est en préparation. Elle sera encore plus puissante pour un prix inférieur, ce qui devrait permettre de réduire les temps d'exécution. Tout dépend de la taille des images, notamment si vous travaillez avec des fichiers volumineux.
Je crois que vous êtes finalement passé de 2 à 4, ce qui est une taille standard. C'est une taille tout à fait correcte, et vous commencez à vraiment exploiter les cartes, même si cela peut vite coûter cher. Bref, c'est pour ça qu'on les utilise. C'est vraiment génial de pouvoir tirer parti de cette puissance de calcul haut de gamme, avec un peu de patience et de réglages. Merci à Peter Hirsch et Scott Allen pour ce module complémentaire, que je connais bien. C'est un très beau module complémentaire pour Torch, qui permet d'obtenir des modèles de meilleure qualité plus rapidement et d'automatiser certaines tâches.
Le problème, c'est que pour ces longs temps d'exécution, il est parfois judicieux de les laisser tourner toute la nuit, puis de revenir le lendemain pour voir le résultat. À mon avis, vous avez fait les bons choix en utilisant l'automatisation, mais aussi en effectuant quelques réglages manuels et en faisant des essais. C'est souvent la meilleure façon d'obtenir le modèle optimal, et cela vous permet de mieux comprendre le problème et de voir quels facteurs contribuent réellement aux améliorations. J'ai constaté que, souvent, c'est impossible à dire. Parfois, un modèle d'image semble simplement capturer l'essence des images et donne souvent de bien meilleurs résultats que les autres.
Parfois, les résultats sont tous à peu près identiques, et dans ce cas, cela dépend davantage de la taille de l'image ou du protocole d'entraînement. Il faut en fait réaliser des expériences pour tester différentes approches, et c'est ainsi que nous avons procédé. Il est important, et je suis content que vous ayez montré la courbe de perte d'entraînement, de la surveiller attentivement pour s'assurer qu'elle diminue puis se stabilise. Celle-ci est plutôt prometteuse. Attention cependant : il ne faut pas l'utiliser dans deux cas précis, notamment si la courbe est continue et qu'elle diminue puis remonte.
Cela indiquerait un surapprentissage, ce qui peut arriver. Si la valeur continue de diminuer régulièrement, il est généralement conseillé d'effectuer davantage d'époques jusqu'à obtenir une meilleure convergence. Ce ne sont que des petits détails, des astuces qu'on apprend avec l'expérience. Personnellement, je trouve ça vraiment génial car cette interface sans code permet de se lancer rapidement dans la modélisation sans se perdre dans l'écriture de code Python et sans avoir à le modifier à chaque fois qu'on veut tester quelque chose de différent. Franchement, Fangyi, c'est une application vraiment géniale. Bravo ! Je suis ravi de la voir.
Merci, Russ. Pour conclure, voici quelques références : un lien vers la documentation du module complémentaire JMP Torch Deep Learning et un lien vers le module complémentaire Torch Companion. J’ai également présenté un problème similaire lors du développement d’un modèle en Python à la conférence statistique ASA, IMS, Spring Research Conference, il y a quelques années.
Je tiens également à remercier mon équipe P&G pour notre collaboration passée sur ce problème. Comme l'a mentionné Russ, nous remercions également Peter Hirsch pour le partage de son module complémentaire Storage Companion. Voilà, c'est tout. Si vous avez des questions, vous savez qui contacter : Russ ou moi-même. J'ai beaucoup apprécié découvrir ce module complémentaire JMP Torch Deep Learning grâce à Russ, et je pense que nous pourrons l'utiliser dans de nombreuses autres applications chez P&G. Merci.
Excellent travail, Fangyi. Merci.