SAM + 用于文本到图像修复的稳定扩散

news2024/10/6 12:28:57
推荐基于稳定扩散(stable diffusion) AI 模型开发的自动纹理工具: DreamTexture.js自动纹理化开发包 - NSDT

什么是SAM?

今年早些时候,Meta AI 发布了新的开源项目:Segment Anything Model (SAM),在计算机视觉界引起了另一次巨大轰动。但是,是什么让 SAM 如此特别?

SAM 是一个可及时分割的系统,其结果简直令人惊叹。它擅长对不熟悉的物体和图像进行零样本泛化,而无需额外的培训。它也被认为是计算机视觉的第一个基础模型,这是个大新闻!接下来我们将更多地讨论基础模型。

SAM 在包含 11 万张图像和 1 亿个分割掩码的庞大数据集上进行了训练,Meta 也公开发布了该数据集。但是,展示 SAM 突破性功能的最佳方式可能是通过简短的演示:

Segment Anything Model (SAM) 以正确识别每张图像多达数百个单独的蒙版而闻名。它还可以为模棱两可的提示生成多个有效掩码;来自 Meta AI 的 GIF

什么是基础模型?

基础模型是在大量未标记数据集上训练的神经网络,用于处理各种任务。这些强大的机器学习算法为当今使用的许多最流行的生成式 AI 工具提供支持,包括 ChatGPT 和 BERT。

基础模型在自然语言处理方面取得了重大进展,但直到最近,在计算机视觉应用中还没有获得太大的牵引力。这是因为计算机视觉一直在努力寻找具有语义丰富的无监督预训练的任务,类似于预测 NLP 的掩码标记。借助 SAM,Meta 着手改变这种状况。

如何使用 SAM

Segment Anything 模型不需要额外的训练,因此我们需要做的就是提供一个提示,告诉模型在给定的输入图像中要分割什么。SAM 接受各种输入提示类型,但一些最常见的类型包括:

  • 在 UI 中以交互方式提示
  • 使用点或框以编程方式提示
  • 使用从对象检测模型生成的边界框坐标进行提示
  • 自动分割图像中的所有内容

项目概述:接地DINO+SAM+稳定扩散

然而,SAM 不仅能很好地与不同的输入类型集成。SAM 的输出掩码还可以用作其他 AI 系统的输入,以实现更复杂的管道!在本教程中,我们将演示如何将 SAM 与 GroundingDINO 和 Stable Diffusion 结合使用,以创建一个接受文本作为输入的管道,以使用生成式 AI 执行图像修复和修复。

我们将使用 GroundingDINO、Segment Anything 和 Stable Diffusion 创建一个管道,以使用文本提示执行图像修复;图片由作者提供。

为此,我们将利用三个独立的模型。首先,我们将使用 Grounding DINO 来解释文本输入提示,并对这些输入标签执行对象检测。接下来,我们将使用 SAM 对这些边界框预测中的掩码进行分段。最后,我们将使用从 SAM 生成的蒙版来隔离图像的区域,以便使用稳定扩散进行修复或修复。我们还将使用 Comet 来记录管道中每个步骤的图像,以便我们可以准确地跟踪从输入图像到输出图像的过程。

最后,我们应该能够提供一个输入图像,一些输入文本提示,指定我们希望模型做什么,并最终得到如下所示的转换:

我们的目标是为我们的管道提供如左图所示的图像和如上图所示的文本提示,并生成如右图所示的输出图像;图片由作者提供

使用GroundingDINO进行🦕物体检测

在本教程中,我们将使用四个示例图像,可以从 Kaggle 下载。这些图片均来自 Unsplash,原始摄影师的链接可以在本博客的底部找到。

我们的玩具数据集由四张动物图像组成;图片由作者提供。

设置环境后,我们首先定义输入图像并提供文本提示,以指定要检测的对象。请注意文本提示的格式,并确保用句点分隔每个对象。我们不必在此处从任何特定类别中进行选择,因此请随意尝试此提示并根据需要添加更多类别。

经过一些非常简单的预处理后,我们使用 GroundingDINO 模型来预测输入标签的边界框。我们将这些结果记录到彗星中,以便稍后检查。这样,我们将能够看到管道中每个步骤的图像,这不仅有助于我们了解过程,还可以帮助我们在出现任何问题时进行调试。

我们的原始图像和预测的边界框,如彗星所示;图片由作者提供

现在,我们将使用这些边界框坐标来指示要在 SAM 中细分哪些项目。

带SAM的面罩

如前所述,SAM 可以自动检测图像中的所有掩码,也可以接受提示,引导它仅检测图像中的特定掩码。现在我们有了边界框预测,我们将使用这些坐标作为 SAM 的输入提示,并绘制生成的二进制掩码列表:

