Inpaint зображення за допомогою Stable Diffusion за допомогою Amazon SageMaker JumpStart

Inpaint зображення за допомогою Stable Diffusion за допомогою Amazon SageMaker JumpStart

У листопаді 2022 року ми оголошений за допомогою якого клієнти AWS можуть створювати зображення з тексту Стабільна дифузія використання моделей Amazon SageMaker JumpStart. Сьогодні ми раді представити нову функцію, яка дозволяє користувачам малювати зображення за допомогою моделей стабільної дифузії. Inpainting – це процес заміни частини зображення іншим зображенням на основі текстової підказки. Надаючи оригінальне зображення, зображення маски, яке окреслює частину, яку потрібно замінити, і текстову підказку, модель Stable Diffusion може створювати нове зображення, яке замінює замасковану область об’єктом, предметом або середовищем, описаними в текстовій підказці.

Ви можете використовувати inpainting для відновлення пошкоджених зображень або створення нових зображень із новими сюжетами чи стилями в певних розділах. У сфері архітектурного дизайну фарбування Stable Diffusion inpainting можна застосовувати для ремонту неповних або пошкоджених ділянок креслень будівель, надаючи точну інформацію для будівельних бригад. У разі клінічного МРТ-зображення голова пацієнта має бути утримана, що може призвести до невідповідних результатів через артефакт кадрування, що спричиняє втрату даних або зниження діагностичної точності. Нанесення зображень може ефективно допомогти пом’якшити ці неоптимальні результати.

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

Огляд рішення

Наступні зображення є прикладами живопису. Оригінальні зображення розташовані ліворуч, зображення маски — у центрі, а намальоване зображення, створене моделлю, — праворуч. Для першого прикладу моделі було надано оригінальне зображення, зображення маски та текстову підказку «білий кіт, блакитні очі, одягнений у светр, лежить у парку», а також негативну підказку «погано намальовані ноги». » Для другого прикладу текстова підказка була такою: «Жінка-модель витончено демонструє повсякденну довгу сукню з поєднанням рожевих і блакитних відтінків».

Inpaint зображення за допомогою Stable Diffusion за допомогою Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

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

Наступні розділи допоможуть вам розгорнути модель і запустити висновок за допомогою інтерфейсу користувача Studio або API JumpStart.

Зауважте, що використовуючи цю модель, ви погоджуєтеся з Ліцензія CreativeML Open RAIL++-M.

Отримайте доступ до JumpStart через інтерфейс користувача Studio

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

JumpStart надає зразок блокнота, який може допомогти пришвидшити час, потрібний для запуску висновків на щойно створеній кінцевій точці. Щоб отримати доступ до блокнота в Studio, виберіть Відкрийте Блокнот в Використовуйте Endpoint із Studio розділ сторінки кінцевої точки моделі.

Використовуйте JumpStart програмно з SageMaker SDK

Використання JumpStart UI дає змогу розгортати попередньо навчену модель в інтерактивному режимі лише за кілька клацань. Крім того, ви можете використовувати моделі JumpStart програмно за допомогою API, інтегрованих у SageMaker Python SDK.

У цьому розділі ми вибираємо відповідну попередньо навчену модель у JumpStart, розгортаємо цю модель на кінцевій точці SageMaker і виконуємо висновки щодо розгорнутої кінцевої точки, використовуючи SageMaker Python SDK. Наступні приклади містять фрагменти коду. Щоб отримати доступ до повного коду з усіма кроками, включеними в цю демонстрацію, зверніться до Вступ до редагування зображень 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,
)

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

вхід

Вхідними даними є базове зображення, зображення маски та підказка, що описує суб’єкт, об’єкт або середовище, які потрібно замінити в замаскованій частині. Створення ідеального зображення маски для ефектів під час малювання передбачає кілька найкращих практик. Почніть із конкретної підказки та не соромтеся експериментувати з різними налаштуваннями стабільної дифузії, щоб досягти бажаних результатів. Використовуйте зображення маски, яке дуже нагадує зображення, яке ви хочете намалювати. Цей підхід допомагає алгоритму inpainting завершити відсутні ділянки зображення, що призводить до більш природного вигляду. Високоякісні зображення, як правило, дають кращі результати, тому переконайтеся, що зображення основи та маски мають гарну якість і схожі одне на одне. Крім того, вибирайте велике та гладке зображення маски, щоб зберегти деталі та мінімізувати артефакти.

