Genera publicidad creativa utilizando inteligencia artificial generativa implementada en Amazon SageMaker

Generates creative advertising using generative artificial intelligence implemented in Amazon SageMaker.

La publicidad creativa tiene el potencial de ser revolucionada por la IA generativa (GenAI). Ahora puedes crear una amplia variedad de imágenes novedosas, como fotos de productos, al volver a entrenar un modelo de GenAI y proporcionar algunos datos de entrada al modelo, como indicaciones textuales (frases que describen la escena y los objetos que el modelo debe producir). Esta técnica ha mostrado resultados prometedores a partir de 2022 con la explosión de una nueva clase de modelos base (FMs) llamados modelos de difusión latente, como Stable Diffusion, Midjourney y Dall-E-2. Sin embargo, para utilizar estos modelos en producción, el proceso de generación requiere un constante perfeccionamiento para obtener resultados consistentes. Esto a menudo implica crear una gran cantidad de imágenes de muestra del producto y una ingeniería de indicaciones ingeniosa, lo que dificulta la tarea a gran escala.

En esta publicación, exploramos cómo esta tecnología transformadora puede ser aprovechada para generar anuncios cautivadores e innovadores a gran escala, especialmente al tratar con catálogos grandes de imágenes. Al utilizar el poder de GenAI, específicamente a través de la técnica de inpainting, podemos crear de manera fluida fondos de imágenes, lo que resulta en contenido visualmente impresionante y atractivo, y reduce artefactos no deseados en las imágenes (llamados alucinaciones del modelo). También profundizamos en la implementación práctica de esta técnica utilizando puntos finales de Amazon SageMaker, que permiten la implementación eficiente de los modelos de GenAI que impulsan este proceso creativo.

Utilizamos el inpainting como la técnica clave dentro de la generación de imágenes basada en GenAI porque ofrece una solución poderosa para reemplazar elementos faltantes en las imágenes. Sin embargo, esto presenta ciertos desafíos. Por ejemplo, el control preciso sobre la posición de los objetos dentro de la imagen puede ser limitado, lo que puede llevar a problemas potenciales como artefactos en la imagen, objetos flotantes o límites no fusionados, como se muestra en los siguientes ejemplos.

  

Para superar esto, proponemos en esta publicación encontrar un equilibrio entre la libertad creativa y una producción eficiente mediante la generación de una multitud de imágenes realistas utilizando una supervisión mínima. Para escalar la solución propuesta para la producción y agilizar la implementación de modelos de IA en el entorno de AWS, la demostramos utilizando puntos finales de SageMaker.

En particular, proponemos dividir el proceso de inpainting en un conjunto de capas, cada una potencialmente con un conjunto diferente de indicaciones. El proceso se puede resumir en los siguientes pasos:

  1. Primero, solicitamos una escena general (por ejemplo, “parque con árboles al fondo”) y colocamos aleatoriamente el objeto en ese fondo.
  2. A continuación, agregamos una capa en la parte inferior del objeto indicando dónde se encuentra (por ejemplo, “picnic en el césped o en una mesa de madera”).
  3. Finalmente, agregamos una capa similar a la capa de fondo en la parte superior del objeto utilizando la misma indicación que el fondo.

El beneficio de este proceso es la mejora en el realismo del objeto, ya que se percibe con una mejor escala y posición en relación al entorno de fondo que se ajusta a las expectativas humanas. La siguiente figura muestra los pasos de la solución propuesta.

Descripción general de la solución

Para llevar a cabo las tareas, se considera el siguiente flujo de datos:

  1. Los modelos Segment Anything Model (SAM) y Stable Diffusion Inpainting se alojan en puntos finales de SageMaker.
  2. Se utiliza una indicación de fondo para crear una imagen de fondo generada utilizando el modelo Stable Diffusion.
  3. Se pasa una imagen de producto base a través de SAM para generar una máscara. La inversa de la máscara se denomina anti-máscara.
  4. La imagen de fondo generada, la máscara, junto con las indicaciones de primer plano y las indicaciones negativas, se utilizan como entrada para el modelo de Inpainting de Stable Diffusion para generar una imagen de fondo intermedia generada.
  5. De manera similar, la imagen de fondo generada, la anti-máscara, junto con las indicaciones de primer plano y las indicaciones negativas, se utilizan como entrada para el modelo de Inpainting de Stable Diffusion para generar una imagen de primer plano intermedia generada.
  6. La salida final de la imagen de producto generada se obtiene combinando la imagen de primer plano intermedia generada y la imagen de fondo intermedia generada.