从 SAM 生成的二进制掩码。请注意,该数字对应于掩码在掩码列表中的位置;图片由作者提供

请注意,默认情况下,SAM 执行的是实例分割,而不是语义分割,这为我们提供了更大的灵活性。让我们在 Comet UI 中可视化这些蒙版:

检查 SAM 生成的分段掩码

最后,让我们隔离出要用于下一个任务的蒙版:图像修复。我们将用一个老人代替右边的狗,所以我们需要以下三个面具(我们可以从上面的二进制面具图中获取它们的索引):

用SAM隔离掩模的一部分

现在,假设我们决定要用一个老人代替右边的狗,但只是头。如果我们用点(交互或编程方式)检测面具,我们可以使用正面和负面提示将狗的脸与他身体的其他部分隔离开来,如下所示:

绿色星形表示“正”输入点,红色星形表示“负”输入点。这种组合向 SAM 表明,我们想分割右边的狗,而不是身体(只是脸)

但是由于我们已经有了面具数组,我们将使用 np.where 隔离狗的脸。下面,我们从右边狗的面具开始,减去它的衬衫和项链的面具。然后我们将数组转换回 PIL 图像。

使用稳定扩散生成图像

在最后一步中,我们将使用 Stable Diffusion,这是一种潜在的文本到图像深度学习模型,能够在给定任何文本输入的情况下生成逼真的图像。具体来说,我们将使用 Stable Diffusion Inpainting Pipeline,它将提示、图像和二进制蒙版图像作为输入。此管道将仅针对蒙版图像的白色像素(“1”)从文本提示生成图像。

什么是修复?

图像修复是指在图像的指定区域中填充缺失数据的过程。最初,图像修复用于恢复照片的受损区域,使其看起来更像原始区域,但现在通常与蒙版一起使用,以故意改变图像的区域。

与 SAM 一样,Stable Diffusion Inpainting Pipeline 接受正负输入提示。在这里,我们指示它使用与右狗脸相对应的面具,并在其位置生成“一个卷发老人”。我们的否定提示指示模型在其生成的图像中区分特定对象或特征。最后,我们设置随机种子,以便以后可以重现结果。

专业提示:Stable Diffusion 可能会被击中或错过。如果您第一次不喜欢结果,请尝试调整随机种子并再次运行模型。如果您仍然不喜欢结果,请尝试调整提示。有关提示工程的更多信息。

我们最终输出的图像,狗的脸被一个老人取代

这很简单!现在让我们尝试外绘。

什么是异画?

图像外绘是使用生成式 AI 将图像扩展到其原始边界之外的过程,从而生成以前不存在的图像部分。我们将通过遮罩原始背景并使用相同的 Stable Diffusion Inpainting Pipeline 来有效地做到这一点。

这里唯一的区别是输入掩码(现在是背景)和输入提示。让我们把狗带到拉斯维加斯吧!

背景之后的输入图像已替换为“拉斯维加斯的一家赌场

使用稳定扩散修复多个对象

现在,让我们尝试分割图像中的多个对象。在下一张图片中,我们将要求模型同时检测青蛙和花朵。然后,我们将指示模型用考拉熊替换青蛙,并用帝国大厦替换花朵。

两个并排的图像。左图是一只青蛙紧贴着一朵热带色花朵的原始图像,背景明亮而模糊。右边的图片是一样的,只是青蛙被AI生成的考拉熊取代了。用SAM + Stable Diffusion制作的图像。

左边是青蛙的原始形象。在右边,我们的输出图像中,青蛙已被考拉熊取代;图片由作者提供。

该模型认为花朵包括青蛙,但我们可以通过减去青蛙蒙,然后将新蒙版转换为PIL图像来解决此问题。

连续三个二进制掩码,显示从一个掩码中减去另一个掩码的结果。

从左到右:原来的花面具,减去青蛙面具,等于我们新的、修正后的花面具;图片由作者提供。

一旦我们把花分开了,让我们用帝国大厦代替它:

左边是我们的原始图像。在中间,我们用SAM+Stable Diffusion把青蛙换成了考拉熊,在右边,我们也用摩天大楼代替了花朵

我们的模型并不完美;看起来我们的考拉可能还有第五条腿,摩天大楼上还有一些青蛙的残余,但总的来说,我们的管道表现相当不错!

定义稳定扩散的背景

有时我们的物体检测器GroundingDINO无法检测到背景。但是我们仍然可以很容易地进行外绘!

