Раскрашивание изображений с помощью Stable Diffusion с помощью Amazon SageMaker JumpStart

Раскрашивание изображений с помощью Stable Diffusion с помощью Amazon SageMaker JumpStart

В ноябре 2022 года мы объявило что клиенты AWS могут создавать изображения из текста с помощью Стабильная диффузия модели с использованием Amazon SageMaker JumpStart. Сегодня мы рады представить новую функцию, которая позволяет пользователям рисовать изображения с помощью моделей Stable Diffusion. Inpainting относится к процессу замены части изображения другим изображением на основе текстовой подсказки. Предоставляя исходное изображение, изображение-маску, обозначающее заменяемую часть, и текстовую подсказку, модель стабильной диффузии может создать новое изображение, заменяющее маскируемую область объектом, субъектом или средой, описанными в текстовой подсказке.

Вы можете использовать inpaint для восстановления испорченных изображений или создания новых изображений с новыми темами или стилями в определенных разделах. В области архитектурного дизайна окрашивание Stable Diffusion может применяться для восстановления незавершенных или поврежденных участков строительных чертежей, предоставляя точную информацию строительным бригадам. В случае клинической МРТ голова пациента должна быть зафиксирована, что может привести к неудовлетворительным результатам из-за артефакта обрезки, вызывающего потерю данных или снижение точности диагностики. Перерисовка изображения может эффективно помочь смягчить эти неоптимальные результаты.

В этом посте мы представляем исчерпывающее руководство по развертыванию и запуску вывода с использованием модели отрисовки Stable Diffusion двумя способами: через пользовательский интерфейс (UI) JumpStart в Студия Amazon SageMaker, а программно через API-интерфейсы JumpStart доступный в SDK для SageMaker Python.

Обзор решения

Следующие изображения являются примерами inpainting. Исходные изображения находятся слева, изображение маски — в центре, а закрашенное изображение, сгенерированное моделью, — справа. Для первого примера модели были предоставлены исходное изображение, изображение маски и текстовая подсказка «белый кот, голубые глаза, в свитере, лежит в парке», а также негативная подсказка «плохо нарисованные ноги. ” Для второго примера текстовая подсказка была такой: «Женщина-модель изящно демонстрирует повседневное длинное платье с сочетанием розовых и голубых оттенков».

Раскрашивайте изображения с помощью Stable Diffusion с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Запуск больших моделей, таких как Stable Diffusion, требует пользовательских сценариев логического вывода. Вы должны запустить сквозные тесты, чтобы убедиться, что скрипт, модель и нужный экземпляр работают вместе эффективно. JumpStart упрощает этот процесс, предоставляя готовые к использованию сценарии, которые были тщательно протестированы. Вы можете получить доступ к этим сценариям одним щелчком мыши через пользовательский интерфейс Studio или с помощью нескольких строк кода через API-интерфейсы JumpStart.

В следующих разделах вы узнаете, как развернуть модель и выполнить вывод с помощью пользовательского интерфейса Studio или API JumpStart.

Обратите внимание, что, используя эту модель, вы соглашаетесь с Лицензия CreativeML Open RAIL++-M.

Доступ к JumpStart через пользовательский интерфейс Studio

В этом разделе мы проиллюстрируем развертывание моделей JumpStart с помощью пользовательского интерфейса Studio. В сопроводительном видео демонстрируется поиск предварительно обученной модели отрисовки Stable Diffusion в JumpStart и ее развертывание. Страница модели содержит важные сведения о модели и ее использовании. Для выполнения логических выводов мы используем тип экземпляра ml.p3.2xlarge, который обеспечивает необходимое ускорение графического процессора для получения логических выводов с малой задержкой по доступной цене. После настройки экземпляра хостинга SageMaker выберите Развертывание. Конечная точка будет готова к обработке запросов на логические выводы примерно через 10 минут.

JumpStart предоставляет образец записной книжки, который может помочь сократить время, необходимое для выполнения логических выводов на только что созданной конечной точке. Чтобы получить доступ к записной книжке в Studio, выберите Открыть блокнот в Использовать конечную точку из Studio раздел страницы конечной точки модели.

