浅析扩散模型与图像生成【应用篇】(六)——DiffuseIT

news2024/10/6 12:25:29

6. Diffusion-based Image Translation using Disentangled Style and Content Representation

  本文介绍了一种基于扩散模型的图像转换方法,图像转换就是根据文本引导或者图像的引导,将源图像转换到目标域中,如下图所示。
在这里插入图片描述
  在图像转换中待解决的一个关键问题就是如何在将语义特征转换到目标域中时保留源图像的结构特征,而不是随机的生成一张目标域中的图像。而扩散模型本身具备很强的随机性,因此必须引入一定的约束,控制其生成的过程。作者受到流形约束梯度(Manifold Constrained Gradient,MCG)的启发,将损失梯度引入到生成过程中,实现方法如下 x t − 1 ′ = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t ϵ \boldsymbol{x}_{t-1}^{\prime}=\frac{1}{\sqrt{\alpha_{t}}}\left(\boldsymbol{x}_{t}-\frac{1-\alpha_{t}}{\sqrt{1-\bar{\alpha}_{t}}} \boldsymbol{\epsilon}_{\theta}\left(\boldsymbol{x}_{t}, t\right)\right)+\sigma_{t} \boldsymbol{\epsilon} xt1=αt 1(xt1αˉt 1αtϵθ(xt,t))+σtϵ x t − 1 = x t − 1 ′ − ∇ x t ℓ total  ( x ^ 0 ( x t ) ) \boldsymbol{x}_{t-1}=\boldsymbol{x}_{t-1}^{\prime}-\nabla_{\boldsymbol{x}_{t}} \ell_{\text {total }}\left(\hat{\boldsymbol{x}}_{0}\left(\boldsymbol{x}_{t}\right)\right) xt1=xt1xttotal (x^0(xt))其中 x t − 1 ′ \boldsymbol{x}_{t-1}^{\prime} xt1沿用了DDPM中的计算方法,在此基础上又根据损失梯度 ∇ x t ℓ total  ( x ^ 0 ( x t ) ) \nabla_{\boldsymbol{x}_{t}} \ell_{\text {total }}\left(\hat{\boldsymbol{x}}_{0}\left(\boldsymbol{x}_{t}\right)\right) xttotal (x^0(xt))进一步更新得到 x t − 1 \boldsymbol{x}_{t-1} xt1 x ^ 0 ( x t ) \hat{\boldsymbol{x}}_{0}\left(\boldsymbol{x}_{t}\right) x^0(xt)是根据 x t \boldsymbol{x}_{t} xt估计得到的生成结果,后续简写为 x \boldsymbol{x} x,其计算过程如下 x ^ 0 ( x t ) : = x t α ˉ t − 1 − α ˉ t α ˉ t ϵ θ ( x t , t ) \hat{\boldsymbol{x}}_{0}\left(\boldsymbol{x}_{t}\right):=\frac{\boldsymbol{x}_{t}}{\sqrt{\bar{\alpha}_{t}}}-\frac{\sqrt{1-\bar{\alpha}_{t}}}{\sqrt{\bar{\alpha}_{t}}} \boldsymbol{\epsilon}_{\theta}\left(\boldsymbol{x}_{t}, t\right) x^0(xt):=αˉt xtαˉt 1αˉt ϵθ(xt,t)则接下来的任务就是如何定义损失函数 ℓ total  \ell_{\text {total }} total 了。
在这里插入图片描述

