使用 Amazon SageMaker JumpStart 通过 Stable Diffusion 修复图像

使用 Amazon SageMaker JumpStart 通过 Stable Diffusion 修复图像

2022 年 XNUMX 月,我们 公布 AWS 客户可以从文本生成图像 稳定扩散 模型使用 亚马逊SageMaker JumpStart. 今天,我们很高兴推出一项新功能,使用户能够使用 Stable Diffusion 模型修复图像。 修复是指根据文本提示将图像的一部分替换为另一图像的过程。 通过提供原始图像、勾勒出要替换部分轮廓的蒙版图像和文本提示,Stable Diffusion 模型可以生成新图像,用文本提示中描述的对象、主题或环境替换蒙版区域。

您可以使用修复来恢复退化的图像或在某些部分创建具有新颖主题或风格的新图像。 在建筑设计领域,Stable Diffusion 修复可用于修复建筑蓝图的不完整或损坏区域,为施工人员提供精确信息。 在临床 MRI 成像的情况下,患者的头部必须受到约束,这可能会由于裁剪伪影导致数据丢失或诊断准确性降低而导致结果不佳。 图像修复可以有效地帮助减轻这些次优结果。

在这篇文章中,我们提供了有关使用稳定扩散修复模型以两种方法部署和运行推理的综合指南:通过 JumpStart 的用户界面 (UI) 亚马逊SageMaker Studio,并以编程方式通过 JumpStart API 可用的 SageMaker Python 开发工具包.

解决方案概述

以下图像是修复的示例。 左边是原始图像,中间是蒙版图像,右边是模型生成的修复图像。 对于第一个示例,为模型提供了原始图像、蒙版图像和文本提示“一只白猫,蓝眼睛,穿着毛衣,躺在公园里”,以及负面提示“画得不好的脚。 ” 对于第二个例子,文本提示是“一位女模特优雅地展示了一件混合了粉色和蓝色调的休闲长裙,”

使用 Amazon SageMaker JumpStart PlatoBlockchain 数据智能通过稳定扩散修复图像。垂直搜索。人工智能。

运行像 Stable Diffusion 这样的大型模型需要自定义推理脚本。 您必须运行端到端测试以确保脚本、模型和所需实例有效地协同工作。 JumpStart 通过提供已经过可靠测试的现成脚本简化了这个过程。 您可以通过 Studio UI 一键访问这些脚本,或者通过 JumpStart API.

以下部分将指导您使用 Studio UI 或 JumpStart API 部署模型和运行推理。

请注意,使用此模型即表示您同意 CreativeML Open RAIL++-M 许可证.

通过 Studio UI 访问 JumpStart

在本节中,我们将说明如何使用 Studio UI 部署 JumpStart 模型。 随附的视频演示了如何在 JumpStart 上找到预训练的稳定扩散修复模型并进行部署。 模型页面提供有关模型及其用法的基本详细信息。 为了执行推理,我们采用了 ml.p3.2xlarge 实例类型,它以可承受的价格提供低延迟推理所需的 GPU 加速。 配置 SageMaker 托管实例后,选择 部署. 端点将在大约 10 分钟内运行并准备好处理推理请求。

JumpStart 提供了一个示例笔记本,可以帮助加快在新创建的端点上运行推理所需的时间。 要在 Studio 中访问笔记本,请选择 打开笔记本 ,在 使用 Studio 中的端点 模型端点页面的部分。

通过 SageMaker SDK 以编程方式使用 JumpStart

利用 JumpStart UI,您只需单击几下即可以交互方式部署预训练模型。 或者,您可以使用 SageMaker Python SDK 中集成的 API 以编程方式使用 JumpStart 模型。

在本节中,我们在 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,
)

部署模型后,我们可以从中获取实时预测!

输入

输入是基本图像、蒙版图像和描述要在蒙版部分中替换的主题、对象或环境的提示。 为绘画效果创建完美的蒙版图像涉及多种最佳实践。 从特定提示开始,毫不犹豫地尝试各种 Stable Diffusion 设置以获得预期结果。 使用与您要修复的图像非常相似的蒙版图像。 这种方法有助于修复算法完成图像的缺失部分,从而产生更自然的外观。 高质量的图像通常会产生更好的效果,因此请确保您的基础图像和遮罩图像质量良好且彼此相似。 此外,选择大而平滑的蒙版图像以保留细节并最大程度地减少伪影。

端点接受基本图像和掩码作为原始 RGB 值或 base64 编码图像。 推理处理程序根据以下内容对图像进行解码 content_type:

  • 针对 content_type = “application/json”,输入有效负载必须是一个包含原始 RGB 值、文本提示和其他可选参数的 JSON 字典
  • 针对 content_type = “application/json;jpeg”,输入负载必须是带有 base64 编码图像、文本提示和其他可选参数的 JSON 字典

输出

端点可以生成两种类型的输出:Base64 编码的 RGB 图像或生成图像的 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)

支持的参数

