浅析扩散模型与图像生成【应用篇】(九)——UNIT-DDPM

10. UNIT-DDPM: UNpaired Image Translation with Denoising Diffusion Probabilistic Models

  该文提出一种基于DDPM的非配对的图像转换方法,称为UNIT-DDPM,能够实现源域的图像到目标域图像的转换,在保留原有图像内容的同时,转换为目标域图像的风格,如RGB图像到红外图像的转换。与DDPM过程类似,在训练过程中需要训练一个噪声估计器 ϵ θ \epsilon_{\theta} ϵθ,来估计噪声。再次基础上,本文提出的方法还额外训练一个域转换网络 g ϕ g_{\phi} gϕ,来实现源域和目标域图像之间的转换。因此在噪声估计的过程中,不仅需要源域的噪声图像 x t A \mathbf{x}_t^A xtA,还需要转换得到的目标域图像 x ~ t B \tilde{\mathbf{x}}^B_t x~tB。并且这个转换和生成过程是双向的,就是不仅源域向目标域转换,同时目标域也向源域转换。具体的实现方式如下
在这里插入图片描述
  先看训练阶段,源域的图像 x 0 A \mathbf{x}_{0}^{A} x0A经过域转换网络 g ϕ A A g_{\phi^A}^A gϕAA转换之后,得到转换后的目标域图像 x ~ 0 B \tilde{\mathbf{x}}_{0}^{B} x~0B。源域图像 x 0 A \mathbf{x}_{0}^{A} x0A和经过转换的目标域图像 x ~ 0 B \tilde{\mathbf{x}}_{0}^{B} x~0B分别进行扩散,在扩散的过程中我们要对噪声估计器 ϵ θ A A ( x t ( x 0 A , ϵ ) , x ~ t B , t ) \epsilon_{\theta^{A}}^{A}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}\right), \tilde{\mathbf{x}}_{t}^{B}, t\right) ϵθAA(xt(x0A,ϵ),x~tB,t)进行训练。与一般的DDPM不同的是,估计时需要将转换后的目标域图像 x ~ 0 B \tilde{\mathbf{x}}_{0}^{B} x~0B作为一个条件一起输入进去。训练的目标函数与DDPM是类似的,如下所示 L θ ( θ A , θ B ) = E t , x 0 A , ϵ [ ∥ ϵ − ϵ θ A A ( x t ( x 0 A , ϵ ) , x ~ t B , t ) ∥ 2 ] + E t , x 0 B , ϵ [ ∥ ϵ − ϵ θ B B ( x t ( x 0 B , ϵ ) , x ~ t A , t ) ∥ 2 ] \mathcal{L}_{\theta}\left(\theta^{A}, \theta^{B}\right)= \mathbb{E}_{t, \mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}}\left[\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{A}}^{A}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}\right), \tilde{\mathbf{x}}_{t}^{B}, t\right)\right\|^{2}\right] +\mathbb{E}_{t, \mathbf{x}_{0}^{B}, \boldsymbol{\epsilon}}\left[\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{B}}^{B}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{B}, \boldsymbol{\epsilon}\right), \tilde{\mathbf{x}}_{t}^{A}, t\right)\right\|^{2}\right] Lθ(θA,θB)=Et,x0A,ϵ[ ϵϵθAA(xt(x0A,ϵ),x~tB,t) 2]+Et,x0B,ϵ[ ϵϵθBB(xt(x0B,ϵ),x~tA,t) 2]
  值得注意的是,上面的介绍只介绍了一个方向的转换,也就是从源域到目标域的转换。就如我们前文所述,这个转换过程是双向的,同时也要做从目标域到源域的转换,这一点在上述目标函数中也能体现出来,因为转换过程是完全对称的,我们就不再重复介绍了。此外,在训练过程中不仅要对噪声估计器 ϵ θ \epsilon_{\theta} ϵθ进行训练,还需要对域转换网络 g ϕ g_{\phi} gϕ进行训练,其目标函数如下 L ϵ ϕ ( ϕ A , ϕ B ) = E t , x 0 B , ϵ [ ∥ ϵ − ϵ θ A A ( x t ( g ϕ B B ( x 0 B ) , ϵ ) , x t ( x 0 B , ϵ ) , t ) ∥ 2 + ∥ ϵ − ϵ θ B B ( x t ( x 0 B , ϵ ) , g ϕ B B ( x t ( x 0 B ) , ϵ ) , t ) ∥ 2 ] + E t , x 0 A , ϵ [ ∥ ϵ − ϵ θ B B ( x t ( g ϕ A A ( x 0 A ) , ϵ ) , x t ( x 0 A , ϵ ) , t ) ∥ 2 + ∥ ϵ − ϵ θ A A ( x t ( x 0 A , ϵ ) , g ϕ A A ( x t ( x 0 A ) , ϵ ) , t ) ∥ 2 ] \begin{array}{l} \mathcal{L}_{\epsilon^{\phi}}\left(\phi^{A}, \phi^{B}\right)= \\ \mathbb{E}_{t, \mathbf{x}_{0}^{B}, \boldsymbol{\epsilon}}\left[\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{A}}^{A}\left(\mathbf{x}_{t}\left(g_{\phi^{B}}^{B}\left(\mathbf{x}_{0}^{B}\right), \boldsymbol{\epsilon}\right), \mathbf{x}_{t}\left(\mathbf{x}_{0}^{B}, \boldsymbol{\epsilon}\right), t\right)\right\|^{2}\right. \\ \left.\quad+\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{B}}^{B}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{B}, \boldsymbol{\epsilon}\right), g_{\phi^{B}}^{B}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{B}\right), \boldsymbol{\epsilon}\right), t\right)\right\|^{2}\right] \\ +\mathbb{E}_{t, \mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}}\left[\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{B}}^{B}\left(\mathbf{x}_{t}\left(g_{\phi^{A}}^{A}\left(\mathbf{x}_{0}^{A}\right), \boldsymbol{\epsilon}\right), \mathbf{x}_{t}\left(\mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}\right), t\right)\right\|^{2}\right. \\ \left.\quad+\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{A}}^{A}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}\right), g_{\phi^{A}}^{A}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{A}\right), \boldsymbol{\epsilon}\right), t\right)\right\|^{2}\right] \end{array} Lϵϕ(ϕA,ϕB)=Et,x0B,ϵ[ ϵϵθAA(xt(gϕBB(x0B),ϵ),xt(x0B,ϵ),t) 2+ ϵϵθBB(xt(x0B,ϵ),gϕBB(xt(x0B),ϵ),t) 2]+Et,x0A,ϵ[ ϵϵθBB(xt(gϕAA(x0A),ϵ),xt(x0A,ϵ),t) 2+ ϵϵθAA(xt(x0A,ϵ),gϕAA(xt(x0A),ϵ),t) 2]在训练过程中,需要固定噪声估计器的参数 θ A \theta^A θA θ B \theta^B θB。在此基础上,作者还引入了CycleGAN中提到的循环一致性损失,来对域转换网络进行监督 L cyc  ( ϕ A , ϕ B ) = E x 0 B [ ∥ g ϕ A A ( g ϕ B B ( x 0 B ) ) − x 0 B ∥ 1 ] + E x 0 A [ ∥ g ϕ B B ( g ϕ A A ( x 0 A ) ) − x 0 A ∥ 1 ] \begin{array}{l} \mathcal{L}_{\text {cyc }}\left(\phi^{A}, \phi^{B}\right)=\mathbb{E}_{\mathbf{x}_{0}^{B}}\left[\left\|g_{\phi^{A}}^{A}\left(g_{\phi^{B}}^{B}\left(\mathbf{x}_{0}^{B}\right)\right)-\mathbf{x}_{0}^{B}\right\|_{1}\right] +\mathbb{E}_{\mathbf{x}_{0}^{A}}\left[\left\|g_{\phi^{B}}^{B}\left(g_{\phi^{A}}^{A}\left(\mathbf{x}_{0}^{A}\right)\right)-\mathbf{x}_{0}^{A}\right\|_{1}\right] \\ \end{array} Lcyc (ϕA,ϕB)=Ex0B[ gϕAA(gϕBB(x0B))x0B 1]+Ex0A[ gϕBB(gϕAA(x0A))x0A 1]综合后的目标函数如下 L ϕ ( ϕ A , ϕ B ) = L ϵ ϕ ( ϕ A , ϕ B ) + λ cyc  L cyc  ( ϕ A , ϕ B ) \mathcal{L}_{\phi}\left(\phi^{A}, \phi^{B}\right)=\mathcal{L}_{\epsilon^{\phi}}\left(\phi^{A}, \phi^{B}\right)+\lambda_{\text {cyc }} \mathcal{L}_{\text {cyc }}\left(\phi^{A}, \phi^{B}\right) Lϕ(ϕA,ϕB)=Lϵϕ(ϕA,ϕB)+λcyc Lcyc (ϕA,ϕB)整个训练的流程如下图所示
