Генеративный ИИ (GenAI) может революционизировать креативную рекламу. Теперь вы можете создавать широкий спектр новых изображений, таких как снимки продуктов, путем переобучения модели GenAI и ввода в модель нескольких входных данных, таких как текстовые подсказки (предложения, описывающие сцену и объекты, которые должны быть созданы моделью). Этот метод показал многообещающие результаты, начиная с 2022 года, когда появился новый класс моделей фундамента (FM), называемых моделями скрытой диффузии, такими как Стабильная диффузия, Середина путии Далл-Э-2. Однако для использования этих моделей в производстве процесс генерации требует постоянной доработки для получения согласованных результатов. Часто это означает создание большого количества образцов изображений продукта и умную оперативную разработку, что усложняет задачу в масштабе.
В этом посте мы рассмотрим, как можно использовать эту преобразующую технологию для создания увлекательной и инновационной рекламы в масштабе, особенно при работе с большими каталогами изображений. Используя мощь GenAI, в частности, технику рисования, мы можем легко создавать фоны изображений, что приводит к визуально ошеломляющему и привлекательному контенту и уменьшению нежелательных артефактов изображения (называемых модельные галлюцинации). Мы также углубимся в практическую реализацию этого метода, используя конечные точки Amazon SageMaker, которые позволяют эффективно развертывать модели GenAI, управляющие этим творческим процессом.
Мы используем inpainting в качестве основного метода создания изображений на основе GenAI, потому что он предлагает мощное решение для замены отсутствующих элементов в изображениях. Однако это создает определенные трудности. Например, точный контроль над позиционированием объектов на изображении может быть ограничен, что приводит к потенциальным проблемам, таким как артефакты изображения, плавающие объекты или несмешанные границы, как показано на следующих примерах изображений.
Чтобы преодолеть это, мы предлагаем в этом посте найти баланс между творческой свободой и эффективным производством, создавая множество реалистичных изображений с минимальным контролем. Чтобы масштабировать предлагаемое решение для производства и упростить развертывание моделей ИИ в среде AWS, мы демонстрируем его с использованием конечных точек SageMaker.
В частности, мы предлагаем разделить процесс рисования на набор слоев, каждый из которых может иметь свой набор подсказок. Процесс можно обобщить в виде следующих шагов:
- Во-первых, мы запрашиваем общую сцену (например, «парк с деревьями сзади») и случайным образом размещаем объект на этом фоне.
- Затем мы добавляем слой в нижней средней части объекта, подсказывая, где находится объект (например, «пикник на траве или деревянный стол»).
- Наконец, мы добавляем слой, аналогичный фоновому слою, в верхней средней части объекта, используя ту же подсказку, что и для фона.
Преимуществом этого процесса является повышение реалистичности объекта, поскольку он воспринимается с лучшим масштабированием и позиционированием относительно фоновой среды, что соответствует человеческим ожиданиям. На следующем рисунке показаны этапы предлагаемого решения.
Обзор решения
Для решения поставленных задач рассматривается следующий поток данных:
- Сегментная модель Anything (SAM) и Стабильная диффузионная окраска модели размещаются в конечных точках SageMaker.
- Фоновая подсказка используется для создания сгенерированного фонового изображения с использованием модели стабильной диффузии.
- Изображение базового продукта передается через SAM для создания маски. Обратная маска называется антимаской.
- Сгенерированное фоновое изображение, маска, а также подсказки переднего плана и отрицательные подсказки используются в качестве входных данных для модели Stable Diffusion Inpainting для создания сгенерированного промежуточного фонового изображения.
- Точно так же сгенерированное фоновое изображение, антимаска, а также подсказки переднего плана и отрицательные подсказки используются в качестве входных данных для модели Stable Diffusion Inpainting для создания сгенерированного промежуточного изображения переднего плана.
- Окончательный результат сгенерированного изображения продукта получается путем объединения сгенерированного промежуточного изображения переднего плана и сгенерированного промежуточного фонового изображения.
Предпосылки
Мы разработали шаблон AWS CloudFormation, который будет создавать блокноты SageMaker, используемые для развертывания конечных точек и выполнения логических выводов.
Вам понадобится учетная запись AWS с ролями AWS Identity and Access Management (IAM), которая предоставляет доступ к следующему:
- AWS CloudFormation
- SageMaker
- Хотя конечные точки SageMaker предоставляют экземпляры для запуска моделей машинного обучения, для выполнения тяжелых рабочих нагрузок, таких как генеративные модели ИИ, мы используем конечные точки SageMaker с поддержкой графического процессора. Дополнительную информацию о ценах см. в разделе Цены на Amazon SageMaker.
- Мы используем инстанс с поддержкой NVIDIA A10G.
ml.g5.2xlarge
для размещения моделей.
- Amazon Simple Storage Service (Amazon S3)
Для получения более подробной информации ознакомьтесь с Репозиторий GitHub и шаблон CloudFormation.
Маскируйте область интереса продукта
В общем случае нам нужно предоставить изображение объекта, который мы хотим разместить, и маску, очерчивающую контур объекта. Это можно сделать с помощью таких инструментов, как Amazon SageMaker Ground Truth. В качестве альтернативы мы можем автоматически сегментировать объект с помощью инструментов ИИ, таких как Segment Anything Models (SAM), предполагая, что объект находится в центре изображения.
Используйте SAM для создания маски
С помощью SAM, передовой технологии генеративного искусственного интеллекта, мы можем без особых усилий создавать высококачественные маски для различных объектов на изображениях. SAM использует модели глубокого обучения, обученные на обширных наборах данных, для точной идентификации и сегментации интересующих объектов, предоставления точных границ и масок на уровне пикселей. Эта революционная технология революционизирует рабочие процессы обработки изображений, автоматизируя трудоемкую и трудоемкую задачу ручного создания масок. С помощью SAM предприятия и частные лица теперь могут быстро создавать маски для распознавания объектов, редактирования изображений, задач компьютерного зрения и многого другого, открывая мир возможностей для визуального анализа и манипулирования.
Разместите модель SAM на конечной точке SageMaker.
Мы используем блокнот 1_HostGenAIModels.ipynb
для создания конечных точек SageMaker и размещения модели SAM.
Мы используем код вывода в inference_sam.py
и упаковать это в code.tar.gz file
, который мы используем для создания конечной точки SageMaker. Код загружает модель SAM, размещает ее на конечной точке и предоставляет точку входа для выполнения вывода и создания выходных данных:
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)
Вызов модели SAM и создание маски
Следующий код является частью 2_GenerateInPaintingImages.ipynb
блокнот, который используется для запуска конечных точек и получения результатов:
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))
# save the mask image using PIL Image
mask_image.save('images/speaker_mask.png')
На следующем рисунке показана результирующая маска, полученная из изображения продукта.
Используйте рисование для создания сгенерированного изображения
Объединив возможности рисования с маской, созданной SAM, и подсказкой пользователя, мы можем создавать замечательные сгенерированные изображения. Inpainting использует передовые методы генеративного искусственного интеллекта для интеллектуального заполнения отсутствующих или маскированных областей изображения, плавно смешивая их с окружающим содержимым. Используя сгенерированную SAM маску в качестве руководства и подсказку пользователя в качестве творческого входа, алгоритмы рисования могут генерировать визуально связный и контекстуально соответствующий контент, что приводит к потрясающим и персонализированным изображениям. Это слияние технологий открывает бесконечные творческие возможности, позволяя пользователям превращать свои видения в яркие, увлекательные визуальные повествования.
Разместите модель Stable Diffusion Inpainting на конечной точке SageMaker.
Аналогично 2.1 используем блокнот 1_HostGenAIModels.ipynb
для создания конечных точек SageMaker и размещения модели Stable Diffusion Inpainting.
Мы используем код вывода в inference_inpainting.py
и упаковать это в code.tar.gz
файл, который мы используем для создания конечной точки SageMaker. Код загружает модель Stable Diffusion Inpainting, размещает ее на конечной точке и предоставляет точку входа для выполнения вывода и создания выходных данных:
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)
Вызовите модель Stable Diffusion Inpainting и создайте новое изображение.
Аналогично шагу вызова модели SAM блокнот 2_GenerateInPaintingImages.ipynb
используется для запуска вывода на конечных точках и получения результатов:
raw_image = Image.open("images/speaker.png").convert("RGB")
mask_image = Image.open('images/speaker_mask.png').convert('RGB')
prompt_fr = "table and chair with books"
prompt_bg = "window and couch, table"
negative_prompt = "longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, letters"
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))
# save the generated image using PIL Image
post_image.save('images/speaker_generated.png')
На следующем рисунке показаны уточненная маска, сгенерированный фон, сгенерированное изображение продукта и изображение после обработки.
Сгенерированное изображение продукта использует следующие подсказки:
- Генерация фона – «стул, кушетка, окно, в помещении»
- Раскрашивание – «кроме книг»
Очистить
В этом посте мы используем две конечные точки SageMaker с поддержкой графического процессора, что составляет большую часть стоимости. Эти конечные точки должны быть отключены, чтобы избежать дополнительных затрат, когда конечные точки не используются. Мы предоставили блокнот, 3_CleanUp.ipynb
, что может помочь в очистке конечных точек. Мы также используем блокнот SageMaker для размещения моделей и выполнения логических выводов. Поэтому рекомендуется останавливать экземпляр записной книжки, если он не используется.
Заключение
Генеративные модели ИИ, как правило, представляют собой крупномасштабные модели машинного обучения, для эффективной работы которых требуются определенные ресурсы. В этом посте мы продемонстрировали на примере рекламы, как конечные точки SageMaker предлагают масштабируемую и управляемую среду для размещения генеративных моделей ИИ, таких как базовая модель преобразования текста в изображение Stable Diffusion. Мы продемонстрировали, как две модели могут быть размещены и запущены по мере необходимости, а несколько моделей также могут быть размещены с одной конечной точки. Это устраняет сложности, связанные с предоставлением инфраструктуры, масштабируемостью и мониторингом, позволяя организациям сосредоточиться исключительно на развертывании своих моделей и предоставлении прогнозов для решения своих бизнес-задач. С конечными точками SageMaker организации могут эффективно развертывать несколько моделей и управлять ими в единой инфраструктуре, добиваясь оптимального использования ресурсов и снижая эксплуатационные расходы.
Подробный код доступен на Гитхаб. Код демонстрирует использование AWS CloudFormation и AWS Cloud Development Kit (AWS CDK) для автоматизации процесса создания блокнотов SageMaker и других необходимых ресурсов.
Об авторах
Фабиан Бенитес-Кирос является специалистом по данным IoT Edge в AWS Professional Services. Он имеет докторскую степень в области компьютерного зрения и распознавания образов Университета штата Огайо. Fabian помогает клиентам запускать свои модели машинного обучения с малой задержкой на устройствах IoT и в облаке в различных отраслях.
Ромил Шах является старшим специалистом по данным в AWS Professional Services. Ромил имеет более чем 6-летний опыт работы в отрасли компьютерного зрения, машинного обучения и периферийных устройств IoT. Он помогает клиентам оптимизировать и развертывать их модели машинного обучения для периферийных устройств и в облаке. Он работает с клиентами над созданием стратегий оптимизации и развертывания базовых моделей.
Хань Мэн является старшим менеджером по науке о данных и машинному обучению в AWS Professional Services в Сан-Диего, Калифорния. Он имеет докторскую степень в области инженерии Северо-Западного университета и имеет многолетний опыт работы консультантом по вопросам управления, консультируя клиентов в области производства, финансовых услуг и энергетики. Сегодня он увлеченно работает с ключевыми клиентами из различных отраслевых вертикалей, разрабатывая и внедряя решения машинного обучения и GenAI на AWS.