稳定的扩散修复模型支持许多图像生成参数:

  • 图片 – 原始图像。
  • 面膜 – 图像生成过程中黑色部分保持不变,白色部分被替换的图像。
  • 提示 – 引导图像生成的提示。 它可以是一个字符串或一个字符串列表。
  • num_inference_steps(可选) – 图像生成过程中的去噪步骤数。 更多的步骤导致更高质量的图像。 如果指定,它必须是正整数。 请注意,更多的推理步骤将导致更长的响应时间。
  • guidance_scale(可选) – 更高的指导比例会导致图像与提示更密切相关,但会牺牲图像质量。 如果指定,它必须是一个浮点数。 guidance_scale<=1 被忽略。
  • negative_prompt(可选) – 这将根据此提示引导图像生成。 如果指定,它必须是一个字符串或一个字符串列表,并与 guidance_scale。 如果 guidance_scale 被禁用,这也被禁用。 此外,如果提示是字符串列表,则 negative_prompt 也必须是一个字符串列表。
  • 种子(可选) – 这修复了可重复性的随机状态。 如果指定,它必须是一个整数。 每当您对相同的种子使用相同的提示时,生成的图像将始终相同。
  • batch_size(可选) – 单次前向传递中生成的图像数量。 如果使用较小的实例或生成许多图像,请减少 batch_size 是一个小数字(1-2)。 图片数量=提示数量*num_images_per_prompt.

局限性和偏见

尽管稳定扩散在修复方面具有令人印象深刻的性能,但它也有一些局限性和偏见。 这些包括但不限于:

  • 该模型可能无法生成准确的面部或肢体,因为训练数据不包含具有这些特征的足够图像。
  • 该模型是在 LAION-5B 数据集,其中包含成人内容,未经进一步考虑可能不适合产品使用。
  • 该模型可能不适用于非英语语言,因为该模型是针对英语文本进行训练的。
  • 该模型无法在图像中生成良好的文本。
  • 稳定扩散修复通常最适用于分辨率较低的图像,例如 256×256 或 512×512 像素。 当处理高分辨率图像(768×768 或更高)时,该方法可能难以保持所需的质量和细节水平。
  • 尽管使用种子可以帮助控制再现性,但稳定扩散修复仍可能会通过对输入或参数进行轻微更改来产生不同的结果。 这可能会使针对特定要求微调输出变得具有挑战性。
  • 该方法可能难以生成复杂的纹理和图案,尤其是当它们跨越图像中的大面积区域或对于保持修复区域的整体连贯性和质量至关重要时。

有关限制和偏差的更多信息,请参阅 稳定扩散修复模型卡.

带有通过提示生成的掩码的修复解决方案

CLIPSeq 是一种先进的深度学习技术,它利用预训练的 CLIP(对比语言-图像预训练)模型的力量从输入图像生成掩码。 这种方法提供了一种为图像分割、修复和操作等任务创建掩码的有效方法。 CLIPSeq 使用 CLIP 生成输入图像的文本描述。 然后使用文本描述生成一个掩码,该掩码标识图像中与文本描述相关的像素。 然后可以使用掩码来隔离图像的相关部分以进行进一步处理。

CLIPSeq 与其他从输入图像生成掩码的方法相比有几个优势。 首先,它是一种更有效的方法,因为它不需要通过单独的图像分割算法来处理图像。 其次,它更准确,因为它可以生成与图像的文本描述更紧密对齐的蒙版。 第三,它更通用,因为您可以使用它从各种图像生成蒙版。

然而,CLIPSeq 也有一些缺点。 首先,该技术在主题方面可能有局限性,因为它依赖于可能不包含特定领域或专业领域的预训练 CLIP 模型。 其次,它可能是一种敏感的方法,因为它很容易在图像的文本描述中出现错误。

有关更多信息,请参阅 使用 Amazon SageMaker 的生成式 AI 虚拟时尚造型.

清理

完成运行笔记本后,请务必删除在此过程中创建的所有资源,以确保停止计费。 清理端点的代码在关联的 笔记本.

结论

在本文中,我们展示了如何使用 JumpStart 部署预训练的稳定扩散修复模型。 我们在这篇文章中展示了代码片段——包含此演示中所有步骤的完整代码可在 JumpStart 简介 – 根据提示提高图像质量 示例笔记本。 自己尝试解决方案并将您的意见发送给我们。

要了解有关该模型及其工作原理的更多信息,请参阅以下资源:

要了解有关 JumpStart 的更多信息,请查看以下帖子:


作者简介

使用 Amazon SageMaker JumpStart PlatoBlockchain 数据智能通过稳定扩散修复图像。垂直搜索。人工智能。Vivek Madan 博士 是 Amazon SageMaker JumpStart 团队的一名应用科学家。 他在伊利诺伊大学厄巴纳-香槟分校获得博士学位,并且是乔治亚理工学院的博士后研究员。 他是机器学习和算法设计方面的活跃研究员,并在 EMNLP、ICLR、COLT、FOCS 和 SODA 会议上发表过论文。

使用 Amazon SageMaker JumpStart PlatoBlockchain 数据智能通过稳定扩散修复图像。垂直搜索。人工智能。阿尔弗雷德沉 是 AWS 的高级 AI/ML 专家。 他一直在硅谷工作,在医疗保健、金融和高科技等多个领域担任技术和管理职位。 他是一位专注的应用 AI/ML 研究员,专注于 CV、NLP 和多模态。 他的工作已在 EMNLP、ICLR 和 Public Health 等出版物中发表。

时间戳记:

更多来自 AWS机器学习