Requisitos previos

Hemos desarrollado una plantilla de AWS CloudFormation que creará los cuadernos de SageMaker utilizados para implementar los puntos finales y ejecutar la inferencia.

Necesitarás una cuenta de AWS con roles de IAM (Identity and Access Management) de AWS que proporcione acceso a lo siguiente:

  • AWS CloudFormation
  • SageMaker
    • Aunque los puntos finales de SageMaker proporcionan instancias para ejecutar modelos de ML, para ejecutar cargas de trabajo pesadas como modelos de IA generativa, utilizamos los puntos finales de SageMaker habilitados para GPU. Consulta la información de precios de Amazon SageMaker para obtener más información sobre los precios.
    • Utilizamos la instancia habilitada para NVIDIA A10G ml.g5.2xlarge para alojar los modelos.
  • Amazon Simple Storage Service (Amazon S3)

Para obtener más detalles, consulta el repositorio de GitHub y la plantilla de CloudFormation.

Mascara el área de interés del producto

En general, necesitamos proporcionar una imagen del objeto que queremos colocar y una máscara que delimite el contorno del objeto. Esto se puede hacer utilizando herramientas como Amazon SageMaker Ground Truth. Alternativamente, podemos segmentar automáticamente el objeto utilizando herramientas de IA como Segment Anything Models (SAM), asumiendo que el objeto está en el centro de la imagen.

Utiliza SAM para generar una máscara

Con SAM, una técnica avanzada de IA generativa, podemos generar sin esfuerzo máscaras de alta calidad para varios objetos dentro de imágenes. SAM utiliza modelos de aprendizaje profundo entrenados en conjuntos de datos extensos para identificar y segmentar con precisión objetos de interés, proporcionando límites precisos y máscaras a nivel de píxel. Esta tecnología innovadora revoluciona los flujos de trabajo de procesamiento de imágenes al automatizar la tarea de crear máscaras de forma manual, que consume mucho tiempo y mano de obra. Con SAM, las empresas y las personas pueden generar rápidamente máscaras para reconocimiento de objetos, edición de imágenes, tareas de visión por computadora y más, desbloqueando un mundo de posibilidades para el análisis y manipulación visual.

Aloja el modelo SAM en un punto final de SageMaker

Utilizamos el cuaderno 1_HostGenAIModels.ipynb para crear puntos finales de SageMaker y alojar el modelo SAM.

Utilizamos el código de inferencia en inference_sam.py y lo empaquetamos en un archivo code.tar.gz, que utilizamos para crear el punto final de SageMaker. El código descarga el modelo SAM, lo aloja en un punto final y proporciona un punto de entrada para ejecutar inferencias y generar resultados:

SAM_ENDPOINT_NAME = 'sam-pytorch-' + str(datetime.utcnow().strftime('%Y-%m-%d-%H-%M-%S-%f'))
prefix_sam = "SAM/demo-custom-endpoint"
model_data_sam = s3.S3Uploader.upload("code.tar.gz", f's3://{bucket}/{prefix_sam}')
model_sam = PyTorchModel(entry_point='inference_sam.py',
                         model_data=model_data_sam,
                         framework_version='1.12',
                         py_version='py38',  
                         role=role,
                         env={'TS_MAX_RESPONSE_SIZE':'2000000000', 'SAGEMAKER_MODEL_SERVER_TIMEOUT' : '300'},
                         sagemaker_session=sess,      
                         name='model-'+SAM_ENDPOINT_NAME)
predictor_sam = model_sam.deploy(initial_instance_count=1,
                                 instance_type=INSTANCE_TYPE,
                                 deserializers=JSONDeserializer(),
                                 endpoint_name=SAM_ENDPOINT_NAME)

Invoca el modelo SAM y genera una máscara