1. 结构损失

  正如上文所述,我们希望输出的结果能够保持源图像的结构信息,而Slicing Vision Transformer这篇论文指出ViT中多头自注意力层的key值 k l k^l kl包含了结构信息,而最后一层的类别Token保留了语义信息。基于此,提出了一种损失通过匹配key值之间的自相似性矩阵 S l S^l Sl来保持输入和输出之间的结构一致性,计算过程如下 ℓ s s i m ( x s r c , x ) = ∥ S l ( x s r c ) − S l ( x ) ∥ F \ell_{ssim}(x_{src},x)=\left \| S^l(x_{src})-S^l(x)\right\|_F ssim(xsrc,x)= Sl(xsrc)Sl(x) F其中 [ S l ( x ) ] i , j = cos ⁡ ( k i l ( x ) , k j l ( x ) ) [S^l(x)]_{i,j}=\cos(k^l_i(x),k^l_j(x)) [Sl(x)]i,j=cos(kil(x),kjl(x)) k i l ( x ) k^l_i(x) kil(x)表示在ViT的第 l l l个多头自注意力层中的第 i i i个key值。虽然自相似损失可以保留输入和输出之间的内容信息,但对于DDPM扩散任务只能提供非常有限的约束。这是因为第 i i i个key值对应着图像中第 i i i个图块的位置,其与其他位置处的key值可能区别很大。为此,作者引入一种对比学习损失,让相同位置的图块之间更相似,而增大不同位置之间的距离,计算过程如下 ℓ cont  ( x s r c , x ) = − ∑ i log ⁡ ( exp ⁡ ( sim ⁡ ( k i l ( x ) , k i l ( x s r c ) ) / τ ) exp ⁡ ( sim ⁡ ( k i l ( x ) , k i l ( x s r c ) ) / τ + ∑ j ≠ i exp ⁡ ( sim ⁡ ( k i l ( x ) , k j l ( x s r c ) ) / τ ) ) \ell_{\text {cont }}\left(\boldsymbol{x}_{s r c}, \boldsymbol{x}\right)=-\sum_{i} \log \left(\frac{\exp \left(\operatorname{sim}\left(k_{i}^{l}(\boldsymbol{x}), k_{i}^{l}\left(\boldsymbol{x}_{s r c}\right)\right) / \tau\right)}{\exp \left(\operatorname{sim}\left(k_{i}^{l}(\boldsymbol{x}), k_{i}^{l}\left(\boldsymbol{x}_{s r c}\right)\right) / \tau+\sum_{j \neq i} \exp \left(\operatorname{sim}\left(k_{i}^{l}(\boldsymbol{x}), k_{j}^{l}\left(\boldsymbol{x}_{s r c}\right)\right) / \tau\right)\right.}\right) cont (xsrc,x)=ilog exp(sim(kil(x),kil(xsrc))/τ+j=iexp(sim(kil(x),kjl(xsrc))/τ)exp(sim(kil(x),kil(xsrc))/τ) 其中 sim ⁡ ( ⋅ , ⋅ ) \operatorname{sim}(\cdot,\cdot) sim(,)表示规范化的余弦相似性函数。

2. 风格损失

  风格损失的目的是增加生成结果和引导之间的语义相似性。对于文本引导,作者提出了 ℓ C L I P \ell_{CLIP} CLIP损失,计算过程如下 ℓ C L I P ( x ; d t r g , x s r c , d s r c ) : = − sim ⁡ ( v t r g , v s r c ) \ell_{C L I P}\left(\boldsymbol{x} ; \boldsymbol{d}_{t r g}, \boldsymbol{x}_{s r c}, \boldsymbol{d}_{s r c}\right):=-\operatorname{sim}\left(\boldsymbol{v}_{t r g}, \boldsymbol{v}_{s r c}\right) CLIP(x;dtrg,xsrc,dsrc):=sim(vtrg,vsrc)其中 v t r g : = E T ( d t r g ) + λ i E I ( x s r c ) − λ s E T ( d s r c ) , v s r c : = E I ( aug ⁡ ( x ) ) \boldsymbol{v}_{t r g}:=E_{T}\left(\boldsymbol{d}_{t r g}\right)+\lambda_{i} E_{I}\left(\boldsymbol{x}_{s r c}\right)-\lambda_{s} E_{T}\left(\boldsymbol{d}_{s r c}\right), \quad \boldsymbol{v}_{s r c}:=E_{I}(\operatorname{aug}(\boldsymbol{x})) vtrg:=ET(dtrg)+λiEI(xsrc)λsET(dsrc),vsrc:=EI(aug(x)) d s r c , d t r g \boldsymbol{d}_{src},\boldsymbol{d}_{t r g} dsrc,dtrg x s r c \boldsymbol{x}_{src} xsrc分别表示源图像的文本描述,目标文本描述(文本引导)和源图像, E T , E I E_T,E_I ET,EI分别表示CLIP模型中的文本和图像编码器, aug ⁡ \operatorname{aug} aug表示CLIP中为了防止出现对抗伪影的增强操作。通过调节 λ s \lambda_s λs λ i \lambda_i λi可以去除源域的文本信息和增加源域的图像信息。而对于图像引导,作者提出一种语义风格损失 ℓ s t y \ell_{sty} sty,正如前文所说ViT的最后一层的类别Token保留了语义信息,因此可以借此来保持源图像和生成图像之间的语义一致性。此外,作者发现仅用语义一致性作为约束,会导致生成的图像之间存在颜色差异,因此作者又引入了图像之间的MSE损失来减少颜色上的差距,义风格损失 ℓ s t y \ell_{sty} sty如下 ℓ s t y ( x t r g , x ) = ∥ e [ C L S ] L ( x t r g ) − e [ C L S ] L ( x ) ∥ 2 + λ m s e ∥ x t r g − x ∥ 2 \ell_{s t y}\left(\boldsymbol{x}_{t r g}, \boldsymbol{x}\right)=\left\|\boldsymbol{e}_{[C L S]}^{L}\left(\boldsymbol{x}_{t r g}\right)-\boldsymbol{e}_{[C L S]}^{L}(\boldsymbol{x})\right\|_{2}+\lambda_{m s e}\left\|\boldsymbol{x}_{t r g}-\boldsymbol{x}\right\|_{2} sty(xtrg,x)= e[CLS]L(xtrg)e[CLS]L(x) 2+λmsextrgx2其中 e [ C L S ] L \boldsymbol{e}_{[C L S]}^{L} e[CLS]L表示最后一层的类别Token。

3. 语义差异损失

  为了加快生成的过程,减少反向去噪的步骤,作者设计了语义差异损失 ℓ s e m \ell_{sem} sem, ℓ s e m ( x t ; x t + 1 ) = − ∥ e [ C L S ] L ( x ^ 0 ( x t ) ) − e [ C L S ] L ( x ^ 0 ( x t + 1 ) ) ∥ 2 \ell_{s e m}\left(\boldsymbol{x}_{t} ; \boldsymbol{x}_{t+1}\right)=-\left\|\boldsymbol{e}_{[C L S]}^{L}\left(\hat{\boldsymbol{x}}_{0}\left(\boldsymbol{x}_{t}\right)\right)-\boldsymbol{e}_{[C L S]}^{L}\left(\hat{\boldsymbol{x}}_{0}\left(\boldsymbol{x}_{t+1}\right)\right)\right\|_{2} sem(xt;xt+1)= e[CLS]L(x^0(xt))e[CLS]L(x^0(xt+1)) 2通过增加相邻两次反向去噪步骤估计的生成结果之间的语义差异,促使生成结果能够更快的变换到目标域中。最终的损失函数 ℓ t o t a l \ell_{total} total如下 ℓ total  = λ 1 ℓ cont  + λ 2 ℓ ssim  + λ 3 ℓ C L I P + λ 4 ℓ sem  + λ 5 ℓ r n g \ell_{\text {total }}=\lambda_{1} \ell_{\text {cont }}+\lambda_{2} \ell_{\text {ssim }}+\lambda_{3} \ell_{C L I P}+\lambda_{4} \ell_{\text {sem }}+\lambda_{5} \ell_{r n g} total =λ1cont +λ2ssim +λ3CLIP+λ4sem +λ5rng其中 ℓ r n g \ell_{rng} rng是一个正则化损失项,为了防止反向去噪过程中出现不合理的步骤。如果采用图像引导,上式中的 ℓ C L I P \ell_{C L I P} CLIP应改为 ℓ s t y \ell_{sty} sty

  为了进一步加快生成过程,作者还提出一种重采样策略。作者发现一个好的生成起始点 X T X_T XT能够有效的提升生成效果,缩短反向去噪步骤。因此作者重复 N N N次对 X T − 1 X_{T-1} XT1的采样步骤,并根据前向扩散公式计算得到 X T X_T XT x T = 1 − β T − 1 x T − 1 + β T − 1 ϵ \boldsymbol{x}_{T}=\sqrt{1-\beta_{T-1}} \boldsymbol{x}_{T-1}+\beta_{T-1} \boldsymbol{\epsilon} xT=1βT1 xT1+βT1ϵ然后,从中选取梯度最容易受到损失函数影响的 X T X_T XT作为起始点。整个算法的计算流程如下所示

在这里插入图片描述
  实验表明,在文本引导和图像引导的图像转换任务中,DiffuseIT都取得了不错的效果。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Java 面试题及答案整理,最新面试题

Java中的内存模型是如何设计的? Java的内存模型主要包括堆、栈、方法区和本地方法栈几个关键部分: 1、堆(Heap): 这是Java内存管理中最大的一块,被所有线程共享。在堆中主要存放对象实例和数组。 2、栈&…

「经验」在博途中 是否可以在 LAD与STL 语言之间进行切换

用惯了STEP7,准确来说是SIMATIC Manager进行编程开发的同学,在转战TIA portal后,通常会经历一段“晦涩”的过度期,包括指令库的微小变动、工作界面的大改等等。 又比如:“在博途中,怎么快速切换LAD与STL语…

7.1.3 Selenium的用法2

目录 1. 切换 Frame 2. 前进后退 3. 对 Cookies 操作 4. 选项卡管理(了解) 5. 异常处理 6. 反屏蔽 7. 无头模式 1. 切换 Frame 我们知道网页中有一种节点叫作 iframe,也就是子 Frame,相当于页面的子页面,它的结构和外部网页的结构完全…

计算机网络、协议、端口号

1,TCP:面向连接服务的协议 2,IP、UDP:面向无连接的协议 3,OST参考模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 低三层:通信子网;中三层:资源子…

Flutter整体框架

Flutter整体框架由三部分组成:Framework、Engine和Embedder。 Framework Framework提供了一个用 Dart 语言编写的现代、反应式框架,由许多抽象的层级组成。它包括一套丰富的布局、动画、绘制、手势UI组件及配套代码,以及更基础的异步、文件、…

数字化转型导师坚鹏:银行业科技产品及零售贷款咨询方法与案例

银行业科技产品及零售贷款咨询方法与实战案例 课程背景: 数字化转型背景下,很多机构存在以下问题: 不知道银行业科技产品咨询方法? 不知道零售贷款咨询方法与案例? 不知道信贷中台咨询方法与案例? …

Mysql之存储过程与函数

Mysql之存储过程与函数 存储过程概述分类创建存储过程一般的语法格式完整的语法格式案例一案例二 调用存储过程调用语法格式 创建存储函数存储过程与函数的查看,修改和删除 存储过程概述 官网解释是:存储过程的英文是 Stored Procedure 。它的思想很简单…

Java项目:36 springboot图书个性化推荐系统的设计与实现003

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot003图书个性化推荐系统的设计与实现 管理员:首页、个人中心、学生管理、图书分类管理、图书信息管理、图书预约管理、退换图书…

java014 - Java继承

1、继承 1.1 继承概述 继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。 1.2 继承格式 public class 子类类名 extends 父类类名 {} 范例:public class son extends …

如何在Matlab代码中使用C代码

一、为什么在Matlab中使用C 性能优化:C语言提供了接近硬件的编程能力,使得开发者可以编写高效率的代码。对于计算密集型任务,尤其是那些需要大量数值计算的场景,用C语言编写的函数通常比MATLAB内置函数运行得更快。这是因为C语言…

Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程

Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程 文章目录 Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程5 生命周期5.1 Vue生命周期钩子5.2 在creat…

12:Logstash|Web日志实时分析

Logstash|Web日志实时分析 logstashlogstash工作结构安装Logstash编写logstash配置文件步骤一:codec类插件插件帮助手册Logstash input插件步骤一:file模块插件filter grok插件Web日志实时分析部署beats与filebeat步骤一:filter grok模块插件logstash 一个数据采集、加工处…

python 基础知识点(蓝桥杯python科目个人复习计划55)

今日复习内容:做题 例题1:体育健将 问题描述: 小蓝作为班级里的体育健将,他被安排在校运会时参加n个体育项目,第i个体育项目参赛需要耗时ai分钟,赛后休息需要bi分钟(这意味着当他参加完这场比…

如何使用程序调用通义千问

之前分享了,使用程序调用文心一言。但是很快文心一言就要收费了。阿里的提供了暂时免费版的基础模型,效果还算可以。所以再分享一下,如何使用程序来调用通义千问的模型。 整体很简单,分三步:导入依赖;获取A…

STL-map和set

目录 一、关联式容器 二、键值对 三、树形结构的关联式容器 3.1 set 3.1.1 set介绍 3.1.2 set的使用 1. set的模板参数列表 2. set的构造 3. set的迭代器(类型是双向迭代器) 4. set的容量 5.set修改操作 6、operator 7. set的使用举例 3.2 map 3.2.1map介绍 3.2.2map的…

QT 打开项目提示 no valid settings file could be found

QT 打开项目提示 no valid settings file could be found 解决方案: 删除对应项目中的.user 文件 在打开项目,而后点击“项目”,在Configure project 栏中选择合适的kits然后点击configure project按钮即可。

C++面试干货---带你梳理常考的面试题(二)

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 1.struct 和 class 区别 1.默认访问权限:struct中的成员默认为public,而class中的成员默认为priv…

绘图设计:用Draw.io绘制图形技巧大全(含统一建模语言UML模板)

一、常见UML模板 1.流程图 2.用例图 include是包含关系,extend是扩展关系 简而言之,include是子集指向父集;而extend是扩展用例指向基础用例(基础用例可以理解为系统核心功能,扩展用例是可选的,不是必须…

SpringBoot自定义注解+反射实现 excel 导入的数据组装及字段校验

在前段时间的开发工作中,接手了一个很简单,很普通的开发任务。 要求实现一个单表的基础数据的批量导入功能。 评估下来,用户每次批量导入的数据量也就几千条,也不大。 是不是很简单,没有骗你们吧。但是呢&#xff0…

OJ_子串计算

题干 c实现 #include <stdio.h> #include <string> #include <map>using namespace std;int main() {char strArr[100];while (scanf("%s", strArr) ! EOF) {string str strArr;map<string, int> subCount;for (int i 0; i < str.size…