在这里插入图片描述
  完成训练后,我们再来看一下生成过程。
在这里插入图片描述

  首先,从源域中采集一个参考图像 x 0 A \mathbf{x}_{0}^{A} x0A,从标准正态分布中采集一个噪声 x ^ T B \hat{\mathbf{x}}_T^B x^TB。然后对参考图像 x 0 A \mathbf{x}_{0}^{A} x0A进行逐步的扩散得到噪声 x T A \mathbf{x}_{T}^{A} xTA,对噪声 x ^ T B \hat{\mathbf{x}}_T^B x^TB逐步去噪得到目标图像 x ^ 0 B \hat{\mathbf{x}}_0^B x^0B。我们上文讲到噪声估计网络 ϵ θ \epsilon_{\theta} ϵθ的输入不仅有 x ^ t B \hat{\mathbf{x}}_t^B x^tB,还需要 x ^ t A \hat{\mathbf{x}}_t^A x^tA x ^ t B \hat{\mathbf{x}}_t^B x^tB就是上一时刻的去噪结果, x ^ t − 1 B = μ θ B ( x ^ t B , x ^ t A , t ) + Σ θ B ( x t , t ) ϵ B \hat{\mathbf{x}}_{t-1}^{B}=\mu_{\theta^{B}}\left(\hat{\mathbf{x}}_{t}^{B}, \hat{\mathbf{x}}_{t}^{A}, t\right)+\Sigma_{\theta^{B}}\left(\mathbf{x}_{t}, t\right) \epsilon^{B} x^t1B=μθB(x^tB,x^tA,t)+ΣθB(xt,t)ϵB x ^ t A \hat{\mathbf{x}}_t^A x^tA的计算分成了两个阶段,第一阶段从时刻 T T T到时刻 t r + 1 t_r+1 tr+1的过程中, x ^ t A \hat{\mathbf{x}}_t^A x^tA是由扩散过程得到的 x ^ t A = α ˉ t A x 0 A + 1 − α ˉ t A ϵ A \hat{\mathbf{x}}_{t}^{A}=\sqrt{\bar{\alpha}_{t^{A}}} \mathbf{x}_{0}^{A}+\sqrt{1-\bar{\alpha}_{t^{A}}} \boldsymbol{\epsilon}^{A} x^tA=αˉtA x0A+1αˉtA ϵA第二阶段从 t r t_r tr到1的过程中, x ^ t A \hat{\mathbf{x}}_t^A x^tA是通过去噪的方式计算的 x ^ t − 1 A = 1 1 − α t ( x ^ t A − 1 − α t 1 − α t ‾ ϵ θ A ( x ^ t A , x ^ t B , t ) ) + σ t ϵ A \hat{\mathbf{x}}_{t-1}^{A}=\frac{1}{\sqrt{1-\alpha_{t}}}\left(\hat{\mathbf{x}}_{t}^{A}-\frac{1-\alpha_{t}}{\sqrt{1-\overline{\alpha_{t}}}} \epsilon_{\theta^{A}}\left(\hat{\mathbf{x}}_{t}^{A}, \hat{\mathbf{x}}_{t}^{B}, t\right)\right)+\sigma_{t} \boldsymbol{\epsilon}^{A} x^t1A=1αt 1(x^tA1αt 1αtϵθA(x^tA,x^tB,t))+σtϵA这个时间点 t r t_r tr被称为释放时刻(release time),整体的生成过程如下图所示
