Stable Diffusion-inpaint(mask补全)是怎么做的?

devtools/2024/9/22 23:49:19/

AIGC专栏4——Stable Diffusion原理解析-inpaint修复图片为例_diffusion inpaint-CSDN博客

如果我们必须训练一个inpaint模型才能对当前的模型进行inpaint,那就太麻烦了,有没有什么方法可以不需要训练就能inpaint呢?

Stable Diffusion就是一个生成模型,如果我们可以做到让Stable Diffusion只生成指定区域,并且在生成指定区域的时候参考其它区域,那么它自身便是一个天然的inpaint模型。

如何做到这一点呢?我们需要结合img2img方法,我们首先考虑inpaint的两个输入:一个是原图,另外一个是mask图。

在img2img中,存在一个denoise参数,假设我们设置denoise数值为0.8,总步数为20步,那么我们会对输入图片进行0.8x20次的加噪声。如果我们可以在这个加噪声图片的基础上进行重建,那么网络必然会考虑原始图片的特征。(意思就是不让给定输入的图像完全加噪,而是加噪成还是含有一定原始图像特征的噪声图像,这样就对应了图生图的原理,利用到了给定图像的特征)。

具体步骤:

  • 将原图x0映射到VAE隐空间,得到img_orig;

  • 初始化随机噪声图像img(也可以使用img_orig完全加噪后的噪声);

  • 开始循环:

    1. 对于每一次时间步,根据时间步生成img_orig对应的加噪图像特征;

    2. 一个是基于上个时间步降噪后得到的img,一个是基于原图得到的加噪img_orig。通过mask将两者融合:img=img_orig∗mask+(1.0−mask)∗img 。即,将原图中的非mask区域和噪声图中的mask区域进行融合,得到新的噪声图。

    3. 然后继续去噪声直到结束。

由于该方法不需要训练新模型,并且重建效果也不错,所以该方法比较通用


http://www.ppmy.cn/devtools/95344.html

相关文章

Linux速成入门教程——从零基础开始快速入门,一文了解Linux

1.1 什么是Linux? Linux的起源与历史 Linux是一个开源的、基于UNIX操作系统的操作系统内核,由芬兰大学生林纳斯托瓦兹(Linus Torvalds)于1991年首次发布。最初的Linux只是一个小型项目,旨在创建一个免费的UNIX替代品…

vue 后台管理 之 常用工具库封装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、消息提示二、 显示/隐藏 全屏loading三、弹出框四、 弹出输入框五、将query对象转成url参数六、 存储 token 前言 提示:这里可以添加本文要记录…

【Markdown】Markdown 中的语言简称

目录 1. 编程语言2. 脚本语言3. 标记语言4. 样式语言5. 数据格式6. 查询语言7. 配置文件8. 其他9. 语言简称的汇总表格10. 结束语 以下是常见编程语言、脚本语言、标记语言等在 Markdown 中的语言简称以及相应的示例: 1. 编程语言 Bash / Shell 脚本 echo "He…

基于车联网大数据平台的用户驾驶习惯行为画像分析

近年来,新能源汽车行业的迅速发展推动了汽车智能化的趋势。新能源汽车上配备了成千上万的传感器,这些传感器采集了大量的行车数据被用于车辆运行状况的监控与分析。另一方面,采集到的大量行车数据,也能很好地体现用户的驾驶习惯。…

vulnstack-7(红日靶场七)

环境配置 vlunstack是红日安全团队出品的一个实战环境,具体介绍请访问:漏洞详情http://vulnstack.qiyuanxuetang.net/vuln/detail/9/ 添加两个网卡 DMZ区域: 给Ubuntu (Web 1) 配置了两个网卡,一个可以对外提供服务;…

深入理解linux 内存cache

linux中的内存是以page为单位进行管理的, Page Cache是Linux内核中的一种缓存机制,用于缓存文件系统中的数据和元数据。 当应用程序读取文件时,文件的内容会被缓存到Page Cache中,如果下次再次读取该文件,内核会直接从…

[图解]用例规约之扩展路径

1 00:00:01,710 --> 00:00:03,670 基本路径写完之后 2 00:00:04,690 --> 00:00:07,270 接下来就是扩展路径 3 00:00:08,620 --> 00:00:14,000 扩展路径就是系统要处理的意外和分支 4 00:00:14,010 --> 00:00:19,710 系统要处理的 5 00:00:20,970 --> 00:00:…

redis面试(十六)公平锁释放和排队加锁

锁释放 RedissonFairLock.unlockInnerAsync()方法 这和加锁的逻辑没有太大区别 也就是说在客户端A他释放锁的时候,也会走while true的脚本逻辑,看一下有序集合中的元素的timeout时间如果小于了当前时间,就认为他的那个排队就过期了&#xf…