Кінцева точка приймає базове зображення та маску як необроблені значення 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” і accept = “application/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 inpainting підтримують багато параметрів для створення зображень:

  • зображення – Оригінальне зображення.
  • маска – Зображення, де затемнена частина залишається незмінною під час створення зображення, а біла частина замінюється.
  • підказка – Підказка для створення зображення. Це може бути рядок або список рядків.
  • num_inference_steps (необов'язково) – Кількість кроків усунення шумів під час створення зображення. Більше кроків веде до вищої якості зображення. Якщо вказано, воно має бути додатним цілим числом. Зауважте, що більше кроків висновку призведе до довшого часу відповіді.
  • guidance_scale (необов'язковий) – Вища шкала вказівок призводить до того, що зображення більше пов’язане з підказкою, за рахунок погіршення якості зображення. Якщо вказано, це має бути float. guidance_scale<=1 ігнорується.
  • negative_prompt (необов'язковий) – Це спрямовує генерацію зображення проти цієї підказки. Якщо вказано, це має бути рядок або список рядків і використовуватися з guidance_scale. Якщо guidance_scale вимкнено, це також вимкнено. Крім того, якщо підказка є списком рядків, то negative_prompt також має бути список рядків.
  • насіння (необов'язково) – Це фіксує рандомізований стан для відтворюваності. Якщо вказано, воно має бути цілим числом. Щоразу, коли ви використовуєте те саме підказку з тим самим початковим кодом, кінцеве зображення завжди буде однаковим.
  • batch_size (необов'язковий) – Кількість зображень для створення за один прохід вперед. Якщо ви використовуєте менший екземпляр або генеруєте багато зображень, зменшіть batch_size бути невеликим числом (1–2). Кількість зображень = кількість підказок*num_images_per_prompt.

Обмеження та упередження

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

  • Модель може не генерувати точні обличчя чи кінцівки, оскільки навчальні дані не містять достатньо зображень із цими функціями.
  • Модель проходила навчання на Набір даних LAION-5B, який має вміст для дорослих і може бути непридатним для використання в продукті без подальших розглядів.
  • Модель може погано працювати з неанглійськими мовами, оскільки модель навчена на тексті англійською мовою.
  • Модель не може створити якісний текст у зображеннях.
  • Стабільне дифузійне малювання зазвичай найкраще працює із зображеннями нижчої роздільної здатності, наприклад 256×256 або 512×512 пікселів. Під час роботи із зображеннями високої роздільної здатності (768 × 768 або вище) метод може важко підтримувати бажаний рівень якості та деталізації.
  • Незважаючи на те, що використання вихідного коду може допомогти контролювати відтворюваність, фарбування стабільної дифузії все одно може давати різноманітні результати з незначними змінами вхідних даних або параметрів. Через це може бути складно точно налаштувати вивід для конкретних вимог.
  • Цей метод може мати проблеми зі створенням складних текстур і візерунків, особливо коли вони охоплюють великі області зображення або є важливими для підтримки загальної узгодженості та якості намальованої області.

Для отримання додаткової інформації про обмеження та упередження зверніться до Картка моделі Stable Diffusion Inpainting.

Розчин Inpainting із маскою, згенерованою за допомогою підказки

CLIPSeq — це передова техніка глибокого навчання, яка використовує потужність попередньо навчених моделей CLIP (Contrastive Language-Image Pretraining) для створення масок із вхідних зображень. Цей підхід забезпечує ефективний спосіб створення масок для таких завдань, як сегментація зображення, малювання та маніпуляції. CLIPSeq використовує CLIP для створення текстового опису вхідного зображення. Потім текстовий опис використовується для створення маски, яка ідентифікує пікселі зображення, які мають відношення до текстового опису. Потім маску можна використовувати для виділення відповідних частин зображення для подальшої обробки.

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

Однак CLIPSeq також має деякі недоліки. По-перше, метод може мати обмеження щодо предмета, оскільки він спирається на попередньо підготовлені моделі CLIP, які можуть не охоплювати конкретні домени чи сфери знань. По-друге, це може бути чутливим методом, оскільки він чутливий до помилок у текстовому описі зображення.

Для отримання додаткової інформації зверніться до Віртуальний модний стиль із генеративним ШІ за допомогою Amazon SageMaker.

Прибирати

Після того, як ви завершите роботу блокнота, обов’язково видаліть усі ресурси, створені в процесі, щоб переконатися, що виставлення рахунків зупинено. Код для очищення кінцевої точки доступний у асоційованому ноутбук.

Висновок

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

Щоб дізнатися більше про модель і як вона працює, перегляньте такі ресурси:

Щоб дізнатися більше про JumpStart, перегляньте такі публікації:


Про авторів

Inpaint зображення за допомогою Stable Diffusion за допомогою Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Доктор Вівек Мадан є прикладним науковцем у команді Amazon SageMaker JumpStart. Він отримав ступінь доктора філософії в Університеті Іллінойсу в Урбана-Шампейн і був науковим співробітником у технічному університеті Джорджії. Він є активним дослідником машинного навчання та розробки алгоритмів і публікував статті на конференціях EMNLP, ICLR, COLT, FOCS і SODA.

Inpaint зображення за допомогою Stable Diffusion за допомогою Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Альфред Шен є старшим спеціалістом зі штучного інтелекту та ML в AWS. Він працював у Кремнієвій долині, займаючи технічні та керівні посади в різних секторах, включаючи охорону здоров’я, фінанси та високі технології. Він є відданим прикладним дослідником AI/ML, зосередженим на CV, NLP та мультимодальності. Його роботи були представлені в таких публікаціях, як EMNLP, ICLR та Public Health.

Часова мітка:

Більше від AWS Машинне навчання