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

推荐基于稳定扩散(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.mfbz.cn/a/126744.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

day3 ARM

【昨日作业】 .text .global start _start: mov r0,#0 存放sum mov r1,#1 存放相加的数值 loop: cmp r1,#100 bhi wh add r0,r0,r1 add r1,r1,#1 b loop wh: b wh .end 【内存读写指令】 通过内存读写指令可以实现向内存中写入指定数据或者读取指定内存地址的数据 c语言内存…

MySQL最新2023年面试题及答案,汇总版(3)【MySQL最新2023年面试题及答案,汇总版-第三十三刊】

文章目录 MySQL最新2023年面试题及答案,汇总版(3)01、隔离级别与锁的关系?02、SQL 约束有哪几种呢?03、如何优化子查询?04、什么是前缀索引?05、MySQL5.6和MySQL5.7对索引做了哪些优化?06、MySQL有关权限的…

Linux学习第34天:Linux LCD 驱动实验(一):星星之火可以燎原

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 LCD显示屏是由一个一个的像素点构成的。当你能控制一个像素点的亮暗及颜色变化的时候,你就能让LCD显示瓶显示五颜六色的整幅图案。甚至可以让LCD屏幕…

Spring-Security前后端分离权限认证

前后端分离 一般来说,我们用SpringSecurity默认的话是前后端整在一起的,比如thymeleaf或者Freemarker,SpringSecurity还自带login登录页,还让你配置登出页,错误页。 但是现在前后端分离才是正道,前后端分离的话,那就…

Django快速入门(一)

Django三板斧 1. 基本使用 三板斧: HttpResponse,render,redirect from django.shortcuts import HttpResponse,render,redirect# 一. 返回字符串类型的数据 return HttpResponse(字符串) # 二. 返回HTML文件 # 1. 动态HTML页面: return render(request,login.html) def ab…

极智开发 | CUDA线程模型与全局索引计算方式

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 CUDA线程全局索引计算方式。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq CUDA 线程全局索引的计算,是很容…

图文加多个测试带你彻底搞懂Netty ChannelPipeline的执行顺序(附源码)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 netty version 4.1.65.Final ChannelPipeline 是什么 Pipeline,管道、流水线,类似于责任链模式。基本上我们使用Netty开发程序需要编写…

Apache RocketMQ - 概述

2022年,RocketMQ 5.0的正式版发布,相比于4.0版本而言,架构走向云原生化,并且覆盖了更多的业务场景。 如何从互联网时代演进到云时代? 1. 消息队列演进史 操作系统、数据库、中间件是基础软件的三驾马车,…

Sketch是什么软件,如何收费和获得免费版

Sketch软件为设计师构建了一个优秀的本地Mac应用程序。Sketch是整个设计过程的平台,通过基于Web的工具共享工作,获取反馈,测试原型,并将其移交给任何浏览器。Sketch软件的定价根据不同的许可类型和订阅计划而变化。本文从Sketch软…

18. 深度学习 - 从零理解神经网络

文章目录 本文目标预测趋势与关系波士顿房价预测 Hi, 你好。我是茶桁。 我们终于又开启新的篇章了,从今天这节课开始,我们会花几节课来理解一下深度学习的相关知识,了解神经网络,多层神经网络相关知识。并且,我们会尝…

网络安全自学手册

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全…

No module named ‘importlib.metadata‘

解决办法 参考博客 https://wenku.csdn.net/answer/45a1563cc02e9592dd1d1d28fe7b88e7 pip install importlib_metadata

使用U盘安装ubuntu22操作教程

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

③【操作表数据】MySQL添加数据、修改数据、删除数据

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ MySQL添加数据、修改数据、删除数据 &#x1f…

让旗下产品受到更多用户认可,GNC健安喜登陆中国国际进口博览会

11月5日-10日,第六届中国国际进口博览会(以下简称“中国进博会”)在上海国家会展中心正式起航。自2018年首次举办以来,中国进博会受到了无数参展企业的推崇,无数制造商、采购商的追捧。随着参会企业的逐年增长&#xf…

辐射骚扰整改思路及方法:对共模电流的影响?|深圳比创达电子EMC

某产品首次EMC测试时,辐射、静电、浪涌均失败。本篇文章就“原理探究:对共模电流的影响”问题进行详细讨论。 现在来研究左侧的磁场分布情况。分别对两根导线使用右手螺旋定则可以发现,两根导线的磁场均为顺时针方向,即磁场是互相…

Java后端开发——JDBC入门实验

JDBC(Java Database Connectivity)是Java编程语言中用于与数据库建立连接并进行数据库操作的API(应用程序编程接口)。JDBC允许开发人员连接到数据库,执行各种操作(如插入、更新、删除和查询数据&#xff09…

代码随想录 Day38 完全背包问题 LeetCode T70 爬楼梯 T322 零钱兑换 T279 完全平方数

前言 在今天的题目开始之前,让我们来回顾一下之前的知识,动规五部曲 1.确定dp数组含义 2.确定dp数组的递推公式 3.初始化dp数组 4.确定遍历顺序 5.打印dp数组来排错 tips: 1.当求取物品有限的时候用0-1背包,求取物品无限的时候用完全背包 结果是排列还是组合也有说法,当结果是组…

如何选择最适合的知识付费小程序开发工具?

在选择适合的知识付费小程序开发工具时,需要考虑开发者的技能水平、项目需求、平台兼容性以及用户体验。下面将介绍一些常用的开发工具,并提供一些选择工具的考虑因素。 1. 微信小程序开发工具 微信小程序是知识付费小程序的一个常见平台,…

生活污水处理一体化处理设备有哪些

生活污水处理一体化处理设备有多种类型,包括但不限于以下几种: 鼓风机:提供曝气系统所需的气流。潜水污水提升泵:将污水从低处提升到高处。旋转式滚筒筛分机:对污水中的悬浮物进行分离和筛选。回旋式格栅:…
最新文章