在这里插入图片描述

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

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

相关文章

现货黄金做对冲的具体方法

现货黄金做对冲的具体方法是运用金融衍生工具和策略,以减轻或消除持有现货黄金所面临的市场风险。具体而言,投资者可通过期货合约、期权、掉期等金融工具来实现对冲,保障其投资价值不受金价波动的负面影响。  期货合约在对冲中…

让数据在两个buckets之间传输 - Google Storage Transfer Service

在业务场景中, 有时我们不想直接暴露数据存储空间给上游系统, 而需要设置1个landing Path 让上游系统发送数据 如图: 我们只需grant landing bucket 的权限给上游系统, 而上游系统是访问不了storage bucket的保证了数据隔离 但是…

vue3与Electron构建跨平台应用(webpack)

一、创建vue3项目 vue create vue3_webpack_electron 二、安装Electron npm install --save-dev electron Electron 三、vue add electron-builder vue add electron-builder

RK3568平台开发系列讲解(pinctrl篇)pinctrl 子系统函数操作集

🚀返回专栏总目录 文章目录 一、pinctrl_ops二、pinctrl_ops三、pinconf_ops沉淀、分享、成长,让自己和他人都能有所收获!😄 在 pinctrl_desc 结构体中总共有三个函数操作集, 具体内容如下所示: const struct pinctrl_ops *pctlops; // 引脚控制操作函数指针 const

