Bonjour et bienvenue. Je m'appelle Marilyn et je suis ingénieure système chez JMP. Je suis ici pour vous parler aujourd'hui de l'accélération de l'identification des minéraux grâce à JMP Pro, une solution d'intelligence artificielle pour l'industrie minière. Avant de commencer, permettez-moi de vous donner quelques informations sur le contexte et les motivations de cette présentation.
Dans le secteur minier, l'identification et la classification des minéraux présentent de nombreux défis. L'identification sur le terrain peut s'avérer complexe, nécessiter des connaissances spécialisées et être sujette à erreurs. Les méthodes traditionnelles reposent largement sur l'extraction manuelle de caractéristiques des minéraux à identifier, par exemple par examen microscopique. Or, ce processus est fastidieux, chronophage et source d'erreurs.
De plus, à mesure que l'exploitation minière s'étend à des zones plus reculées ou à des gisements à plus faible teneur, le besoin d'une classification minérale en temps réel sur site se fait de plus en plus sentir. La solution que je propose pour relever ces défis, et que je présente dans cette affiche, consiste à utiliser le module complémentaire Torch pour JMP Pro afin de créer un modèle capable d'identifier et de classifier les minéraux en temps réel.
Dans l'exemple d'aujourd'hui, je tiens à préciser que JMP Pro est nécessaire pour exécuter l'extension Torch, qui utilise les images comme variables explicatives (ou entrées) afin de créer un modèle de classification permettant de prédire la présence de minéraux. J'ai utilisé un jeu de données de 953 images représentant sept minéraux différents pour entraîner un modèle de classification. Ce jeu de données est une version d'un jeu de données Kaggle.
Dans la pratique, les ingénieurs miniers commenceraient probablement par concasser le minerai à la granulométrie requise pour leur exploitation, puis prendraient des photos du minerai concassé. Parallèlement, ils réfléchiraient au positionnement de la caméra et à l'éclairage afin que les images prises pour entraîner leur modèle soient aussi proches que possible des images réelles qu'ils prendront ultérieurement pour la classification.
Aujourd'hui, je vais vous guider pas à pas. Vous verrez comme il est facile de partir d'images de minéraux déjà identifiés et de créer rapidement un modèle prédictif permettant de classifier ces minéraux en temps réel lors d'une opération minière. La première étape consiste à installer l'extension Torch, disponible pour JMP Pro sur le JMP Marketplace. Je vais vous montrer à quoi elle ressemble.
La plateforme JMP propose de nombreuses extensions téléchargeables pour enrichir les fonctionnalités de JMP. Ce module complémentaire, Torch Deep Learning pour JMP Pro, est disponible ici. Pour le télécharger, il suffit de cliquer sur le bouton de téléchargement. Une fois le téléchargement terminé, faites glisser le fichier téléchargé sur une fenêtre JMP ouverte pour installer le module.
Vous trouverez sur cette page des informations concernant la configuration système requise et les versions de JMP compatibles, ainsi que de l'aide et la documentation pour l'utilisation de l'extension. Une fois l'extension installée, un nouveau menu intitulé « Extensions dans JMP » apparaîtra en haut. Vous pouvez y voir mon extension Torch pour l'apprentissage profond. Une image extraite de mon journal JMP illustre les options disponibles dans cette extension.
Il est possible de créer des colonnes de validation croisée à K plis. Nous allons l'explorer aujourd'hui. Nous allons ensuite entraîner notre modèle Torch. Ce module complémentaire inclut également plusieurs jeux de données d'exemple. Des utilitaires d'image permettent de manipuler et de modifier les images. Nous examinerons également certaines de ces options. Ce module complémentaire est fourni avec certains modèles, et des modèles supplémentaires peuvent être téléchargés. L'aide et la documentation sont également accessibles via ce menu.
Voilà pour la première étape. J'ai installé l'extension. L'étape suivante consiste à importer les images dans JMP et à nettoyer les données. Nous allons commencer par importer les images de minéraux nécessaires à l'entraînement du modèle. Pour ce faire, nous utiliserons la fonction d'importation multiple de JMP. Avant cela, je souhaite vous montrer comment ces images de minéraux sont organisées dans ce dossier. Pour cela, je vais simplement y importer ce fichier. Vous pouvez constater que ce dossier s'intitule « images de minéraux » et qu'il contient de nombreux sous-dossiers. Chaque sous-dossier porte un nom correspondant aux images de minéraux qu'il renferme.
Par exemple, si j'ouvre le dossier des biotypes, vous verrez qu'il contient de nombreuses images de ce minéral en particulier. C'est ainsi que ce jeu de données est organisé, ou plutôt, que ces images sont organisées sur mon ordinateur.
Nous allons maintenant utiliser la fonction « Importer plusieurs fichiers » de JMP pour importer ces images et entraîner notre modèle. Je vais vous montrer les étapes dans le journal, puis vous expliquer la marche à suivre pour chaque étape. Pour commencer, nous allons utiliser « Importer plusieurs fichiers ». Le chemin d'accès au dossier contenant mes images est déjà défini. Je souhaite maintenant inclure les sous-dossiers. Je vois ici que ce dossier contient lui-même d'autres dossiers. Nous allons donc inclure ces sous-dossiers.
Je vois maintenant ici que j'ai mes images. On constate la présence de nombreux fichiers JPEG et de différents formats. J'ai également quelques fichiers PNG. C'est tout à fait normal. Par ailleurs, dans le tableau de données résultant, je souhaite que JMP ajoute une colonne contenant le nom du fichier. Ce nom fera référence au dossier contenant le nom du minéral. J'obtiendrai ainsi une colonne avec le nom du minéral et une autre colonne avec l'image correspondante. Je souhaite que JMP empile tous ces fichiers, toutes ces images, dans un seul tableau de données.
Cliquez maintenant sur Importer. JMP va accéder à ce dossier et importer toutes les images, ainsi qu'une nouvelle colonne contenant le nom du minéral. Voilà. Voici le tableau de données obtenu. Importer mes 953 images de ces minéraux a été un jeu d'enfant. Voyons maintenant ceci. Je n'ai pas besoin de ces deux colonnes à droite ; je vais donc les supprimer pour mieux voir le résultat.
Chaque ligne présente l'image d'un minéral. La deuxième colonne indique le nom du minéral, suivi du titre de l'image et de son fichier JPEG. Il me faudra ensuite nettoyer un peu les données. Ce sera notre prochaine étape.
Nous avons maintenant importé plusieurs fichiers. L'étape suivante consiste à nettoyer les données. La première étape est de nettoyer la colonne des étiquettes. Nous allons utiliser la fonction de recodage et les options avancées pour extraire le segment contenant le nom du minéral. Pour ce faire, dans mon tableau de données, je fais un clic droit et je sélectionne « Recoder ».
Je souhaite enregistrer ces résultats dans la même colonne ou une colonne existante, et j'utiliserai le menu contextuel (triangle rouge) pour accéder aux options avancées. Je voudrais extraire une partie d'un segment de texte. Je peux utiliser cette commande. Voici ce que je souhaite faire : voici le contenu de mon tableau de données, et voici le résultat.
Cela me semble correct. Le résultat indique que je n'aurai que le nom du minéral, et je peux supprimer le nom de chaque fichier individuel. Je valide et je réencode. Voilà. Nous avons les noms de nos minéraux. Si nous développons les graphiques d'en-tête, nous pouvons voir qu'il s'agit des mêmes noms de minéraux que ceux que nous avons vus dans le dossier que je vous ai montré précédemment.
Très bien, voilà pour notre deuxième étape. Passons à la suivante, car il nous reste encore un peu de nettoyage de données à effectuer. Nous allons examiner les utilitaires d'image de ce module complémentaire. Dans cet ensemble de données précis, les images des minéraux présentent des éléments parasites au niveau des doigts et des mains, ce qui pourrait poser problème pour l'ajustement du modèle.
Je vais modifier ces images. Nous allons les recadrer pour ne conserver que la moitié centrale et supprimer tout ce qui se trouve sur les bords. Pour cela, vous pouvez utiliser le menu « Utilitaires d'image ». Il fait partie du module complémentaire Torch. J'accède ici à mon environnement d'apprentissage profond Torch. Voici mes utilitaires d'image.
D'accord, nous pouvons donc récupérer les dimensions des images et les stocker dans une colonne séparée. Nous pouvons redimensionner les images si besoin, les agrandir ou les réduire. Je vais les recadrer, comme je l'ai dit. L'image ci-dessous vous donne un aperçu du résultat. Revenons à ce tableau de données et corrigeons ces images à l'aide de notre extension Torch Deep Learning, Utilitaires d'images. Je vais les recadrer.
Ce tableau de données ne contient qu'une seule colonne d'images. Je peux modifier les paramètres ici, mais c'est exactement ce que je souhaite. Ces paramètres suivent cet exemple. Avec ces paramètres, JMP nous indique déjà que nous allons extraire les 50 % d'images centrales, ce qui est parfait. Je vais lancer le traitement. JMP va manipuler ces images.
Ensuite, à titre de comparaison, je vais vous montrer un aperçu avant/après pour chacun de ces éléments. Il y a un petit problème d'affichage, je vais donc enregistrer ce fichier dans mon dossier Téléchargements. Je vais le rouvrir, et vous comprendrez pourquoi dans un instant.
Voilà. Je peux l'ouvrir pour accéder à mes éléments récents. Voilà. Voici ce que je veux que vous regardiez. Regardez la ligne numéro 4. Sur cette ligne, juste ici, vous pouvez voir, par exemple, des doigts sur cette image. À droite, après avoir nettoyé et recadré l'image, vous pouvez constater qu'elle est agrandie. Nous avons supprimé les éléments superflus que nous ne souhaitions pas inclure dans les images utilisées pour construire notre modèle.
Nous allons utiliser l'image recadrée de cette nouvelle colonne comme axe X et l'axe Y de notre modèle sera le minéral, plus précisément le minéral correct. Passons à l'étape suivante. Nous avons modifié les images, importé et nettoyé les données ; la prochaine étape consiste à créer des colonnes de validation croisée à K plis.
Pour ce faire, nous allons également utiliser l'extension Torch. Voici à quoi elle ressemble. Dans mon tableau de données, sous Extensions, puis Torch Deep Learning, nous allons créer des colonnes de validation croisée à K plis. Dans ce cas précis, nous allons examiner la colonne de réponse, Y, qui correspond au minéral correct, et nous l'utiliserons également pour la stratification. Nous allons donc créer trois colonnes permettant de regrouper ces données.
Chacune de ces trois colonnes comportera cinq groupes. Nous utiliserons ces colonnes de validation croisée à K plis pour la construction de notre modèle. L'idée est d'utiliser une partie des données pour construire le modèle et une autre partie pour tester les prédictions, puis de mettre à jour et d'améliorer le modèle. Il s'agit donc d'utiliser les données progressivement. Ce menu nous permet de créer les colonnes de stratification nécessaires à cette approche.
Je lance le calcul. JMP utilise des techniques avancées de planification d'expériences (DOE) pour créer ces colonnes de regroupement, permettant ainsi de valider et d'améliorer notre modèle. Voilà. On voit ici trois nouvelles colonnes : les plis A, B et C. Utiliser toutes ces colonnes et tous ces regroupements pour la validation va prendre un certain temps, peut-être deux heures sur mon ordinateur portable. Même si, pour l'ajustement final de notre modèle, nous utiliserions probablement toutes ces colonnes et laisserions JMP s'exécuter pendant toute la durée nécessaire.
Aujourd'hui, je ne vais pas vous faire attendre. Nous allons utiliser une validation croisée simple pour accélérer le processus de cette démonstration. Pour ce faire, j'utiliserai les utilitaires de colonnes et créerai des colonnes indicatrices. Pour notre validation d'aujourd'hui, nous utiliserons simplement la colonne « 1 ». Nous pourrions utiliser, par exemple, cette partie des données (763 lignes) pour ajuster un modèle, puis les 190 lignes restantes pour tester les prédictions et mettre à jour le modèle. Nous utiliserons une validation simple pour cet exemple.
C'est ainsi que nous pouvons créer des colonnes de validation croisée K-fold grâce à ce module complémentaire. L'étape suivante consiste à ajuster ce modèle et à l'itérer. Autrement dit, nous allons ajuster le modèle, puis l'affiner légèrement. Ces modèles Torch offrent de nombreuses options de contrôle. De petits paramètres peuvent être modifiés pour tenter d'améliorer la prédiction. Pour commencer, nous allons spécifier le modèle. Nous allons indiquer à JMP ce que nous souhaitons prédire.
Revenons au tableau de données et procédons ainsi. Modules complémentaires, Apprentissage profond Torch, Apprentissage profond Torch. Ici, je vais indiquer à JMP que la variable Y (ou réponse) à prédire est le minéral, et que je souhaite la prédire à partir de l'extrait à 50 % des images que nous avons. Nous allons simplement effectuer une validation basique pour cet exemple, puis valider.
Nous avons d'autres options à spécifier. Je vais les aborder brièvement, et nous disposons d'une documentation complète à leur sujet. Ici, nous pouvons contrôler l'entraînement du modèle. Par exemple, dans le menu déroulant « Modèle d'image », vous trouverez des modèles pré-entraînés sur des milliers d'images. Nous allons utiliser un modèle pré-entraîné, puis ajouter nos propres images pour le personnaliser selon nos besoins. Je vais choisir Google Net. J'ai obtenu de bons résultats avec ce jeu de données et ce modèle d'image. Si vous avez des doutes, vous pouvez bien sûr utiliser les paramètres par défaut de JMP.
Je vais également ajuster le nombre d'époques, c'est-à-dire le nombre de passages sur les données. Je vais simplement le réduire légèrement pour accélérer le processus. Bien sûr, nous pouvons aussi contrôler le taux d'apprentissage, c'est-à-dire la vitesse à laquelle le modèle s'adapte aux erreurs des modèles précédents. Nous avons ensuite ces options avancées supplémentaires à droite. Je vais me référer à mon journal pour les aborder brièvement.
Nous disposons de nombreux outils de contrôle avancés pour les modèles, que je répartis en trois catégories. Premièrement, les spécifications du modèle : quel modèle allons-nous ajuster ? Nous avons également des options pour l'entraînement : comment ajuster ce modèle ? Comment l'entraîner ? Enfin, nous proposons des options pour la modélisation d'images, permettant de les manipuler et de les traiter.
Je vais vous montrer à quoi cela ressemble, et nous allons ajuster ce modèle. Si je développe les options à droite, vous pouvez voir ici à gauche. Cela peut paraître un peu complexe, mais nous avons une infobulle très pratique. En survolant la zone avec votre souris, vous obtiendrez une brève explication de chaque option. Les couches d'un réseau neuronal profond correspondent au nombre de nœuds d'un réseau neuronal. Prenons huit pour cet exemple.
Passons maintenant au compartiment suivant, le compartiment d'entraînement. Je vais modifier la taille du lot. La taille du lot correspond au nombre de lignes de données traitées simultanément. Mon ordinateur n'étant pas très rapide, je ne traiterai que 64 lignes à la fois. Enfin, nous avons les options d'image à droite. La taille de l'image permet de la contrôler. Je vais choisir 228. Cela semble convenir pour cet ensemble de données.
C'est tout ce que je vais changer pour l'instant. Le principe de l'entraînement d'un modèle avec Torch Deep Learning est le suivant : vous importez le logiciel, vous entraînez un modèle, puis vous itérez. Vous pouvez apporter de petites modifications pour tenter d'améliorer ses capacités prédictives ou ses performances. Je valide tout de suite. JMP va analyser les données et nous verrons quel modèle nous obtenons.
Pendant l'exécution de JMP, cette petite fenêtre affichera des mises à jour indiquant les performances obtenues jusqu'à présent, à la fois sur les données d'entraînement (celles utilisées pour entraîner le modèle) et sur les données de validation. Nous allons nous concentrer sur les résultats de validation, car ils nous permettront de mieux évaluer la capacité du modèle à prédire les résultats avec de nouvelles images.
Ici, j'observe la précision sur les données d'entraînement et de validation, et les résultats sont plutôt bons. Nous dépassons les 90 % sur les données d'entraînement et la précision se situe entre 70 et 80 % sur les données de validation. Ce modèle a été entraîné très rapidement. En utilisant d'autres options, par exemple avec davantage d'époques, nous pourrions probablement obtenir un modèle encore meilleur, sans trop modifier celui que nous avons déjà.
Mais examinons ceci, car il s'agit de notre prochaine étape : la comparaison des modèles. Pour l'instant, nous n'avons construit qu'un seul modèle. Voyons à quoi il ressemble. À mesure que nous construirons d'autres modèles, JMP ajoutera des informations supplémentaires dans la section de comparaison, ce qui nous permettra de comparer différents modèles. Pour ce modèle initial, le modèle 1, la variable réponse était « minéral ». C'est l'information que nous avons saisie dans la fenêtre pour ajuster notre modèle.
Nous disposons d'informations sur le coefficient de détermination (R²), mais je ne vais pas les examiner car nous ne prédisons pas une valeur numérique. Nous classifions des images. Ce qui nous intéresse davantage, ce sont les mesures de précision, et en particulier la précision de validation. Les résultats sont déjà très encourageants : nous atteignons presque 90 % de précision avec ce modèle que nous avons entraîné très rapidement.
Ici, nous obtenons une représentation graphique de l'évolution du modèle pendant son entraînement. On observe deux courbes : l'une pour les données d'entraînement et l'autre pour les données de validation. De manière générale, on constate que la perte, ou erreur, du modèle diminue au fil des époques. Plus nous parcourons les données pour extraire d'informations des images, plus l'erreur diminue et plus nos prédictions s'améliorent.
Étant donné que ces courbes continuent de baisser, il serait probablement judicieux d'augmenter le nombre d'itérations et de laisser le modèle analyser les données plus en profondeur, ce qui pourrait contribuer à son amélioration. Voici quelques éléments à examiner pour évaluer la performance du modèle. Ces graphiques comparent les valeurs réelles aux valeurs prédites : à gauche, on observe le minéral réel et, en bas, la probabilité prédite. Concrètement, la partie droite de ces graphiques représente les valeurs bien prédites, tandis que la partie gauche correspond aux points moins bien prédits.
Ici, tout est interactif et dynamique. Si l'on retourne au tableau de données, par exemple, et que l'on définit la colonne des images comme étiquette, en survolant ces points, on peut voir quelle image représente du quartz. Comme cette image est située assez loin à gauche sur le graphique, elle a probablement été mal classée. Il s'agissait bien de quartz. On pourrait aussi simplement mettre en évidence toutes les images mal classées. Il semble qu'il y en ait une quarantaine ici.
Nous pourrions retourner voir ces images et vérifier s'il y a des problèmes potentiels, ou peut-être devons-nous rassembler davantage d'images de ces minéraux en particulier afin d'améliorer ces prédictions.
Ci-dessous, un peu plus d'informations : nous allons examiner les matrices de confusion pour les données de validation. Ce que nous souhaitons observer sur ces deux diagonales, qu'il s'agisse des effectifs ou des taux, c'est une diagonale avec des valeurs élevées et, idéalement, des zéros au-dessus ou en dessous.
Pour la biotite, le minéral réel est indiqué à gauche et les minéraux prédits en face. La précision est d'environ 75 % pour la biotite et de 92 % pour la boronite. On peut ainsi évaluer la performance de chaque modèle. Ici, elle est de 77,8 % pour la muscovite. Il semblerait que ce soit le minéral que ce modèle peine le plus à prédire ou à classer.
Là encore, nous n'avons qu'un seul exemple pour la comparaison. Je souhaite vous montrer dans ce journal à quoi ressemblerait la comparaison de plusieurs modèles. À mesure que vous ajustez des modèles supplémentaires et que vous modifiez les options, JMP les intègre à la comparaison. Vous pouvez ainsi comparer la précision de validation de plusieurs modèles, visualiser leurs performances et les comparer.
Encore une fois, essayez d'améliorer le modèle et de trouver le meilleur possible avant de procéder au déploiement. Nous avons abordé la comparaison des modèles et l'évaluation des résultats. Approfondissons maintenant cette évaluation.
Vous pouvez voir de très beaux graphiques interactifs dans ce résultat. Je tiens à préciser que pour chaque modèle, des options supplémentaires permettent d'enregistrer des données dans le tableau. Ici, je peux par exemple enregistrer les vecteurs d'embeddings. Je clique ici et je retourne à mon tableau de données pour vous montrer.
Vous pouvez voir ici 8 colonnes pour les embeddings. Que sont les embeddings ? Si vous vous souvenez, dans les paramètres du modèle, j'ai défini huit comme nombre de nœuds pour mon réseau de neurones. C'est exactement de cela qu'il s'agit. Ces nœuds représentent les caractéristiques extraites des images minérales. Je pourrais, si je le souhaitais, utiliser ces embeddings comme variables explicatives (X) ou entrées pour des modèles prédictifs utilisant d'autres plateformes de modélisation au sein de JMP. Je pourrais simplement utiliser Torch pour extraire les informations et les utiliser pour prédire ou construire un modèle sur une autre plateforme, si besoin.
Une autre excellente option, du moins pour moi, car j'aime visualiser la précision des prédictions de mon modèle, consiste à enregistrer les prédictions dans le tableau de données. Je vais vous montrer à quoi cela ressemble. Voici le minéral le plus probable, ou prédit, que nous avons enregistré dans le tableau. Grâce à l'outil de création de graphiques, il est très facile de représenter le minéral réel sur l'axe des ordonnées. Je l'utiliserai également comme variable de couleur. Je vais placer le minéral prédit sur l'axe des abscisses.
Qu'est-ce que cela représente ? Les grands carrés correspondent aux minéraux correctement classés, tandis que tous les points en dehors de ces carrés ont été mal classés. Ceci est du quartz, classé comme boronite. Ceci est de la muscovite, classée à tort comme biotype. Cela permet de voir facilement quelles images ont été mal classées et combien d'entre elles l'ont été.
Une autre option mérite d'être mentionnée. À partir de ce triangle rouge, nous pouvons également générer le code Python permettant d'effectuer des prédictions en temps réel. Si ce modèle est final, que nous sommes satisfaits de ces prédictions et que nous souhaitons l'implémenter en temps réel, c'est ici que nous pouvons enregistrer le code Python. Je ne vais pas le faire ici, mais je souhaite revenir à mon journal et aborder les possibilités offertes par l'exportation de ce code Python.
Nous souhaiterions utiliser ce modèle pour effectuer des prédictions. Dans une mine, voici comment nous pourrions procéder : une fois le modèle entraîné et le code Python exporté, nous pourrions l'intégrer à un système sur site. Concrètement, il nous faudrait une caméra pour photographier les minéraux ou le minerai extraits de la mine. Un dispositif périphérique permettrait d'y ajouter notre code Python, afin que celui-ci puisse analyser les images des minéraux prises par la caméra et les classer rapidement. L'objectif est de réaliser des prédictions en temps réel.
Que pourrions-nous faire avec ces données ? Eh bien, nous pourrions les utiliser pour éclairer des décisions comme l’ajustement des paramètres de broyage. Nous pourrions trier automatiquement le minerai des stériles en fonction de ces prévisions. Ou encore, nous pourrions estimer en temps réel la quantité de chaque minéral que nous allons extraire du minerai. Ce serait extrêmement utile si les informations étaient disponibles en temps réel.
Pour conclure, voici quelques points importants. J'espère que cette démonstration vous a permis de constater que Torch Deep Learning et JMP Pro offrent une excellente solution sans code pour la classification des minéraux. Les modèles peuvent être entraînés rapidement à partir d'images étiquetées, et JMP dispose de tous les outils nécessaires pour importer les images, nettoyer et prétraiter les données avant la création du modèle. La classification en temps réel est possible avec un matériel relativement simple, et cette approche permet de prendre des décisions plus rapides et plus précises dans les opérations minières. Je vous remercie beaucoup de votre attention.