Программное использование JumpStart с SageMaker SDK

Использование пользовательского интерфейса JumpStart позволяет интерактивно развертывать предварительно обученную модель всего несколькими щелчками мыши. Кроме того, вы можете использовать модели JumpStart программно, используя API, интегрированные в SageMaker Python SDK.

В этом разделе мы выбираем подходящую предварительно обученную модель в JumpStart, развертываем эту модель на конечной точке SageMaker и выполняем вывод на развернутой конечной точке, используя SDK SageMaker Python. Следующие примеры содержат фрагменты кода. Чтобы получить доступ к полному коду со всеми шагами, включенными в эту демонстрацию, обратитесь к Введение в редактирование изображений JumpStart — стабильное диффузионное рисование пример блокнота.

Разверните предварительно обученную модель

SageMaker использует контейнеры Docker для различных задач сборки и выполнения. JumpStart использует Контейнеры глубокого обучения SageMaker (DLC), которые зависят от платформы. Сначала мы получаем любые дополнительные пакеты, а также сценарии для обучения и логического вывода для выбранной задачи. Затем артефакты предварительно обученной модели извлекаются отдельно с помощью model_uris, что обеспечивает гибкость платформы. Это позволяет использовать несколько предварительно обученных моделей с одним скриптом вывода. Следующий код иллюстрирует этот процесс:

model_id, model_version = "model-inpainting-stabilityai-stable-diffusion-2-inpainting-fp16", "*"
# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve( region=None, framework=None, # automatically inferred from model_id image_scope="inference", model_id=model_id, model_version=model_version, instance_type=inference_instance_type,
)
# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference") base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

Затем мы предоставляем эти ресурсы Модель SageMaker экземпляр и разверните конечную точку:

# Create the SageMaker model instance
# Create the SageMaker model instance
model = Model( image_uri=deploy_image_uri, source_dir=deploy_source_uri, model_data=base_model_uri, entry_point="inference.py", # entry point file in source_dir and present in deploy_source_uri role=aws_role, predictor_cls=Predictor, name=endpoint_name,
) # deploy the Model - note that we need to pass the Predictor class when we deploy the model through the Model class,
# in order to run inference through the SageMaker API
base_model_predictor = model.deploy( initial_instance_count=1, instance_type=inference_instance_type, predictor_cls=Predictor, endpoint_name=endpoint_name,
)

После развертывания модели мы можем получать от нее прогнозы в реальном времени!

вход

Входными данными являются базовое изображение, изображение маски и подсказка, описывающая субъект, объект или среду, которые необходимо заменить в замаскированной части. Создание идеального изображения маски для эффектов рисования включает в себя несколько передовых методов. Начните с конкретной подсказки и не стесняйтесь экспериментировать с различными настройками Stable Diffusion для достижения желаемых результатов. Используйте изображение маски, которое очень похоже на изображение, которое вы хотите нарисовать. Этот подход помогает алгоритму рисования заполнить недостающие участки изображения, что приводит к более естественному виду. Высококачественные изображения обычно дают лучшие результаты, поэтому убедитесь, что базовое изображение и изображение маски имеют хорошее качество и похожи друг на друга. Кроме того, выберите большое и гладкое изображение маски, чтобы сохранить детали и свести к минимуму артефакты.

Конечная точка принимает базовое изображение и маску как необработанные значения RGB или изображение в кодировке base64. Обработчик вывода декодирует изображение на основе content_type:

  • Что касается content_type = “application/json”, входная полезная нагрузка должна быть словарем JSON с необработанными значениями RGB, текстовой подсказкой и другими необязательными параметрами.
  • Что касается content_type = “application/json;jpeg”, входная полезная нагрузка должна быть словарем JSON с изображением в кодировке base64, текстовой подсказкой и другими необязательными параметрами.

Результат