El siguiente código forma parte del cuaderno 2_GenerateInPaintingImages.ipynb, que se utiliza para ejecutar los puntos finales y generar resultados:

raw_image = Image.open("images/speaker.png").convert("RGB")
predictor_sam = PyTorchPredictor(endpoint_name=SAM_ENDPOINT_NAME,
                                 deserializer=JSONDeserializer())
output_array = predictor_sam.predict(raw_image, initial_args={'Accept': 'application/json'})
mask_image = Image.fromarray(np.array(output_array).astype(np.uint8))
# guarda la imagen de máscara usando PIL Image
mask_image.save('images/speaker_mask.png')

La siguiente figura muestra la máscara resultante obtenida a partir de la imagen del producto.

Utilizar el inpainting para crear una imagen generada

Al combinar el poder del inpainting con la máscara generada por SAM y la indicación del usuario, podemos crear imágenes generadas notables. El inpainting utiliza técnicas avanzadas de IA generativa para rellenar de manera inteligente las regiones faltantes o enmascaradas de una imagen, fusionándolas sin problemas con el contenido circundante. Con la máscara generada por SAM como guía y la indicación del usuario como entrada creativa, los algoritmos de inpainting pueden generar contenido visualmente coherente y contextualmente apropiado, lo que resulta en imágenes impresionantes y personalizadas. Esta fusión de tecnologías abre infinitas posibilidades creativas, permitiendo a los usuarios transformar sus visiones en narrativas visuales vívidas y cautivadoras.

Hospedar un modelo de inpainting de difusión estable en un punto de enlace de SageMaker

De manera similar al paso 2.1, utilizamos el cuaderno 1_HostGenAIModels.ipynb para crear puntos de enlace de SageMaker y hospedar el modelo de inpainting de difusión estable.

Utilizamos el código de inferencia en inference_inpainting.py y lo empaquetamos en un archivo code.tar.gz, que utilizamos para crear el punto de enlace de SageMaker. El código descarga el modelo de inpainting de difusión estable, lo hospeda en un punto de enlace y proporciona un punto de entrada para ejecutar la inferencia y generar la salida:

INPAINTING_ENDPOINT_NAME = 'inpainting-pytorch-' + str(datetime.utcnow().strftime('%Y-%m-%d-%H-%M-%S-%f'))
prefix_inpainting = "InPainting/demo-custom-endpoint"
model_data_inpainting = s3.S3Uploader.upload("code.tar.gz", f"s3://{bucket}/{prefix_inpainting}")

model_inpainting = PyTorchModel(entry_point='inference_inpainting.py',
                                model_data=model_data_inpainting,       
                                framework_version='1.12',
                                py_version='py38',
                                role=role,
                                env={'TS_MAX_RESPONSE_SIZE':'2000000000', 'SAGEMAKER_MODEL_SERVER_TIMEOUT' : '300'},
                                sagemaker_session=sess,
                                name='model-'+INPAINTING_ENDPOINT_NAME)

predictor_inpainting = model_inpainting.deploy(initial_instance_count=1,
                                               instance_type=INSTANCE_TYPE,
                                               serializer=JSONSerializer(),
                                               deserializers=JSONDeserializer(),
                                               endpoint_name=INPAINTING_ENDPOINT_NAME,
                                               volume_size=128)

Invocar el modelo de inpainting de difusión estable y generar una nueva imagen

De manera similar al paso para invocar el modelo SAM, se utiliza el cuaderno 2_GenerateInPaintingImages.ipynb para ejecutar la inferencia en los puntos de enlace y generar los resultados:

raw_image = Image.open("images/speaker.png").convert("RGB")
mask_image = Image.open('images/speaker_mask.png').convert('RGB')
prompt_fr = "mesa y silla con libros"
prompt_bg = "ventana y sofá, mesa"
negative_prompt = "longbody, baja resolución, mala anatomía, malas manos, dedos faltantes, dígito extra, menos dígitos, recortada, peor calidad, baja calidad, letras"

inputs = {}
inputs["image"] = np.array(raw_image)
inputs["mask"] = np.array(mask_image)
inputs["prompt_fr"] = prompt_fr
inputs["prompt_bg"] = prompt_bg
inputs["negative_prompt"] = negative_prompt