要在未检测到背景蒙版时创建背景蒙版,我们可以取对象蒙版的反面。如果图像中有多个对象,我们只需将这些蒙版相加,然后取此总和的倒数。

然后,我们可以遵循与前面示例中相同的过程。

在 Comet 中查看我们的 SAM + 稳定扩散结果

正如您可能想象的那样,跟踪使用哪些输入图像、提示、蒙版和随机种子来创建哪些输出图像可能会很快变得令人困惑!这就是为什么我们把所有的图像都记录到彗星上的原因。

现在让我们进入 Comet UI,看看我们的每个输入图像以及修复和修复后生成的输出图像:

Comet UI 中表示的输入和输出图像网格。使用 SAM + Stable Diffusion 制作的图像。

我们创建一个干净、简单的仪表板来跟踪我们的输入图像和最终输出图像。你最喜欢哪个?图片由作者提供。

这是一个漂亮、干净的仪表板,但有时我们想更深入地了解我们是如何从 A 点到 B 点的。或者,也许,出了点问题,我们需要更深入地了解调试过程的每个步骤。为此,我们将检查自定义调试仪表板:

我们的仪表板显示管道中每个图像的每个步骤

我们还可以仔细研究单个实验的每个步骤:

我们还创建了第二个仪表板,详细说明了每个图像的流程的每个步骤。这有助于在我们的管道中出现问题时进行调试;

使用 Comet 跟踪我们的提示

我们还需要确保跟踪我们是如何创建每个输出的,以便我们以后可以重现任何结果。也许我们已经多次运行同一提示的不同版本。或者,也许我们已经尝试了不同的随机种子,并想选择我们最喜欢的结果。通过将提示记录到彗星的数据面板,我们可以轻松检索所有相关信息,以重新创建我们的任何图像输出。

使用彗星的数据面板跟踪和组织我们的提示和种子信息

现在您已经是修复专家了,请在自己的图像上尝试管线!

结论

感谢您一直到最后,我希望您发现这个 SAM + Stable Diffusion 教程对您有所帮助!如有问题、评论或反馈,请随时在下面的评论中留言。祝您编码愉快!

