Imagina que Cruella De Vil, la villana y diseñadora de moda más famosa de Disney consiguiera optimizar su tiempo a la hora de probar sus fabulosas creaciones o incluso inspirarse en nuevos modelitos.
En el sector de la moda, el tiempo y la originalidad son muy valiosos cuando hablamos de lanzar nuevas colecciones al mercado justo en el momento adecuado. Si los profesionales de la moda pudieran beneficiarse de algún tipo de recomendador inteligente…. ¡Espera! ¡Podría ser realidad! Gracias al Machine Learning se han podido crear sistemas de recomendación para este sector tan creativo ¿Te enseñamos la última tendencia en el mundo de la moda? ¡Sigue leyendo!
Visión general del proyecto Para comenzar cualquier proyecto de aprendizaje automático, necesitamos comenzar con inputs o datos de entrada. Para ello, se eligió Polyvore, una web en la que se cargan imágenes de prendas para que vayan recibiendo likes de otros usuarios. Esta red social permite crear composiciones de imágenes, una especie de collage, con una serie de fotos de productos, precios y looks muy similares a los que podemos ver en revistas de moda. Para crear composiciones con Polyvore es necesario distribuir en sus murales las imágenes, textos y elementos que nos gustaría incluir. Gracias a estas características, Polyvore logró atraer a millones de usuarios, amantes de las compras por Internet y de la moda.
Con el avance del Machine Learning se puso en marcha la construcción de este sistema de recomendación para la industria de la moda, así como algunos conceptos básicos sobre cómo podría abordar la construcción de un proyecto con aprendizaje profundo. Este sistema en particular recoge prendas de vestir separadas como entradas de imagen y recomienda al usuario otras piezas que considere atractivas.
Está construido a partir de una combinación de los siguientes modelos: un Codificador Automático de Red Neuronal de múltiples entradas y una agrupación de K-Means, un tipo de algoritmo. Hay que tener en cuenta que cada atuendo tiene una puntuación (la cantidad de likes), podemos generar todas las combinaciones posibles de prendas del armario de un usuario en particular, predecir la cantidad de likes que recibiría cada outift y devolver al usuario el outfit con más likes según las recomendaciones de outfits previstos. Los datos consisten en carpetas de imágenes de piezas de ropa, así como archivos JSON que contienen metadatos para cada outfit (es decir, la cantidad de me gusta que recibiese cada outfit y la categoría de ropa para cada componente de la vestimenta). El flujo final puede ser dividido en dos secciones generales: 1. Modelo de entrenamiento
Utilizar las descripciones de las vestimentas para extraer solo las imágenes que coincidan con las prendas predefinidas como “outfit”
Entrenar un modelo de codificador automático para cada tipo de ropa en nuestra composición predefinida.
Predecir incrustaciones para cada imagen de entrada.
Entrenar a una CNN (Convolutional Neural Network o Red Neuronal Convolucional) de múltiples entradas para predecir los likes de cada prenda de vestir.
2. Recomendación de outfit
Introducir el vestuario del usuario final y predecir la incrustación de cada imagen.
Generar todas las combinaciones posibles de conjuntos utilizando las imágenes.
Calificar cada uno de los posibles conjuntos mediante la CNN.
Crear tres grupos de conjuntos basados en las imágenes.
Devolver el conjunto con la mayor puntuación de cada grupo como predicción.
Limpieza inicial de datos El conjunto de datos de Polyvore incluye tres JSON (prueba, entrenamiento y validación) con metadatos para cada conjunto. Podemos importar estos JSON como conjuntos de datos en Dataiku para obtener las rutas a las imágenes relevantes de cada outift. Como Dataiku maneja automáticamente las divisiones de prueba y entrenamiento, se combinaron todos los datos antes de limpiarlos. Se eliminaron todos los outfits no relevantes para el problema usando el procesador de "filtro de valor". Por ejemplo, se eliminaron todos los conjuntos que contenían "Un look masculino" en la descripción para limitarlo a prendas de vestir típicas de la moda femenina para este proyecto. A continuación, ejemplos de definición de un "outfit". En este proyecto se consideraron dos ejemplos básicos de outfits: Ejemplo 1 Vestido Ropa de abrigo (opcional) Zapatos Bolso
Ejemplo 2 Parte superior Parte inferior Jersey (opcional) Ropa de abrigo (opcional) Zapatos Bolso
Se usaron una serie de pasos en Python en la preparación para quitar cualquier outfit que no coincidiera con los dos criterios de atuendo anteriores. Por ejemplo, si un outfit contiene un vestido, pero no zapatos, lo eliminaría del conjunto de datos. Al final del todo se crea una columna que contiene la ruta a la imagen real de cada prenda de vestir para cada outfit, a la que podemos hacer referencia para construir los modelos.
Procesamiento de imágenes para la visión artificial La mayoría de los modelos de Machine Learning solo pueden tomar entradas numéricas, por lo que necesitamos una forma de convertir nuestros archivos en formato .jpg a un formato que un modelo sea capaz de leer. Un recurso aplicable es el paquete Python OpenCV-Python, que contiene OpenCV, una biblioteca de código abierto para Computer Vision, aprendizaje automático y procesamiento de imágenes, prediseñado con dependencias y enlaces de Python.
Reducción de dimensionalidad con un modelo de autocodificador La Reducción de la Dimensionalidad es una técnica que consiste en convertir un conjunto de datos de dimensiones elevadas en un conjunto de datos de dimensiones menores. Se emplea muy a menudo en el Machine Learning para obtener un modelo predictivo lo más asertivo posible, mientras se solventan los problemas de regresión y clasificación que tienen los algoritmos. Esta técnica asegura que la información que se proporciona sea similar en ambos casos.
En el caso del sistema de recomendación de moda, antes de entrenar el modelo predictivo, se ha entrenado un modelo previo que reduce la dimensionalidad de las imágenes para alimentar modelos concurrentes.
Esto tiene dos ventajas: trabajar con representaciones de imágenes más pequeñas, lo que aumenta la eficiencia y el hecho de que los modelos concurrentes pueden aprender señales adicionales del codificador automático que la imagen original no contiene. Predecir puntuaciones de outfits con un modelo CNN de múltiples entradas Ahora que tenemos el modelo de codificador automático, podemos usar las codificaciones para entrenar un modelo predictivo. Este modelo toma artículos de ropa separados como entradas y predice el registro de likes que recibiría ese outfit. Vamos a elegir predecir los likes del registro en este caso en lugar de los likes reales porque la distribución de los likes estaba extremadamente sesgada.
La codificación de cada imagen se pasó individualmente a capas completamente conectadas antes de que todas se concatenasen juntas y pasasen a través de una capa adicional completamente conectada, antes de predecir la salida. De esta manera, cada imagen se evaluó por separado y en conjunto como un todo en el outfit.
Para entrenar el modelo, se utilizó el Visual Machine Learning Lab para predicción en Dataiku. Es posible usar cada una de las características (cada prenda de vestir) como una entrada separada e insertarlas directamente en el modelo. Una vez el modelo esté entrenado, se publica en el flujo para poder predecir las puntuaciones en los outfits de los nuevos usuarios. Combinándolos con algoritmos de clustering Usando los modelos entrenados, finalmente podemos crear algunas recomendaciones de outfit nuevos. Dada la nueva entrada de ropa por parte del usuario, el primer paso fue leer las imágenes usando OpenCV y luego codificarlas usando el autoencoder. Después de eso, todas las combinaciones posibles de outfits se crearon usando la definición de “outfit” que se definió anteriormente. A continuación, se utilizó el modelo predictivo para predecir la puntuación que recibiría cada outfit. Cuando se probó ese método, se concluyó que las mejores prendas de vestir eran casi todas iguales (con pocas variaciones en los zapatos o el bolso).
Para asegurarse de que los conjuntos fuesen relativamente diferentes entre sí, se decidió agrupar los conjuntos usando las incrustaciones y devolver el conjunto superior de cada grupo. Esta es una ventaja de aplicar las incrustaciones, ya que la dimensionalidad es extremadamente reducida para el paso de agrupamiento. En este caso, se utilizó la agrupación de K-Means para encontrar tres grupos (tres recomendaciones de outfits). Se creó un laboratorio de clustering para iniciar la configuración y la implementación de un algoritmo para realizar el agrupamiento. De este modo, cada vez que se ejecutara el flujo con nuevas imágenes, se formaban nuevos grupos en consecuencia. Una vez identificado un grupo para cada outfit potencial, la receta Top N se puede utilizar para encontrar el outfit con la puntuación más alta para cada grupo. Por último, se agregó las imágenes de cada prenda de vestir de puntuación superior a una carpeta usando una receta de Python. Interfaz de usuario final
Ahora que todo el proceso estaba completo, se pretendió crear una interfaz con la que un usuario final pudiera interactuar. Afortunadamente, al usar las aplicaciones de Dataiku, ¡esto fue muy fácil! Se comenzó creando un escenario que podría automatizar la zona de flujo de recomendaciones (no es necesario volver a entrenar el codificador automático y los modelos predictivos para hacer recomendaciones). El escenario activa los conjuntos recomendados para reconstruir a partir de las imágenes de entrada del usuario. A continuación, se construyó una aplicación en Dataiku para una interfaz de usuario final. El usuario final puede arrastrar sus fotos a la aplicación, hacer clic en ejecutar y luego ver sus recomendaciones en un dashboard. Resultados y otras aplicaciones Con la aplicación terminada, finalmente podemos comenzar a recomendar vestimentas y revisar el modelo con ejemplos reales. Se utilizó una variedad de imágenes para probar el sistema; aquí hay un par de outfits que la aplicación devolvió en la siguiente composición: Este es un problema sin supervisión y la moda es bastante subjetiva, por lo que es difícil evaluar realmente cómo se ve un modelo "bueno" o "malo".
Hay muchas extensiones de este proyecto, como recomendar prendas de vestir a los usuarios para mejorar su guardarropa o vestir maniquíes de las tiendas.
¡Dejemos que Cruella decida!
Referencias:
Todos los derechos reservados a Dataiku