使用StableDiffusion进行图片Inpainting原理

在这里插入图片描述

  • 论文链接:RePaint: Inpainting using Denoising Diffusion Probabilistic Models
  • 代码链接:RePaint

Inpainting任务是指在任意一个二进制的掩码指定的图片区域上重新生成新的内容,且新生成的内容需要和周围内容保持协调。当前SOTA模型用单一类型的 mask 训练限制了模型的泛化能力,此外 pixel-wise 和 perceptual loss 会导致生成模型朝着纹理填充而不是语义修复方向更新。
本文提出了基于去噪扩散概率模型的图像修复方法Repaint,该方法甚至对于极端的 mask 情况(如mask 面积很大,几乎遮挡了整幅图像)都适用。本文利用一个预训练的 Unconditional DDPM 作为先验模型。为了调节生成过程,我们使用给定的图像信息仅对未屏蔽区域进行采样来改变反向扩散迭代。由于该技术不修改原始 DDPM 网络本身,因此该模型可以为任何修复形式生成高质量的图像。

1. 预备知识

本章节将介绍几个后面要用到的DDPM的结论,关于这些结论是如何得到的以及DDPM的相关知识可以移步至 通俗理解DDPM到Stable Diffusion原理。

扩散的前向过程:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) (1) q(x_t|x_{t-1})=\mathcal{N}(x_t;\sqrt{1-\beta_t}x_{t-1},\beta_t\text{I})\quad\text{(1)} q(xtxt1)=N(xt;1βt xt1,βtI)(1)
进一步可以直接从 x 0 x_0 x0推到出加噪后的 x t x_t xt:
q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) ( 2 ) q(x_t|x_0)=\mathcal{N}(x_t;\sqrt{\bar{\alpha}_t}x_0,(1-\bar{\alpha}_t)\mathbf{I})\quad(2) q(xtx0)=N(xt;αˉt x0,(1αˉt)I)(2)
反向降噪过程:
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) ( 3 ) p_\theta(x_{t-1}|x_t)=\mathcal{N}(x_{t-1};\mu_\theta(x_t,t),\Sigma_\theta(x_t,t))\quad(3) pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))(3)
降噪过程就是通过神经网络来预测高斯分布的参数 μ θ ( x t , t ) \mu_\theta(x_t,t) μθ(xt,t) Σ θ ( x t , t ) ) \Sigma_\theta(x_t,t)) Σθ(xt,t))

2. 方法

使用 x x x 表示 ground truth 图像,那么 m ⊙ x m\odot x mx 表示图像中被mask掉的未知区域, ( 1 − m ) ⊙ x (1-m)\odot x (1m)x 表示剩余已知区域。那么根据(2)式的加噪过程,可以在任意时间点采样得到 t t t 时刻的已知区域 m ⊙ x t m\odot x_t mxt,如下图所示:
在这里插入图片描述
即:
x t − 1 known ∼ N ( α ˉ t x 0 , ( 1 − α ˉ t ) I ) x_{t-1}^\text{known}\sim\mathcal{N}(\sqrt{\bar{\alpha}_t}x_0,(1-\bar{\alpha}_t)\mathbf{I}) xt1knownN(αˉt x0,(1αˉt)I)
根据(3)式的降噪过程生成 t t t 时刻的未知区域 ( 1 − m ) ⊙ x t (1-m)\odot x_t (1m)xt,如下图所示:
在这里插入图片描述
即:
x t − 1 unknown ∼ N ( μ θ ( x t , t ) , Σ θ ( x t , t ) ) x_{t-1}^\text{unknown}\sim\mathcal{N}(\mu_\theta(x_t,t),\Sigma_\theta(x_t,t)) xt1unknownN(μθ(xt,t),Σθ(xt,t))
将以上两部分的结果相加即可得到 t t t 时刻的修复结果,如下图所示:
在这里插入图片描述
即:
x t − 1 = m ⊙ x t − 1 known + ( 1 − m ) ⊙ x t − 1 unknown x_{t-1}=m\odot x_{t-1}^\text{known}+(1-m)\odot x_{t-1}^\text{unknown} xt1=mxt1known+(1m)xt1unknown
然后不断迭代下去,直到得到 x 0 x_0 x0.

Resampling技巧

当直接使用上述的方式进行Inpainting时,可以发现结果仅仅是修复的内容与已知区域匹配,但是语义并不正确。如下图所示,在 n = 1 n=1 n=1时,修复的区域是比较粗糙的纹理和够的毛相匹配,但是语义并不正确。
在这里插入图片描述
造成上述问题的原因是模型在用DDPM输出的结果和已知区域的采样结果从 x t x_t xt预测 x t − 1 x_{t-1} xt1时,使用(2)式对已知区域进行采样时并没有考虑到生成的部分。尽管模型尝试在降噪的每一步来协调图片,但是由于在每一步中都有上述相同问题,因此从来没有完全收敛。此外,在降噪的每一步中,由于方差策略 β t \beta_t βt的减小,图片的改变也随着减小,因此模型在后续迭代中无法纠正错误。

针对上述分析的问题,作者提出 resampliing 的方法,即对模型的输出 x t x_t xt 重新根据(1)式将其扩散回到 x t x_t xt,并把重采样操作的次数称为 jump length,用 j j j 表示, j = 1 j=1 j=1 表示不进行重采样。

如下所示,展示了Repaint的伪代码
在这里插入图片描述

3. 实验结果

(1)定性结果
在这里插入图片描述
(2)定性结果2
在这里插入图片描述
(3)定量结果
在这里插入图片描述
(3)降噪步数 T T T 和resampling步数 r r r 的关系
在这里插入图片描述

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

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