转载:SAM + 用于文本到图像修复的稳定扩散 (mvrlink.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1191590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧工地建筑施工项目管理平台源码,实现人员劳务实名制管理、区域安防监控、智能AI识别、用电/水监控、噪音扬尘监测、现场物料管理等功能

智慧工地管理系统源码,智慧工地云平台源码,PC端APP端源码 智慧工地管理平台实现对人员劳务实名制管理、施工进度、安全管理、设备管理、区域安防监控系统、智能AI识别系统、用电/水监控系统、噪音扬尘监测、现场物料管理系统等方面的实时监控和管理&…

使用U盘安装ubuntu22操作教程

U盘启动 将烧录好的U盘,插上待安装系统的电脑 服务器在开机之后长按【ESC键】进入BIOS选项中,选择对应的U盘启动 如下图,在界面中“USB”选项就是我的U盘,第一启动项选择U盘启动,其他启动项不动,选择后按F…

【计算思维题】少儿编程 蓝桥杯省赛考试计算思维真题 数学逻辑思维真题详细解析第11套

少儿编程 蓝桥杯青少组计算思维真题及解析 第十四届蓝桥杯省赛真题 1、晶晶在注册一个学习网站时,需要设置密码。网站提示: 密码必须由 8~16个字符组成,可以包合数字、大写字母、小写字母、特殊符号这 4种字符类型。 包含4种不同类型字符的密码是强密码; 包含2种或3种不…

软件开发项目文档系列之十五如何撰写项目结项报告

这是一个项目总结文档的说明文件,它提供了项目的概述、建设情况、技术情况、测试情况、培训情况、试运行情况、主要成效等详细信息。 1 项目概述 项目名称:明确指定了项目的名称,这有助于确保文件的清晰性和易读性。 项目相关单位&#xff…

「Java开发指南」如何用MyEclipse搭建Spring MVC应用程序?(二)

本教程将指导开发者如何生成一个可运行的Spring MVC客户应用程序,该应用程序实现域模型的CRUD应用程序模式。在本教程中,您将学习如何: 从数据库表的Scaffold到现有项目部署搭建的应用程序 使用Spring MVC搭建需要MyEclipse Spring或Bling授…

三相电机的某些实测特性曲线

三相电机参数: 0.75KW,额定电流是2A,功率因数0.71,效率78.9%。制式S1. 1.负载不变时的线电压与线电流的关系 1.1相关数据与python代码: 这里记录了一系列的实验: 第一组实验:近乎空载&#xf…

HTTParty库数据抓取代码示例

使用HTTParty库的网络爬虫程序, ruby require httparty # 设置服务器 proxy_host proxy_port # 使用HTTParty库发送HTTP请求获取网页内容 response HTTParty.get(/, :proxy > { :host > proxy_host, :port > proxy_port }) # 打印获取的网页内容 …

SpringBoot 配置进阶

一、ConfigurationProperties 1、 在类定义上 ConfigurationProperties注解,此注解是用来为bean绑定属性。使用步骤如下: 在配置文件 application.yml 中,添加配置信息 servers:ip-address: 127.0.0.1port: 8123创建配置类,并在…

ubuntu下Anaconda环境安装GPU的pytorch(docker镜像)

实验室需要给每个人分配docker的container环境,为了节省系统的空间,打算把anaconda和深度学习的开发环境配置好拉取镜像以省时间。 基础环境配置 apt更新了清华源 安装了基础环境 gcc vim Linux文本编辑库 openssh-server ssh远程连接库 net-tools 包含…

iEnglish马铁鹰:智能教育塑造未来学习新范式

随着云计算、大数据、物联网、人工智能和区块链等新一代智能技术在教育中的广泛应用,教育正日益迈向智能时代。智能化和智慧化将深刻改变未来教育形式和学习方式,为教育带来更多可能性和机遇。根据教育部统计数据,截至2022年底,中…

Spring Cloud 微服务入门篇

文章目录 什么是微服务架构 Microservice微服务的发展历史微服务的定义微小的服务微服务 微服务的发展历史1. 微服务架构的发展历史2. 微服务架构的先驱 微服务架构 Microservice 的优缺点1. 微服务 e Microservice 优点2. 微服务 Microservice 缺点微服务不是银弹:…

VS Code画思维导图:Graphviz Markdown Preview

文章目录 简介常见属性聚集子图节点结构 简介 Graphviz是一种思维导图格式,其文件后缀是.dot。VS code中既有专门针对.dot的插件,也有嵌入Markdown的Graphviz插件,从我个人的使用频次来说,后者更加常用,有了Graphviz …

【大模型-第一篇】在阿里云上部署ChatGLM3

前言 好久没写博客了,最近大模型盛行,尤其是ChatGLM3上线,所以想部署试验一下。 本篇只是第一篇,仅仅只是部署而已,没有FINETUNE、没有Langchain更没有外挂知识库,所以从申请资源——>开通虚机——>…

Postgres主键自增时重复键违反唯一约束

错误: 重复键违反唯一约束\"bue_new_copy1_pkey\"\n 详细:键值\"(id)(31)\"已经存在\n 新增的数据的id跟表里面的数据id重复了,这种一般是手动导入数据或者复制表等情况造成的,直接修改表的序列为当前最大的id&#xf…

MCSM面板搭建教程和我的世界Paper服务器开服教程

雨云游戏云VPS服务器用Linux搭建MCSM面板和Minecraft Paper1.20.2服务器教程。 本教程演示安装的MC服是Paper 1.20.2版,其他版本也可以参考本教程,差别不大。 本教程使用Docker来运行mc服,可以方便切换不同Java版本,方便安装多个…

【GEE】9、在GEE中生成采样数据【随机采样】

1简介 在本模块中,我们将讨论以下概念: 如何使用高分辨率图像生成存在和不存在数据集。如何在要素类图层中生成随机分布的点以用作字段采样位置。如何根据参数过滤您的点以磨练您的采样位置。 华盛顿州白杨林旁的落基山麋鹿。 图片来源:美国…

2023.11.7: OpenAI DevDay总结

New Model:ChatGPT4.0 turbo 更长的context:支持长达128000个tokens的context 更好的控制方案: 更有利于API调用JSON Mode Function calling Reproducible outputs 通过一个seed使得模型的回答总是保持一致 Better Knowledge 支持知识检索…

阿里云服务器ECS经济型e实例和u1有什么区别?

阿里云服务器ECS经济型e实例和通用算力型u1实例有什么区别?如何选择?ECS经济型e实例是共享型云服务器,通用算力型u实例是企业级独享型云服务器,e实例性价比高,现在2核2G3M带宽一年99元,云服务器u1价格相对要…

阿里云通用算力型u1服务器和e实例有什么区别?选择攻略

阿里云服务器ECS经济型e实例和通用算力型u1实例有什么区别?如何选择?ECS经济型e实例是共享型云服务器,通用算力型u实例是企业级独享型云服务器,e实例性价比高,现在2核2G3M带宽一年99元,云服务器u1价格相对要…

数据结构:AVL树的旋转(高度平衡树)

1、AVL树简介 AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis,他们…