Конечная точка может генерировать два типа выходных данных: RGB-изображение в кодировке Base64 или словарь JSON сгенерированных изображений. Вы можете указать, какой формат вывода вы хотите, установив accept заголовок в "application/json" or "application/json;jpeg" для изображения JPEG или base64 соответственно.

  • Что касается accept = “application/json”, конечная точка возвращает словарь JSON со значениями RGB для изображения.
  • Что касается accept = “application/json;jpeg”, конечная точка возвращает словарь JSON с изображением JPEG в виде байтов, закодированных с помощью кодировки base64.b64.

Обратите внимание, что отправка или получение полезной нагрузки с необработанными значениями RGB может превысить ограничения по умолчанию для входной полезной нагрузки и размера ответа. Поэтому мы рекомендуем использовать изображение в кодировке base64, установив content_type = “application/json;jpeg” и принять = «приложение/json;jpeg».

Следующий код является примером запроса на вывод:

content_type = "application/json;jpeg" with open(input_img_file_name, "rb") as f: input_img_image_bytes = f.read()
with open(input_img_mask_file_name, "rb") as f: input_img_mask_image_bytes = f.read() encoded_input_image = base64.b64encode(bytearray(input_img_image_bytes)).decode()
encoded_mask = base64.b64encode(bytearray(input_img_mask_image_bytes)).decode() payload = { "prompt": "a white cat, blue eyes, wearing a sweater, lying in park", "image": encoded_input_image, "mask_image": encoded_mask, "num_inference_steps": 50, "guidance_scale": 7.5, "seed": 0, "negative_prompt": "poorly drawn feet",
} accept = "application/json;jpeg" def query(model_predictor, payload, content_type, accept): """Query the model predictor.""" query_response = model_predictor.predict( payload, { "ContentType": content_type, "Accept": accept, }, ) return query_response query_response = query(model_predictor, json.dumps(payload).encode("utf-8"), content_type, accept)
generated_images = parse_response(query_response)

Поддерживаемые параметры

Модели отрисовки Stable Diffusion поддерживают множество параметров для генерации изображения:

  • изображение - Исходное изображение.
  • маска – Изображение, в котором затемненная часть остается неизменной во время создания изображения, а белая часть заменяется.
  • подсказка – Подсказка для руководства генерацией изображения. Это может быть строка или список строк.
  • num_inference_steps (необязательно) – Количество шагов шумоподавления при генерации изображения. Чем больше шагов, тем выше качество изображения. Если указано, это должно быть положительное целое число. Обратите внимание, что большее количество шагов вывода приведет к увеличению времени отклика.
  • guide_scale (необязательно) – Более высокая шкала навигации приводит к тому, что изображение больше соответствует подсказке за счет качества изображения. Если указано, это должно быть число с плавающей запятой. guidance_scale<=1 игнорируется
  • отрицательная_подсказка (необязательно) – Это направляет генерацию изображения в соответствии с этой подсказкой. Если он указан, он должен быть строкой или списком строк и использоваться с guidance_scale. Если guidance_scale отключен, это также отключено. Более того, если подсказка представляет собой список строк, то negative_prompt также должен быть списком строк.
  • семена (по желанию) – Это исправляет рандомизированное состояние для воспроизводимости. Если указано, оно должно быть целым числом. Всякий раз, когда вы используете одно и то же приглашение с одним и тем же начальным числом, результирующее изображение всегда будет одним и тем же.
  • размер партии (необязательно) – Количество изображений, создаваемых за один прямой проход. При использовании экземпляра меньшего размера или создании большого количества изображений уменьшите batch_size быть небольшим числом (1-2). Количество изображений = количество подсказок*num_images_per_prompt.

Ограничения и предубеждения