predictor_inpainting = PyTorchPredictor(endpoint_name=INPAINTING_ENDPOINT_NAME,
                                        serializer=JSONSerializer(),
                                        deserializer=JSONDeserializer())

output_array = predictor_inpainting.predict(inputs, initial_args={'Accept': 'application/json'})
gai_image = Image.fromarray(np.array(output_array[0]).astype(np.uint8))
gai_background = Image.fromarray(np.array(output_array[1]).astype(np.uint8))
gai_mask = Image.fromarray(np.array(output_array[2]).astype(np.uint8))
post_image = Image.fromarray(np.array(output_array[3]).astype(np.uint8))

# guardar la imagen generada utilizando PIL Image
post_image.save('images/speaker_generated.png')

La siguiente figura muestra la máscara refinada, el fondo generado, la imagen del producto generado y la imagen postprocesada.

La imagen del producto generado utiliza las siguientes indicaciones:

  • Generación de fondo – “silla, sofá, ventana, interior”
  • Inpainting – “además de libros”

Limpieza

En esta publicación, utilizamos dos puntos finales de SageMaker habilitados para GPU, que contribuyen a la mayoría de los costos. Estos puntos finales deben apagarse para evitar costos adicionales cuando no se estén utilizando. Hemos proporcionado un cuaderno, 3_CleanUp.ipynb, que puede ayudar en la limpieza de los puntos finales. También usamos un cuaderno de SageMaker para alojar los modelos y ejecutar inferencias. Por lo tanto, es una buena práctica detener la instancia del cuaderno si no se está utilizando.

Conclusión

Los modelos de IA generativa son generalmente modelos de IA a gran escala que requieren recursos específicos para funcionar de manera eficiente. En esta publicación, demostramos, utilizando un caso de uso de publicidad, cómo los puntos finales de SageMaker ofrecen un entorno escalable y administrado para alojar modelos de IA generativa como el modelo de base de texto a imagen Stable Diffusion. Demostramos cómo se pueden alojar y ejecutar dos modelos según sea necesario, y también se pueden alojar múltiples modelos desde un solo punto final. Esto elimina las complejidades asociadas con el aprovisionamiento de infraestructura, la escalabilidad y el monitoreo, permitiendo a las organizaciones centrarse únicamente en implementar sus modelos y ofrecer predicciones para resolver sus desafíos empresariales. Con los puntos finales de SageMaker, las organizaciones pueden implementar y administrar de manera eficiente varios modelos dentro de una infraestructura unificada, logrando una utilización óptima de los recursos y reduciendo la carga operativa.

El código detallado está disponible en GitHub. El código demuestra el uso de AWS CloudFormation y el AWS Cloud Development Kit (AWS CDK) para automatizar el proceso de creación de cuadernos de SageMaker y otros recursos requeridos.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Ciencias de la Computación

Cómo la inteligencia artificial protege (y ataca) tu bandeja de entrada.

Las empresas, como Google, están buscando formas en que la inteligencia artificial y el aprendizaje automático puedan...

Inteligencia Artificial

Los modelos Whisper para reconocimiento automático del habla ahora están disponibles en Amazon SageMaker JumpStart.

Hoy, nos complace anunciar que el modelo de base Whisper de OpenAI está disponible para los clientes que utilizan Ama...

Inteligencia Artificial

15+ Herramientas de IA para Desarrolladores (Diciembre 2023)

GitHub Copilot GitHub Copilot se destaca como un asistente de codificación impulsado por IA líder en el mercado. Dise...

Inteligencia Artificial

Robot se posiciona en el podio como director de orquesta en Seúl.

Un robot android creado por el Instituto de Tecnología Industrial de Corea del Sur recientemente dirigió la orquesta ...

Inteligencia Artificial

AWS y Accel lanzan ML Elevate 2023 para potenciar el ecosistema de startups de IA en India

En una emocionante colaboración, Amazon Web Services (AWS) y Accel han presentado “ML Elevate 2023”, un r...

Ciencia de Datos

Uniéndose a la lucha contra el sesgo en la atención médica

Leo Anthony Celi invita a la industria a ampliar su enfoque en la recolección y análisis de datos clínicos para todas...