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.
- Los ajustes de privacidad de Zoom avivan el temor de que sus llamadas se utilicen para entrenar a la IA
- Se ha confirmado que LK-99 no es un superconductor a temperatura ambiente
- Explorando la interacción entre la Inteligencia Artificial y la Inteligencia Humana
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:
- Primero, solicitamos una escena general (por ejemplo, “parque con árboles al fondo”) y colocamos aleatoriamente el objeto en ese fondo.
- 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”).
- 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:
- Los modelos Segment Anything Model (SAM) y Stable Diffusion Inpainting se alojan en puntos finales de SageMaker.
- Se utiliza una indicación de fondo para crear una imagen de fondo generada utilizando el modelo Stable Diffusion.
- 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.
- 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.
- 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.
- 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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- AI Time Journal presenta el eBook Tendencias de IA en SEO 2023 Ideas de expertos sobre el futuro del SEO.
- El salto de KPMG hacia el futuro de la IA generativa
- De Experimentos 🧪 a Despliegue 🚀 MLflow 101 | Parte 01
- Langchain 101 Extraer datos estructurados (JSON)
- VoAGI Noticias, 9 de agosto Olvídate de ChatGPT, este nuevo asistente de IA está a años luz • 7 pasos para dominar las técnicas de limpieza y preprocesamiento de datos
- Conoce a MetaGPT El marco de inteligencia artificial de código abierto que transforma a los GPT en ingenieros, arquitectos y gerentes.
- Ajusta ChatGPT a tus necesidades con instrucciones personalizadas