Несмотря на то, что Stable Diffusion обладает впечатляющей производительностью при отрисовке, он имеет ряд ограничений и предубеждений. К ним относятся, но не ограничиваются:

  • Модель может не генерировать точные лица или конечности, поскольку обучающие данные не содержат достаточного количества изображений с этими функциями.
  • Модель прошла обучение на Набор данных ЛАИОН-5Б, который содержит материалы для взрослых и может быть непригоден для использования в продукте без дополнительных соображений.
  • Модель может плохо работать с языками, отличными от английского, поскольку модель была обучена тексту на английском языке.
  • Модель не может генерировать хороший текст на изображениях.
  • Стабильная диффузия обычно лучше всего работает с изображениями с более низким разрешением, например 256 × 256 или 512 × 512 пикселей. При работе с изображениями с высоким разрешением (768×768 или выше) этот метод может с трудом поддерживать желаемый уровень качества и детализации.
  • Хотя использование начального значения может помочь контролировать воспроизводимость, отрисовка Stable Diffusion может по-прежнему давать различные результаты с небольшими изменениями ввода или параметров. Это может затруднить точную настройку вывода для конкретных требований.
  • У этого метода могут возникнуть проблемы с созданием сложных текстур и узоров, особенно когда они охватывают большие области изображения или необходимы для поддержания общей согласованности и качества окрашенной области.

Для получения дополнительной информации об ограничениях и предвзятости см. Карта модели Stable Diffusion Inpainting.

Решение Inpainting с маской, созданной с помощью подсказки

CLIPSeq — это передовой метод глубокого обучения, который использует возможности предварительно обученных моделей CLIP (предварительное обучение контрастному языку и изображению) для создания масок из входных изображений. Этот подход обеспечивает эффективный способ создания масок для таких задач, как сегментация изображения, рисование и манипулирование. CLIPSeq использует CLIP для создания текстового описания входного изображения. Затем текстовое описание используется для создания маски, которая идентифицирует пиксели изображения, соответствующие текстовому описанию. Затем маску можно использовать для выделения соответствующих частей изображения для дальнейшей обработки.

CLIPSeq имеет несколько преимуществ по сравнению с другими методами создания масок из входных изображений. Во-первых, это более эффективный метод, поскольку он не требует обработки изображения отдельным алгоритмом сегментации изображения. Во-вторых, он более точен, поскольку может генерировать маски, более точно соответствующие текстовому описанию изображения. В-третьих, он более универсален, потому что вы можете использовать его для создания масок из самых разных изображений.

Однако у CLIPSeq есть и некоторые недостатки. Во-первых, метод может иметь ограничения с точки зрения предмета, поскольку он основан на предварительно обученных моделях CLIP, которые могут не охватывать определенные области или области знаний. Во-вторых, это может быть чувствительный метод, потому что он подвержен ошибкам в текстовом описании изображения.

Для получения дополнительной информации обратитесь к Виртуальный стиль одежды с помощью генеративного искусственного интеллекта с использованием Amazon SageMaker.

Убирать

После завершения работы с блокнотом обязательно удалите все ресурсы, созданные в процессе, чтобы остановить выставление счетов. Код для очистки конечной точки доступен в связанном ноутбук.

Заключение

В этом посте мы показали, как развернуть предварительно обученную модель отрисовки Stable Diffusion с помощью JumpStart. Мы показали фрагменты кода в этом посте — полный код со всеми шагами в этой демонстрации доступен в Введение в JumpStart — повышение качества изображения с помощью подсказки пример блокнота. Попробуйте решение самостоятельно и пришлите нам свои комментарии.

Чтобы узнать больше о модели и о том, как она работает, см. следующие ресурсы:

Чтобы узнать больше о JumpStart, ознакомьтесь со следующими сообщениями:


Об авторах

Раскрашивайте изображения с помощью Stable Diffusion с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Доктор Вивек Мадан — ученый-прикладник в команде Amazon SageMaker JumpStart. Он получил докторскую степень в Университете Иллинойса в Урбана-Шампейн и был постдокторантом в Технологическом институте Джорджии. Он является активным исследователем в области машинного обучения и разработки алгоритмов и публиковал статьи на конференциях EMNLP, ICLR, COLT, FOCS и SODA.

Раскрашивайте изображения с помощью Stable Diffusion с помощью Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Альфред Шен является старшим специалистом по AI/ML в AWS. Он работал в Силиконовой долине, занимая технические и управленческие должности в различных секторах, включая здравоохранение, финансы и высокие технологии. Он преданный делу прикладной исследователь AI/ML, специализирующийся на CV, NLP и мультимодальности. Его работа была представлена ​​в таких изданиях, как EMNLP, ICLR и Public Health.

Отметка времени:

Больше от Машинное обучение AWS