【机器学习】基于萤火虫算法优化的BP神经网络分类预测(FA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】萤火虫算法(FA)原理及实现 2.设计与实现 数据集: 多输入多输出:样本特征24,标签类别4。…

html常见标签

width宽度 height高度 border边框 1px(边框线条宽度) solid(实线) red(红色) border-radius: 100px 边框圆角 background-color:red(背景颜色为红色) margin&#xf…

STL_list文档使用介绍与底层代码实现简介

文章目录 list介绍list的使用构造函数(constructor)迭代器list capacitylist modify(修改)其他接口函数list迭代器失效问题 list实现基础框架(节点类)基础框架(迭代器类)基础框架(链…

提供数字免疫力:采取整体方法来优化您的网络

采用数字技术已成为许多美国企业的关键竞争优势,导致其在与新部署的云解决方案的安全连接方面的投资不断增加。然而,随着越来越多的关键应用程序迁移到云端,公司保护其敏感数据和资源变得更具挑战性,因为这些资产现在超出了内部防…

uniapp——第3篇:自定义组件、组件间传数据

前提,建议先学会前端几大基础:HTML、CSS、JS、Ajax,还有一定要会Vue!(Vue2\Vue3)都要会!!!不然不好懂 一、组件是啥玩意? 我之前讲vue2的文章讲过 Vue全家桶:vue2vue3全…

Python通过Ctypes调用C++类,实测有效

文章目录 前言创建vs dll工程添加外部库编辑代码编译测试参考 前言 在软件开发中,有时候需要Python与C相结合,以充分发挥两者的优势 。Python作为一种高级编程语言,具有简洁易读的特点,适用于快速开发和原型设计。而C则是一种性能…

小程序绕过 sign 签名

之前看到了一篇文章【小程序绕过sign签名思路】之前在做小程序渗透时也遇到了这种情况,但是直接放弃测试了,发现这种思路后,又遇到了这种情况,记录下过程。 并没有漏洞分享,仅仅是把小程序也分享出来,方便…

上位机图像处理和嵌入式模块部署(qmacvisual轮廓查找)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,图像的处理流程一般都是这样的,即灰度化-》降噪-》边缘检测-》二值化-》开闭运算-》轮廓检测。虽然前面的几个…

AI开源概览及工具使用

一、前言 随着ChatGPT热度的攀升,越来越多的公司也相继推出了自己的AI大模型,如文心一言、通义千问等。各大应用也开始内置AI玩法,如抖音的AI特效; 关联资源:代码 GitHub、相关论文、项目Demo、产品文档、Grok Ai、gr…

多数据源 - dynamic-datasource | 进阶 - 动态添加、移除数据源

文章目录 实现原理示例程序🗯️ 上节回顾:前节中,了解了 dynamic-datasource 的事务支持。 👉 本节目标:了解 dynamic-datasource 的进阶用法 - 动态添加/移除数据源。 动态添加/移除数据源:指在系统运行过程中动态的添加数据源,删除数据源,多使用于基于数据库的多租…

探讨苹果 Vision Pro 的空间视频(术语辨析、关键技术、思考)

背景:一位资深视频技术从业者在 Pixvana 工作,积累了丰富的捕获、处理、编码、流传和播放空间媒体经验。 一、术语 空间视频:传统的 3D 视频,呈矩形,包含左右眼视图,如 iPhone15 Pro 和 Vision Pro 可录制。沉浸式视频:非矩形的环绕式视频体验,通常由两个或多个传感器…

【C++】仿函数优先级队列反向迭代器

目录 一、优先级队列 1、priority_queue 的介绍 2、priority_queue 的使用 3、 priority_queue 的模拟实现 1)priority_queue()/priority_queue(first, last) 2)push(x) 3)pop() 4&#…

Datawhale 零基础入门数据挖掘-Task1 赛题理解

一、 赛题理解 Tip:此部分为零基础入门数据挖掘的 Task1 赛题理解 部分,为大家入门数据挖掘比赛提供一个基本的赛题入门讲解,欢迎后续大家多多交流。 赛题:零基础入门数据挖掘 - 二手车交易价格预测 地址:零基础入门数据挖掘 -…

【Vue】三、使用ElementUI实现图片上传

目录 一、前端代码实现 二、后端代码实现 三、调试效果实现 一、前端代码实现 废话不多说直接上代码 <el-form-item prop"image" label"上传图片" v-model"form.image"><el-upload:action"http://localhost:8…

关于vuex 的模块开发和使用

1、文件结构 2、modules 文件内容 例子&#xff1a; ccc.js 文件内容如下&#xff1a; // 基础配置项 const state {aa: [] }const mutations {setaa (state, data) {state.aa data} }const actions {} export default {namespaced: true, state,mutations,actions } **注…

【Linux】进程通信

目录 一、管道通信 二、共享内存 三、消息队列 一、管道通信 管道是由操作系统维护的一个文件&#xff0c;管道通信的本质就是将管道文件作为临界资源&#xff0c;实现不同进程之间的数据读写&#xff0c;但是管道只允许父子进程或者兄弟进程之间的通信。 管道文件本身是全…