相关文章

as安装后第一次创建项目,出现gradle下载错误,或无法创建run/debug的启动

大概报错Could not resolve com.android.tools.build:gradle:8.0.1 原因两种第一种就是刚创建好后没有等待他自动下载完成就做了其他操作导致异常,第二组就是瞎几把乱改改错了 我就属于第二种 修改回来的方式: 就这个地方我改成了jdk1.8,然…

java智慧工地 人脸识别终端,智慧工地解决方案源码

智慧工地即施工现场全面数字化过程,使用IOT、云、移动、大数据、AI等关键技术,进行生产要素、管理过程、建筑物实体的数据采集、数据治理,最终通过大数据和人工智能帮助项目实现精益管理。 智慧工地围绕工程现场人、机、料、法、环及施工过程中质量、安全…

git分支解析

1、概述和优点 在版本控制过程中,同时会推进多个任务,为此,就可以为每个任务创建单独的分支。开发人员可以把自己的任务和主线任务分离开来,在开发自己的分支的时候不会影响主分支。 分支的好处: 同时推进多个功能开发…

【GitHub精选项目】短信系统测试工具:SMSBoom 操作指南

前言 本文为大家带来的是 OpenEthan 开发的 SMSBoom 项目 —— 一种用于短信服务测试的工具。这个工具能够发送大量短信,通常用于测试短信服务的稳定性和处理能力。在合法和道德的范畴内,SMSBoom 可以作为一种有效的测试工具,帮助开发者和系统…

WebAssembly 的魅力:高效、安全、跨平台(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

项目应用多级缓存示例

前不久做的一个项目,需要在前端实时展示硬件设备的数据。设备很多,并且每个设备的数据也很多,总之就是数据很多。同时,设备的刷新频率很快,需要每2秒读取一遍数据。 问题来了,我们如何读取数据&#xff0c…

一文读懂Java中的设计模式——代理模式,以翻译场景举例,特别通俗易懂!

代理模式概念 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。目的:为其他对象提供一种代…

浅谈Guava Cache的参数使用

CacheLoader 用于数据加载方式比较固定且统一的场景,在缓存容器创建的时候就需要指定此具体的加载逻辑。通常开发中使用时我们需要继承CacheLoader类或写一个匿名实现类实现其load方法和reload方法 load方法 当执行get操作没有命中缓存或者判断缓存已经超出expir…

论文阅读——llava

Visual Instruction Tuning LLaVA 指令智能体分为两类:端到端的,通过LangChain[1]/LLM[35]协调各种模型的系统。 数据集生成用GPT辅助生成的,具体不写了。 模型结构: input image Xv LLM:Vicuna visual encoder&a…

芯片到底是怎么访问外设

微型计算机的组成:CPURAM硬盘等 什么是FLASH? FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NV…

系列一、GitHub搜索技巧

一、GitHub搜索技巧 1.1、概述 作为程序员,GitHub大家应该都再熟悉不过了,很多时候当我们需要使用某一项技能而又无从下手时,通常会在百度(面向百度编程)或者在GitHub上通过关键字寻找相关案例,比如我想学…

nodejs+vue+ElementUi医院预约挂号系统3e3g0

本医院预约挂号系统有管理员,医生和用户。该系统将采用B/S结构模式,使用Vue和ElementUI框架搭建前端页面,后端使用Nodejs来搭建服务器,并使用MySQL,通过axios完成前后端的交互 管理员功能有个人中心,用户管…

springMVC-异常处理

一、四种异常形式 在springmvc中,处理异常有四种形式 1.局部异常 2.全局异常 3.自定义异常 4.统一异常(统一提示异常) 作用:可以使浏览器不出现丑陋的500错误提示,而跳转到另外的错误提示页面 另外,自定义…

Linux——缓冲区

我在上篇博客留下了一个问题,那个问题就是关于缓冲区的问题,我们发现 文件有缓冲区,语言有用户级缓冲区,那么缓冲区到底是什么?,或者该怎 么认识缓冲区?这篇文章或许会让你有所认识,…

【ONE·MySQL || 基础介绍】

总言 主要内容:MySQL在Centos 7下的安装(主要学习相关指令语句,理解安装操作是在做什么)、对MySQL数据库有一个基础认识。 文章目录 总言0、MySQL的安装与卸载(Centos 7)0.1、MySQL的卸载0.1.1、卸载不必要…

MySQL数据库 触发器

目录 触发器概述 语法 案例 触发器概述 触发器是与表有关的数据库对象,指在insert/update/delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的soL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录&am…

XUbuntu22.04之跨平台音频编辑工具(平替Audition):ocenaudio(二百零二)

加粗样式 简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏&#…

FastDDS编译

Windows installation from binaries download 里面有二级菜单 view 安装后切换至目录 C:\Program Files\eProsima\fastrtps 2.12.1\examples\cpp\dds cmd打开此目录 mkdir build cd build cmake … //cmake …可以换成下面这句,这是官网的推荐 cmake -Bbuilde…

nn.LSTM个人记录

简介 nn.LSTM参数 torch.nn.lstm(input_size, "输入的嵌入向量维度,例如每个单词用50维向量表示,input_size就是50"hidden_size, "隐藏层节点数量,也是输出的嵌入向量维度"num_layers, "lstm 隐层的层数,默认…

R语言中使用ggplot2绘制散点图箱线图,附加显著性检验

散点图可以直观反映数据的分布,箱线图可以展示均值等关键统计量,二者结合能够清晰呈现数据蕴含的信息。 本篇笔记主要内容:介绍R语言中绘制箱线图和散点图的方法,以及二者结合展示教程,添加差异比较显著性分析&#xf…