Hola y bienvenidos. Me llamo Marilyn y soy ingeniera de sistemas en JMP. Hoy les hablaré sobre cómo acelerar la identificación de minerales con JMP Pro, una herramienta que ofrece información valiosa basada en inteligencia artificial para la industria minera. Antes de empezar, permítanme explicarles brevemente el contexto y la motivación de esta presentación.
En el sector minero, la identificación y clasificación de minerales presenta numerosos desafíos. Su identificación en el yacimiento puede ser compleja, requiere conocimientos especializados y es propensa a errores. Los métodos tradicionales dependen en gran medida de la extracción manual de características de los minerales mediante examen microscópico, lo cual resulta laborioso, lento y propenso a fallos.
Además, a medida que las operaciones mineras se trasladan a zonas más remotas o a yacimientos de menor ley, aumenta la necesidad de una clasificación mineral in situ y en tiempo real. La solución que propongo en este póster consiste en utilizar el complemento Torch para JMP Pro para crear un modelo capaz de identificar y clasificar los minerales en tiempo real.
En el ejemplo de hoy, quiero informarles que JMP Pro es necesario para ejecutar el complemento Torch, que utiliza las imágenes como entradas para crear un modelo de clasificación que predice minerales. En este ejemplo, usé un conjunto de datos con 953 imágenes de siete minerales diferentes, y lo utilicé para entrenar un modelo de clasificación de minerales. Este conjunto de datos es una versión de uno de Kaggle.
En la práctica, los ingenieros de minas probablemente triturarían el mineral hasta obtener el tamaño adecuado para su operación y luego fotografiarían el mineral triturado. Al mismo tiempo, considerarían la ubicación de la cámara y la iluminación para que las imágenes utilizadas en el entrenamiento del modelo se asemejen lo más posible a las imágenes que capturarán en tiempo real para la clasificación futura.
Hoy les mostraré los pasos a seguir. Verán lo fácil que es comenzar con imágenes de minerales ya identificados y crear rápidamente un modelo predictivo que permita clasificarlos en tiempo real durante una operación minera. El primer paso es instalar el complemento Torch, disponible para JMP Pro en JMP Marketplace. Les mostraré cómo se ve.
El mercado de JMP ofrece numerosas extensiones descargables para ampliar las funcionalidades de JMP. Este complemento en particular, llamado Torch Deep Learning para JMP Pro, se encuentra aquí. Para descargarlo, basta con hacer clic en el botón de descarga. Una vez finalizada la descarga, podemos arrastrar el archivo descargado sobre una ventana de JMP abierta para instalar el complemento.
En esta página también encontrará información sobre los requisitos del sistema y las versiones compatibles de JMP, así como ayuda y documentación para usar el complemento. Una vez instalado, verá un nuevo menú en la parte superior llamado «Complementos en JMP». Aquí puede ver mi complemento de aprendizaje profundo de Torch. Incluyo una imagen en mi diario de JMP que muestra las opciones de este complemento.
Existe la opción de crear columnas de validación cruzada K-fold. Vamos a verla hoy. Ajustaremos nuestro modelo Torch. Este complemento también incluye varios conjuntos de datos de muestra. Hay algunas utilidades de imagen que facilitan la manipulación y modificación de las imágenes. También veremos algunas de esas opciones hoy. Al descargar este complemento, se incluyen ciertos modelos, y se pueden descargar modelos adicionales. La ayuda y la documentación también se encuentran en este menú.
Ese es el paso 1. Ya tengo instalado el complemento. El siguiente paso será importar las imágenes a JMP y limpiar los datos. Primero, importaremos imágenes de minerales para entrenar el modelo en JMP. Para ello, usaremos la función de importación de múltiples archivos de JMP. Antes de continuar, quiero mostrarles cómo están organizadas estas imágenes de minerales en esta carpeta. Para ello, simplemente les mostraré este archivo. Como pueden ver, esta carpeta se llama "Imágenes de minerales" y, dentro de ella, hay muchas subcarpetas. Cada una de estas subcarpetas tiene un nombre que corresponde a las imágenes de minerales que contiene.
Por ejemplo, si entro en la carpeta de biotipos, verás que tengo muchas imágenes de ese mineral en particular. Así es como está organizado este conjunto de datos, o como están organizadas estas imágenes en mi ordenador.
Ahora vamos a usar la función "Archivo > Importar varios archivos" de JMP para importar estas imágenes y así poder entrenar nuestro modelo. Vamos a hacerlo. Les mostraré los pasos en el diario y luego les explicaré qué hacer en cada uno. Para empezar, usaremos "Archivo > Importar varios archivos". Ya está configurada la ubicación de la carpeta con las imágenes. Lo que quiero hacer es incluir las subcarpetas. Como pueden ver, esta carpeta contiene más subcarpetas. Incluiremos las subcarpetas.
Ahora puedo ver aquí abajo que tengo mis imágenes. Hay muchos archivos JPEG y otros formatos. También tengo algunos PNG. Perfecto. Además, en la tabla de datos resultante, quiero que JMP añada una columna con el nombre del archivo. Este nombre hará referencia a la carpeta que contiene el nombre del mineral. Así, obtendré una columna con el nombre del mineral y otra con la imagen correspondiente. Quiero que JMP apile todos estos archivos, todas estas imágenes, en una sola tabla de datos.
Ahora, haz clic en Importar y JMP abrirá esa carpeta e importará todas las imágenes, junto con una nueva columna que contiene el nombre del mineral. ¡Listo! Aquí está la tabla de datos resultante. Fue muy fácil importar mis 953 imágenes de estos minerales. Ahora veamos esto. No necesito estas dos columnas de la derecha, así que las voy a eliminar para que podamos observar mejor lo que tenemos.
Cada fila contiene la imagen de uno de los minerales. En la segunda columna, tengo el nombre del mineral, seguido del título de cada imagen y su formato JPEG. Voy a tener que limpiar un poco los datos. Ese será nuestro próximo paso.
Ahora que hemos importado varios archivos, el siguiente paso será limpiar los datos. El primer paso será limpiar la columna de etiquetas. Usaremos la herramienta de recodificación y las opciones avanzadas para extraer el segmento. Solo necesito el segmento con el nombre del mineral. Para ello, en mi tabla de datos, hago clic derecho y selecciono "Recodificar".
Quiero guardar estos resultados en la misma columna o en una existente, y voy a usar el menú contextual (triángulo rojo) para acceder a las opciones avanzadas. Me gustaría extraer parte de un segmento de texto. Aquí puedo usar este control. Lo que quiero hacer, repito, esto es lo que tengo en la tabla de datos, y aquí puedo ver el resultado.
Esto me parece bastante bien. El resultado muestra que solo tendré el nombre del mineral, y puedo extraer el nombre de cada archivo individual. Le daré el visto bueno y lo recodificaré. ¡Listo! Ya tenemos los nombres de nuestros minerales. Si expandimos los gráficos de encabezado, podemos ver que son los mismos nombres de minerales que vimos en la carpeta que les mostré antes.
Bien, ese fue nuestro segundo paso. Veamos el siguiente, ya que aún nos queda un poco de limpieza de datos por hacer. Vamos a revisar las utilidades de imagen de este complemento. En este conjunto de datos en particular, las imágenes de los minerales que tengo presentan elementos adicionales en los dedos y las manos, lo que podría causar problemas al ajustar el modelo.
Voy a modificar estas imágenes. Simplemente las recortaremos para conservar el 50% central y eliminaremos todo lo que esté fuera. Para ello, pueden ver aquí el menú de utilidades de imagen. Esto forma parte del complemento para Torch. Accedo aquí a mi entorno de aprendizaje profundo de Torch. Aquí están mis utilidades de imagen.
Bien, podemos obtener el tamaño de las imágenes y almacenarlo en una columna aparte. Podemos redimensionar las imágenes si queremos, hacerlas más grandes o más pequeñas. Voy a recortarlas, como ya dije. Esta imagen muestra un ejemplo de cómo quedarán. Volvamos a la tabla de datos y arreglemos estas imágenes con nuestro complemento Torch Deep Learning, Image Utilities. Ahora quiero recortarlas.
Esta tabla de datos solo tiene una columna con imágenes, y puedo modificar la configuración aquí, pero esto es justo lo que necesito. Esta configuración sigue el ejemplo. Con esta configuración, JMP ya nos indica que obtendremos el 50 % central de las imágenes, que es exactamente lo que buscamos. Voy a ejecutar el programa. JMP procesará estas imágenes.
A continuación, para comparar, les mostraré un poco del antes y el después de cada uno. Hay un pequeño problema con lo que vemos, así que voy a guardar este archivo en mi carpeta de descargas. Lo voy a volver a abrir y enseguida verán por qué.
Aquí está. Puedo abrirlo para ver mis elementos recientes. Aquí está. Esto es lo que quiero que vean. Miren la fila número 4. En la fila número 4, justo aquí, pueden ver que hay algunos dedos en esta imagen, por ejemplo. A la derecha, después de limpiar y recortar la imagen, pueden ver que está ampliada y que eliminamos los elementos sobrantes que no queremos incluir en las imágenes que usamos para construir nuestro modelo.
Vamos a usar esa nueva imagen recortada como nuestro eje X, y el eje Y de nuestro modelo será el mineral, el mineral correcto. Veamos el siguiente paso. Hemos modificado las imágenes, importado y limpiado los datos, y el siguiente paso será crear algunas columnas de validación cruzada K-fold.
Para ello, también vamos a usar este complemento de Torch. Les mostraré cómo se ve. En mi tabla de datos, en la sección de complementos, en Torch Deep Learning, queremos crear columnas para la validación cruzada K-fold. En este caso, vamos a analizar la columna de respuesta, Y, que corresponde al mineral correcto, y también la usaremos para la estratificación. Lo que haremos aquí es crear tres columnas que agrupen estos datos.
En cada una de esas tres columnas habrá cinco grupos. Usaremos estas columnas de validación cruzada K-fold para la construcción de nuestro modelo. La idea es usar solo una parte de los datos para construir el modelo y otra parte para probar las predicciones y luego actualizar y mejorar el modelo. Esa es la idea: usar solo fragmentos de los datos a la vez. A través de este menú, creamos las columnas de estratificación que nos permiten hacerlo.
Voy a ejecutar el programa. JMP está realizando una operación muy sofisticada, utilizando técnicas avanzadas de diseño de experimentos (DOE) para crear estas columnas de agrupación que nos permiten validar y mejorar el modelo. Listo. Aquí podemos ver tres nuevas columnas: A, B y C. Para usar todas estas columnas y todas estas agrupaciones en la validación, el proceso tardará bastante, quizás un par de horas en mi portátil. Incluso si estuviéramos ajustando el modelo final, probablemente querríamos usar todas estas columnas y dejar que JMP se ejecute durante un tiempo prolongado para ajustarlo.
Hoy no los haré esperar tanto. Para agilizar esta demostración, usaremos la validación cruzada de un solo conjunto de datos. Para ello, usaré utilidades de columnas y crearé columnas indicadoras. Para la validación de hoy, usaremos la columna que indica el número 1. Podríamos usar, por ejemplo, esta parte de los datos (763 filas) para ajustar un modelo y las 190 filas restantes para probar las predicciones y actualizar el modelo. Usaremos una validación cruzada simple para este ejemplo.
Así es como podemos crear columnas de validación cruzada K-fold mediante este complemento. El siguiente paso es ajustar el modelo e iterar. Es decir, ajustaremos el modelo y luego lo optimizaremos ligeramente. Disponemos de muchos controles para estos modelos Torch: pequeños detalles que podemos modificar para ver si mejoramos la predicción. Primero, especificaremos el modelo. Le indicaremos a JMP qué queremos predecir.
Volvamos a la tabla de datos y procedamos. Complementos, Torch Deep Learning, Torch Deep Learning. Aquí, le indicaré a JMP que la variable Y o respuesta que quiero predecir es el mineral, y que quiero predecirlo basándome en el recorte del 50 % de las imágenes que teníamos. Usaremos una validación simple para este ejemplo y luego daremos el visto bueno.
Tenemos más opciones para especificar aquí. Hablaré brevemente de ellas, y contamos con mucha más documentación al respecto. Aquí podemos controlar cómo se ajusta este modelo. Por ejemplo, en el menú desplegable de modelos de imagen, se muestran modelos preentrenados con miles de imágenes. Usaremos un modelo preentrenado y luego añadiremos nuestras propias imágenes para personalizarlo según nuestras necesidades. Elegiré Google Net. He tenido buenos resultados con este conjunto de datos en particular y con ese modelo de imagen. Si no estás seguro, puedes usar la configuración predeterminada de JMP.
También voy a ajustar aquí el número de épocas. En realidad, se trata del número de pasadas por los datos. Voy a reducirlo un poco para acelerar el proceso. Por supuesto, también podemos controlar la tasa de aprendizaje, es decir, la rapidez con la que el modelo se ajusta a los errores de un modelo anterior. Además, tenemos estas opciones avanzadas adicionales aquí a la derecha. Permítanme consultar mi diario para hablar brevemente de ellas.
Disponemos de numerosos controles avanzados para el modelo, que se dividen en tres categorías. En primer lugar, están las especificaciones del modelo: ¿qué modelo debemos ajustar? También contamos con controles para el entrenamiento: ¿cómo debemos ajustar este modelo? ¿Cómo debemos entrenarlo? Por último, ofrecemos opciones para el modelado de imágenes, para manipularlas y realizar diversas acciones.
Déjenme mostrarles cómo se ve, y luego ajustaremos este modelo. Si expando las opciones a la derecha, aquí pueden ver a la izquierda. Puede parecer un poco abrumador, pero tenemos una útil ayuda emergente. Si simplemente mueven el ratón en círculos, la opción "Saltar" les dará una breve descripción de la función de cada una. Las capas en una red neuronal profunda son esencialmente similares al número de nodos en una red neuronal. Para nuestro ejemplo, usaré ocho.
Vamos a ver este siguiente conjunto de datos, que es el conjunto de entrenamiento. Aquí voy a modificar el tamaño del lote. El tamaño del lote determina cuántas filas de datos procesamos a la vez. Como mi ordenador no es muy rápido, solo quiero procesar 64 filas de datos simultáneamente. Por último, tenemos estas opciones de imagen a la derecha. Aquí, el tamaño de la imagen nos permite controlar su tamaño. Voy a establecerlo en 228. Parece que ha funcionado bien con este conjunto de datos en particular.
Eso es todo lo que voy a cambiar por ahora. La idea de ajustar un modelo con aprendizaje profundo de Torch es la siguiente: se introduce un modelo, se ajusta y luego se itera. Se pueden realizar pequeños ajustes para intentar mejorar su capacidad predictiva o su rendimiento. Voy a dar el visto bueno. JMP procesará los datos y veremos qué tipo de modelo obtenemos.
Mientras JMP realiza este proceso, esta pequeña ventana mostrará actualizaciones sobre el rendimiento hasta el momento, tanto en los datos de entrenamiento (los datos utilizados para entrenar el modelo) como en los de validación. Nos centraremos en los resultados de validación, ya que nos darán una mejor idea de la precisión predictiva del modelo al introducir nuevas imágenes.
Aquí estoy analizando la precisión tanto para el entrenamiento como para la validación, y hasta ahora se ve bastante bien. Superamos el 90 % en los datos de entrenamiento y la precisión se sitúa entre el 70 y el 80 % en los datos de validación. Este es un modelo que entrenamos muy rápidamente. Si usáramos otras opciones, como más épocas, probablemente podríamos obtener otro modelo mejor sin modificar demasiado el que ya tenemos.
Pero echemos un vistazo, porque este es nuestro siguiente paso: comparar modelos. Hasta ahora, solo hemos creado un modelo. Veamos cómo se ve. A medida que creemos más modelos, JMP añadirá más información en la comparación, lo que nos permitirá compararlos. Para este modelo inicial, el modelo 1, la respuesta fue "mineral". Esta es la información que introdujimos en la ventana para ajustar nuestro modelo.
Tenemos información sobre el coeficiente de determinación (R²), pero no la voy a analizar porque no estamos prediciendo un número. Estamos clasificando imágenes. Nos interesan más las métricas de precisión y, en particular, la precisión de validación. Ya se ve bastante bien. Estamos cerca del 90 % de precisión con este modelo que entrenamos muy rápidamente.
Aquí podemos ver una representación gráfica de la evolución del modelo durante su entrenamiento. Se observan dos líneas: una para los datos de entrenamiento y otra para los de validación. En general, esta tendencia muestra que la pérdida o error del modelo disminuye a medida que avanzamos en las diferentes épocas. Al realizar más iteraciones sobre los datos para extraer más información de las imágenes, el error se reduce y nuestras predicciones mejoran.
Dado que estas líneas siguen en descenso, probablemente convenga aumentar el número de épocas y permitir que el modelo se procese varias veces más con los datos, lo que podría ayudarnos a mejorarlo. Estos son algunos aspectos que podemos analizar para evaluar el rendimiento del modelo. Aquí tenemos estos gráficos de valores reales frente a valores predichos, donde a la izquierda se muestra el mineral real y en la parte inferior la probabilidad predicha. En esencia, a la derecha de estos gráficos se observan predicciones precisas, mientras que a la izquierda se muestran puntos con predicciones menos acertadas.
Aquí todo es interactivo y dinámico. Si volvemos a la tabla de datos, por ejemplo, y configuramos la columna de imágenes como etiqueta, al pasar el cursor sobre estos puntos, podemos ver qué imagen parece ser de cuarzo. Dado que esta imagen está bastante a la izquierda en este gráfico, probablemente se clasificó incorrectamente. Era cuarzo. También podríamos resaltar todas las imágenes que no se clasificaron correctamente. Parece que son unas 40 filas.
Podríamos volver a analizar esas imágenes y ver si hay algún problema potencial con ellas, o tal vez necesitemos recopilar más imágenes de esos minerales en particular para intentar mejorar esas predicciones.
Aquí abajo, un poco más de información: analizaremos las matrices de confusión para los datos de validación. Lo que buscamos en ambas diagonales, ya sea que observemos los recuentos o las tasas, es que esta diagonal tenga números grandes y, preferiblemente, ceros arriba o abajo.
Para la biotita, el mineral real aparece a la izquierda y, a ambos lados, los minerales predichos. La precisión es de aproximadamente el 75 % para la biotita y del 92 % para la boronita. Podemos ver el rendimiento de cada uno de estos modelos. Aquí vemos que la precisión es del 77,8 % para la moscovita. Parece que la moscovita es el mineral que peor predecimos o clasificamos con este modelo.
Nuevamente, en mi caso, solo tenemos un ejemplo para la comparación. Quiero mostrarles en este diario cómo se vería si estuvieran comparando varios modelos. A medida que se ajusten modelos adicionales y se modifiquen las opciones, JMP los irá incorporando a la comparación. Así, podrán comparar la precisión de validación de varios modelos, visualizar su rendimiento y compararlos.
De nuevo, intenta mejorar y encontrar el mejor modelo posible antes de implementarlo. Ya hablamos un poco sobre comparar modelos y evaluar los resultados. Hablemos ahora un poco más sobre la evaluación de los resultados.
Hay gráficos interactivos muy útiles que puedes ver en esta salida. Quiero destacar que, para cada modelo, hay opciones adicionales para guardar información en la tabla de datos. Aquí, por ejemplo, puedo guardar las incrustaciones. Voy a hacer clic aquí y volveré a mi tabla de datos para mostrártelo.
Aquí se pueden ver ocho columnas para las incrustaciones. ¿Qué son las incrustaciones? Como recordarán, en los controles del modelo configuré ocho como el número de nodos para mi red neuronal. Esto es precisamente lo que representan. Estos nodos son las características extraídas de las imágenes de minerales. Si quisiera, podría usar estas incrustaciones como variables de entrada para modelos predictivos en otras plataformas de modelado dentro de JMP. Simplemente podría usar Torch para extraer la información y usarla para realizar predicciones o para construir un modelo en otra plataforma.
Otra excelente opción, al menos para mí, ya que me gusta visualizar la precisión de mi modelo de predicción de esta manera, es guardar las predicciones en la tabla de datos. Permítanme mostrarles cómo se ve. Este es el mineral más probable o predicho que guardamos aquí en la tabla de datos. Con el Generador de Gráficos, es muy fácil graficar el mineral real en el eje Y. También lo usaré como variable de color. Voy a colocar el mineral predicho en el eje X.
¿Qué representa esto? Bueno, los recuadros grandes son los minerales que se clasificaron correctamente, y todos los puntos que están fuera de ellos se clasificaron incorrectamente. Esto era cuarzo. Se clasificó como boronita. Este mineral es moscovita, y se clasificó incorrectamente como biotipo. Esto facilita ver qué imágenes se clasificaron incorrectamente y cuántas de ellas se clasificaron incorrectamente.
Otra opción que vale la pena mencionar. Desde este triángulo rojo, también podemos generar el código Python para realizar predicciones en tiempo real. Si este fuera nuestro modelo final, estuviéramos satisfechos con estas predicciones y quisiéramos implementarlo en tiempo real, aquí podríamos guardar el código Python. Ahora bien, no voy a hacerlo, pero sí quiero retomar mi cuaderno y hablar sobre qué podríamos hacer una vez que exportemos ese código Python.
Nos gustaría usar ese modelo para hacer predicciones. En una mina, podríamos hacer lo siguiente: una vez que tengamos el modelo entrenado y exportemos el código Python, podríamos integrarlo en un sistema local. Para ello, necesitaríamos una cámara que capture imágenes de los minerales o el mena que se extraen de la mina. También necesitaríamos un dispositivo periférico donde insertaríamos nuestro código Python para que este procesara las imágenes de los minerales capturadas por la cámara y los clasificara rápidamente. Esa es la idea. Podríamos hacer predicciones en tiempo real.
¿Qué podríamos hacer con eso? Podríamos usar esa información para fundamentar decisiones como el ajuste de los parámetros de molienda. Podríamos separar automáticamente el mineral de los desechos basándonos en esas predicciones. O podríamos hacer estimaciones en tiempo real sobre la cantidad de cada mineral que vamos a extraer del mineral. Esto sería realmente útil si la información se recibiera en tiempo real.
Para concluir, algunas conclusiones clave. Espero que esta demostración les haya permitido apreciar que Torch Deep Learning y JMP Pro ofrecen una excelente solución sin código para la clasificación de minerales. Los modelos se pueden entrenar rápidamente con imágenes etiquetadas, y JMP cuenta con todas las herramientas necesarias para importar imágenes, limpiar y preprocesar los datos antes de crear el modelo. La clasificación en tiempo real es posible con hardware bastante sencillo, y este enfoque permite tomar decisiones más rápidas y precisas en las operaciones mineras. Muchas gracias por su atención.