En las empresas de productos de consumo, es importante desarrollar modelos de predicción de estabilidad para anticipar la vida útil del producto o el riesgo de fallos en su estabilidad a largo plazo en la fase inicial de su desarrollo. La fotografía de lapso de tiempo (TLP) se ha consolidado como la principal herramienta para medir la estabilidad física de los productos líquidos de consumo.
Anteriormente se había desarrollado un modelo de IA/aprendizaje profundo en Python para predecir modos de fallo de estabilidad física a partir de imágenes TLP. Con la disponibilidad del nuevo complemento Torch Deep Learning para JMP Pro, podemos desarrollar rápidamente un modelo de IA/aprendizaje profundo para detectar fallos de estabilidad física en imágenes sin necesidad de programación. En esta presentación, mostramos la aplicación del complemento a un problema de clasificación de imágenes para detectar fallos de estabilidad física en productos de consumo.
Me llamo Fangyi Luo. Soy estadística y científica de datos en Procter & Gamble. Hoy presentaré un póster junto con Russ Wolfinger de JMP. Llevo unos 28 años en P&G y, actualmente, me centro en acelerar la innovación de productos y envases mediante la estadística y la ciencia de datos. Russ, ¿te gustaría presentarte brevemente?
Sí. Gracias, Fangyi. Me entusiasma trabajar contigo en este proyecto. Como sabes, el aprendizaje automático de la IA es un tema candente, y nos encantan las aplicaciones prácticas como esta, que, creo, están marcando la diferencia, como la posibilidad de usar el nuevo complemento Torch para la clasificación de imágenes. Me parece muy potente y práctico. Hoy tenemos una historia muy interesante que compartir sobre cómo has logrado avanzar con él. Personalmente, estoy muy emocionado de verlo en marcha. Este proyecto lleva varios años en desarrollo y ahora está empezando a despegar.
Gracias, Russ. Hoy vamos a abordar un problema de clasificación de imágenes utilizando el nuevo complemento JMP Torch Deep Learning. Primero, hablaré sobre el contexto del problema. En Procter & Gamble fabricamos muchos productos de consumo, algunos de los cuales son líquidos, como champú, acondicionador, detergente líquido, jabón líquido para platos, etc.
Antes de lanzar un producto al mercado, realizamos numerosas pruebas al prototipo. Utilizamos una técnica llamada fotografía time-lapse para obtener imágenes del prototipo a diferentes temperaturas a lo largo del tiempo. Aquí a la derecha, se pueden observar algunos fallos de estabilidad en algunos prototipos líquidos formulados, como la separación de fases y la aparición de una fina capa cremosa en la superficie. Esto se debe a fluctuaciones, grietas y cristalización.
Dado que probamos miles de prototipos de productos formulados, utilizamos una cámara digital para realizar un seguimiento de todos ellos a lo largo del tiempo. Capturamos millones de imágenes. La clasificación manual de estas imágenes en diferentes modos de fallo era imposible. Hace unos años, formamos un equipo en PNG y desarrollamos un algoritmo de aprendizaje profundo para clasificar estas imágenes en modos de fallo estables y de estabilidad física, utilizando un modelo de aprendizaje profundo desarrollado en Python.
Con la nueva disponibilidad de JMP Pro Torch Deep Learning, creo que deberíamos intentar aplicarlo, añadiéndolo a nuestro problema de clasificación de imágenes.
Aplicamos esta clasificación de imágenes a nuestro problema utilizando tanto la clasificación binaria (estable o inestable) como la clasificación múltiple (estable frente a diferentes modos de fallo de estabilidad física). Para ello, utilizamos el mejor complemento de aprendizaje profundo. Incluimos aproximadamente 3500 imágenes en el conjunto de entrenamiento y más de 500 en el de prueba. A continuación, les muestro algunos de los resultados.
Al probar el complemento Torch Deep Learning en la clasificación binaria, inicialmente utilicé la configuración predeterminada de los parámetros y elegí el modelo de imagen ResNet-34. Rápidamente, obtuve un modelo excelente con una precisión de validación del 95%, de forma muy rápida y sencilla. En la gráfica del historial de entrenamiento, se observa que la pérdida disminuye a medida que aumenta el número de épocas (es decir, las iteraciones de entrenamiento). Nuestro objetivo es desarrollar un modelo con una precisión de validación del 95%. Si bien este modelo inicial fue muy bueno, queremos comprobar si podemos seguir mejorando su precisión de validación.
Lo que hice fue intentar modificar manualmente algunos hiperparámetros. Probé con un modelo de imagen más complejo, como ResNet-50, y también intenté disminuir la tasa de aprendizaje y aumentar el número de épocas. Tras varios intentos, logré obtener rápidamente un modelo de clasificación binaria con una precisión de validación del 99 %. Me entusiasmaron mucho estos resultados. Sin embargo, para la clasificación multiclase con el complemento JMP Torch Deep Learning, el proceso lleva algo más de tiempo y no conseguí un buen modelo inicialmente.
Peter Hirsch, de JMP, me comentó que tienen un complemento, Torch Companion, que permite ajustar los hiperparámetros del complemento Torch Deep Learning. Lo descargué, y como pueden ver, está disponible en marketplace.jmp.com. Pueden descargar tanto el complemento Torch Deep Learning como el complemento Torch Companion. Lo probé y me permitió diseñar un experimento con los hiperparámetros.
Utilicé 20 combinaciones de hiperparámetros, con diferentes números de épocas, tasa de aprendizaje, tamaño de lote, número de capas, tamaño de capa y tamaño de imagen. Probé el complemento Torch Companion y el mejor modelo que obtuve para esta clasificación multiclase alcanzó una precisión de validación de aproximadamente el 78 %. Nuestro objetivo es lograr un modelo con una precisión de validación de alrededor del 95 % o superior, por lo que este modelo no es suficientemente bueno. Luego intenté ajustar el modelo manualmente, utilizando diferentes hiperparámetros. Probé con diferentes modelos de imagen, incluyendo ResNet-50. También intenté aumentar el número de épocas, disminuir la tasa de aprendizaje, cambiar el tamaño del lote y el tamaño de la imagen.
Para la clasificación multiclase, el proceso tarda mucho más. Aquí tengo una captura de pantalla del modelo ejecutándose después de un día. A veces, me indicaba que mi GPU NVIDIA se había quedado sin memoria, pero seguí intentándolo y, tras varios intentos, logré crear un modelo de aprendizaje profundo muy bueno para clasificar las imágenes en múltiples clases, como la categoría de modo estable y diferentes modos de desvanecimiento. La precisión de validación fue del 95 %. Quedé muy satisfecho con los resultados. Además, Russ me sugirió que, para reducir el consumo de memoria, podíamos disminuir el tamaño del lote o el número de épocas. Esto es parte de lo que aprendimos; veamos qué tal funciona.
Permítanme retomar el tema. Como pueden ver, es muy fácil y rápido desarrollar el modelo de clasificación binaria usando el complemento Torch Deep Learning, y podemos usar el complemento Torch Companion para ajustar los hiperparámetros. Además, podemos desarrollar un buen modelo para problemas de clasificación multiclase ajustando manualmente los hiperparámetros. Russ, ¿quieres agregar algo?
Sí, Fangyi, ¡qué buen progreso! Sé que tenemos varios clientes que están siguiendo este camino. No es el típico análisis rápido al que estamos acostumbrados en JMP, precisamente porque maneja muchísimos datos y los cálculos son muy intensos. Es genial que puedas usar tu GPU NVIDIA. Fangyi, ¿recuerdas cuánta memoria tenía esa tarjeta gráfica?
Creo que son más de 200, 256 gigabytes.
Normalmente, las GPU tienen unos 12 o 16 gigabytes de memoria. Me refiero a la memoria de la GPU, no a la de la CPU. Tendremos que comprobarlo, pero sé que NVIDIA tiene muchísimas tarjetas diferentes. Es difícil elegir. Últimamente mucha gente nos pregunta qué tarjeta comprar, y lo bueno es que NVIDIA, gracias a su éxito, sigue sacando tarjetas cada vez mejores a un precio más bajo. He oído que van a sacar una nueva. Será aún más potente y más barata, así que esperamos que los tiempos de ejecución se reduzcan. Todo depende, sobre todo si trabajas con imágenes grandes.
Creo que al final subiste de 2 a 4, que es un tamaño estándar. Sigue siendo un buen tamaño, y puedes empezar a aprovechar al máximo las tarjetas, aunque eso puede resultar caro. En fin, para eso las tenemos. Es genial poder sacar provecho de esa potencia informática de alto rendimiento con un poco de paciencia y ajustes. Gracias a Peter Hirsch y Scott Allen por ese complemento adicional, que conozco a mucha gente. Es un complemento realmente útil para Torch, que permite crear mejores modelos más rápido y automatizar algunas tareas.
Obviamente, con esos tiempos de ejecución tan largos, a veces conviene dejarlos funcionando toda la noche y luego volver al día siguiente para ver qué pasa. En mi opinión, tomaste las medidas correctas al usar la automatización, pero también creo que es recomendable hacer algunos ajustes manuales y probar diferentes cosas. No solo suele ser la forma de obtener el mejor modelo, sino que también ayuda a comprender mejor el problema, a ver qué factores realmente impulsan las mejoras y cuáles no tanto. Lo que he visto es que a menudo es imposible saberlo con certeza. A veces, uno de esos modelos de imagen parece capturar la esencia de las imágenes y suele funcionar mucho mejor que otros.
A veces son prácticamente iguales, y otras veces depende más del tamaño de la imagen o del método de entrenamiento. Básicamente, hay que hacer experimentos para probar diferentes opciones, y así es como lo hemos configurado. Me alegra que hayas mostrado la curva de pérdida de entrenamiento, porque es importante vigilarla para asegurarse de que desciende y luego se estabiliza. Tiene buen aspecto. Sin embargo, ten cuidado: hay dos casos en los que no conviene usarla: cuando la curva desciende y luego vuelve a subir, sobre todo si es continua.
Eso indicaría sobreajuste, lo cual puede ocurrir a veces. Otro caso sería si el valor sigue disminuyendo constantemente; en ese caso, probablemente convenga ejecutar más épocas hasta lograr una mayor convergencia. Pero son detalles, pequeños trucos que se aprenden con la práctica. Para mí, es muy divertido porque es una interfaz sin código, que permite empezar a modelar rápidamente sin atascarse escribiendo código Python y teniendo que modificarlo cada vez que se quiere probar algo diferente. ¡Vaya, Fangyi, esta aplicación es genial! ¡Enhorabuena! Me alegra mucho verla.
Gracias, Russ. Para terminar, aquí tenemos algunas referencias. Este es un enlace a la documentación del complemento JMP Torch Deep Learning y otro al complemento Torch Companion. Además, presenté un problema similar cuando desarrollamos un modelo con Python en la conferencia de estadística ASA, IMS, Spring Research Conference hace un par de años.
También quiero agradecer a mi equipo de P&G por haber trabajado juntos en este problema. Asimismo, como mencionó Russ, agradecemos a Peter Hirsch por compartir su complemento de almacenamiento. Eso es todo. Si tienen alguna pregunta, ya saben a quién contactar: a Russ o a mí. Fue muy interesante aprender a usar este complemento de aprendizaje profundo de JMP Torch con Russ, y creo que podemos encontrarle muchas más aplicaciones en P&G. Gracias.
¡Excelente trabajo, Fangyi! Gracias.