Amazon SageMaker 如何使用 Grounded-SAM
如何基于 SageMaker Notebook 快速搭建托管的 AI 作画可视化环境.
1. 方案新增功能:ControlNet 与 Image browser 插件支持;
2. 在电商/广告行业内,基于本方案新版本搭载最新视觉工具 Grounded-SAM,进行可控文图生成,加速营销素材产出;
3. 本方案的常见问题与解答。
推荐您将方案部署在美东 us-east-1 区域,并根据您的需求选择 ml.g4 或 ml.g5 系列实例类型
注册免费试用亚马逊云科技(AWS)云服务链接: https://aws.amazon.com/cn/free/
第一部分 方案新增功能
1 扩展与插件
1.1 ControlNet
ControlNet 是基于 Stable Diffusion WebUI 推出的一款插件,它为文生图功能引入了新的控制方式,可以额外控制人物的姿势、景深、线稿上色等等,可以更稳定的控制输出画面。ControlNet 把每一种不同类别的输入分别训练了模型,目前公开的有下面 8 个。分别是:canny,depth,hed,mlsd,normal,openpose,scribble,segmentation,模型描述见下表。
预处理名称 | 对应模型 | 模型描述 |
canny | control_canny | 边缘检测。通过从原始图片中提取线稿,来生成同样构图的画面。 |
depth | control_depth | 深度检测。捕捉画面深度,获取图片前后景关系。 |
hed | control_hed | 边缘检测但保留更多细节,适合重新着色和风格化。 |
mlsd | control_mlsd | 线段识别,识别人物功能极差,非常适合建筑。 |
normal_map | control_normal | 根据图片生成法线贴图,非常适合 CG 建模师。 |
openpose | control_openpose | 提取人物骨骼姿势。 |
openpose_hand | control_openpose | 提取人物+手部骨骼姿势。 |
scribble | control_openpose | 提取黑白稿。 |
fake_scribble | control_scribble | 涂鸦风格提取(很强大的模型)。 |
segmentation | control_seg | 语义分割。 |
本方案最近版本的 WebUIVersion – 0405 版本默认支持 ControlNet 插件(见本文第三部分常见问题 1),只需按照以下步骤进行模型的下载,即可即刻开始使用 ControlNet 插件。
- 在 CloudFormation-堆栈-输出中(参考上篇博客 4.3 第 12 步),找到 NotebookURL 链接,并打开 SageMaker Notebook Instance
- 打开一个终端,依次点击 File->New->Terminal
- 输入以下命令,开始下载,下载需要时间根据服务器的网络状况评估
- 等待下载完成,回到 Stable Diffusion Web UI 界面,在 ControlNet 中点击”刷新”按钮,即完成了模型下载与安装
1.2 Image Browser
新增支持 Image Browser 插件,您可以方便地查看生成的历史图片,如下图位置。
2 区域支持
新增美西 2 US West(Oregon)区域
第二部分 电商广告素材生成
1 背景介绍
在电商图像素材生成中,一个很常见的任务就是针对图像的某一部分进行定向修改。以往更多是需要设计师,使用专业图像编辑软件经过长时间作业才能实现。然而,根据现在的 AI 能力,我们可以更加简便地、高效地完成该任务。
在本文中,我们将为大家展示如何在生花妙笔的新版方案上使用 Stable Diffusion WebUI 和 Grounded-SAM 实现下图所示的端到端的图像编辑效果,包括 1. 无代码实现图像编辑 (手动蒙版),适合不熟悉代码开发的设计、创作人员,以及 2. 利用代码自动实现图像编辑 (自动蒙版),适合开发人员、对 AIGC 感兴趣的爱好者。
原图来自网络
2 方案模型使用
在本文中,我们会使用到下列几个模型。
2.1 Realistic Vision
Realistic Vision 是指生成逼真图像的模型。可以创建高度逼真不同年龄、种族、服装风格的人像,看起来就像照片一样。
2.2 ControlNet
ControlNet 是一个基于 Stable Diffusion 1.5 的预训练模型,在作者 Lvmin Zhang 的论文中,解释说 ControlNet 是通过输入条件来控制预先训练的大型扩散模型,能利用输入图片里的边缘特征、深度特征或人体姿势的骨架特征,配合文字 prompt,精确引导图像在 SD 1.5 里的生成结果。ControlNet 一共有 8 个模型,本文使用 Control_canny 模型。
2.3 Grounded-SAM
Grounded-Segment-Anything(Grounded-SAM)是基于 Grounding DINO(检测器)和 Segment Anything Model(分割器)构建的多模态图片生成工作流,是一个热门的开源项目。Grounded-SAM 可直接搭配 Stable Diffusion 进行可控文图生成。
2.3.1 Grounding DINO
Grounding DINO:零样本的图像检测模型,能够通过文本描述检测图中物体,生成矩形框。
2.3.2 Segment Anything Model(SAM)
Segment Anything Model(SAM):高质量的图像分割模型,可通过辅助点和辅助框作为提示,进行图像分割。其训练集包括超过 10 亿张蒙版,1100 万张图片,是迄今为止最大的用于图像分割的开源数据集。官方宣称, SAM 已经学会了“物体是什么”的一般性概念,因此可无需额外训练进行图片分割。
3 无代码实现图像编辑(手动蒙版)
实验步骤如下:
3.1 读者可以点击这里下载本实验所用图片。
3.2 在 CloudFormation-堆栈-输出中,找到 NotebookURL 链接,并打开 SageMaker Notebook Instance。
3.3 点击 Terminal,并依次输入下面的命令,下载 Realistic Vision V1.3 模型。
上面脚本中我们使用了 HuggingFace 上的 Realistic Vision V1.3 模型。您也可以从 CIVITAI 官网上直接下载 Realistic Vision V2.0,两者的最终效果十分接近。
3.4 在 WebUI 中选择我们刚下载的预训练模型 Realistic Vision V1.3 作为基础模型,并选择 img2img 中的 Inpaint 功能作为我们的任务类型。所谓 Inpaint,其实是图生图任务的一个子分类,也就是通过蒙版(Mask)进行图像补全,或者是局部图像生成。
3.5 上传原图并用画笔手动画出想要编辑区域的蒙版。
3.6 按照下图配置 Inpaint 相关参数。这边我们选择只对蒙版部分进行补全生成。
3.7 上传原始图片到 ControlNet 并按照下图配置相关的参数。ControlNet 功能可以帮助加强对最终图像生成的控制力。此处我们选择 Canny 预处理器(Preprocessor),并选择对应 Canny 模型(Model)用以生成描边图,降低“Canny lower threshold”可以帮助我们保留更多原图中边缘的细节,如图所示。ControlNet 模型的安装请参考 FAQ,Canny 等模型解释请参考 ControlNet 部分中的模型释义表。
3.8 参考以下模版输入提示词,并点击生成。
Prompt = an extremely beautiful dreamy white lace cotton dress with delicate see-through sleeves, extra detailes, (high detailed skin:1.2), 8k uhd, dslr, soft lighting, high quality, film grain, Fujifilm XT3, photorealistic
Negative Prompt = (deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime:1.4), text, close up, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck
3.9 等待生成之后我们可获得如下结果。
小结:上述流程虽然简单易操作,但是如果每次生成蒙版都需要手动生成会非常费时。下面我们将介绍通过代码方式进行图片编辑。
4 代码化全自动实现图像编辑(自动蒙版)
将 Grounding DINO(检测器)和 Segment Anything Model(分割器)这两个关键组件结合后,Grounded-SAM 即成为异常强大的视觉应用组合,可通过文本提示词(Text Prompt)完成 CV 语义分割。再搭配 Stable Diffusion,无疑为多模态工程化图片生成提供了更多可能性。实验步骤如下:
图片来自 https://github.com/IDEA-Research/Grounded-Segment-Anything
4.1 在 CloudFormation-堆栈-输出中,找到 NotebookURL 链接,并打开 SageMaker Notebook Instance。
4.2 点击 Terminal,并依次输入下面的两行命令,将代码 Clone 到本地。
4.3 在左侧路径选择进入“miaobishenghua2”,并双击“g-seg-local.ipynb”文件。同时选择“conda_pytorch_p39”作为我们的环境。
4.4 顺序运行所有的代码片段。整个流程包括三个主要部分。
4.4.1 将展示如何使用 Grounding DINO,通过文本描述生成预测矩形框。例如这里,我们想要选择的是绿色的连衣裙,即可输入“green dress”作为提示词并得到下图。我们还可以通过调整“box_threshold”来控制识别的置信度,调整“text_threshold”来控制提示词相关性,以此对最终结果进行筛选(详见代码)。矩形框结果将作为下面分割任务的辅助提示(Prompt)。
我们也可以试试将提示词换成“white dress with blue patterns”,则会得到下面的矩形框。而图中最左边的裙子虽然也是白色,但是因为没有蓝色的图案因此并没有被选中。
4.4.2 将展示如何使用 Segment Anything 根据上一步的预测矩形框,生成分割蒙版。这里我们将预测框作为辅助提示输入,并通过“multimask_output=False”限定只输出一个分割蒙版(详见代码),最终将得到下图的结果。Segment Anything 本身还支持单点和多点作为辅助提示,这样我们可以在只有原图的情况下,也能快速自动化地批量生成蒙版。
4.4.3 我们将展示如何使用 Stable Diffusion 的 Inpainting 模型来替换上面蒙版中的内容。我们在实验时使用了 ml.g5. 2xlarge 的实例,请根据您的实例类型来调整 os.environ["CUDA_VISIBLE_DEVICES"] = "0"
。这里,我们换用 stable-diffusion-2-inpainting 模型生成了下图(详见代码)。
小结:基于以上方式,我们可以更轻松、更高效地实现全自动图像编辑和素材生成。在实际的生产环境中,我们往往需要更复杂的工程架构来进一步优化整个工作流。需要注意的是,此部分代码中使用的 Stable Diffusion 来自于 HuggingFace diffusers,而考虑到一般企业内部中,团队协作更紧密(设计师与技术开发),建议使用 Stable Diffusion WebUI API 来实现代码化图片生成和产出的工作流,以保证参数等信息的统一性。此方案示例可作为全自动工作流的快速验证参考。
第三部分 常见问题
1 如何更新到方案最新版本(0405)?
安装方法请参考《生花妙笔信手来 – 基于 SageMaker Notebook 快速搭建托管的 Stable Diffusion – AI 作画可视化环境》的安装过程。WebUIVersion 默认使用 0405 版本。目前还不支持在已有环境更新,需要重新安装。
2 方案部署时,遇到服务限额问题如何处理?
部署本方案之前,请先在相应区域的 Service Quota 中确认 SageMaker Notebook 相应的资源额度(例如 ml.g4dn.2xlarge for notebook instance usage)已经获得提升,具体步骤参考链接。
3 如何使用从互联网下载的模型?
- 在 Cloud formation 的 Outputs 页面,打开 NotebookURL 对应的链接
- 在左侧导航栏,定位到 sd-webui/data 目录,如下图所示
- 对于 Stable Diffusion 的基础模型,放在 StableDiffusion 目录
- 对于 Lora 模型,放在 Lora 目录
- 对于 ControlNet 模型,放在 ContrloNet 目录
- 用户微调(finetune)的模型,默认也放在 StableDiffusion 目录
4 如何在 Automatic 和 InvokeAI 之间进行切换?
- 在 Cloud formation 的 Outputs 页面,打开 NotebookURL 对应的链接
- 打开一个终端,依次点击 File->New->Terminal
- 进入到如下目录
- 启动 Automatic WebUI
- 启动 Invoke WebUI
5 关于版本管理
我们会保留最新的两个方案版本: 0405 和 0316。
总结
本文介绍了针对上一篇系列博客方案的新增功能,如:新增支持 ControlNet 与 Image Browser 插件,新增支持美西 2 US West(Oregon)区域。并详细介绍了基于本方案及相关 SageMaker 服务,在电商广告行业下,使用 Grounded-SAM 进行营销素材生成的方法与步骤,包括:1. 通过 ControlNet 中的 Canny 模型配合 Inpaint 功能进行无代码图像编辑,以及2. 通过 Grounded-SAM(Grounding DINO 和 Segment Anything)利用代码进行图像编辑。此外,我们将会持续在“生花妙笔信手来”系列中,添加更多贴近客户场景的方案。如果您有任何相关的问题或需求,欢迎随时联系我们进一步交流。