(2024,预训练和微调扩散,图编码器,图特征与CLIP特征对齐)场景图到图像合成:集成 CLIP 指导与扩散模型中的场景图条件

Scene Graph to Image Synthesis- Integrating CLIP Guidance with Graph Conditioning in Diffusion Models

公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群)

目录

0. 摘要

3. 方法

3.1 扩散背景

3.2 场景图编码器

3.3 使用 CLIP 引导的图条件进行扩散模型微调

3.4 基于 GAN 的 CLIP 对齐

3.5 采样过程

4. 实验


0. 摘要

生成模型的进展已经引起了在遵循特定结构准则的同时生成图像的重要兴趣。场景图到图像生成是一项生成与给定场景图一致的图像的任务。然而,视觉场景的复杂性,使得根据场景图中指定关系来准确对齐对象成为一项挑战。现有方法通过首先预测场景布局,然后使用对抗训练从这些布局生成图像来处理这项任务。

在这项工作中,我们介绍了一种新颖的方法,可以从场景图生成图像,从而消除预测布局的需要。我们利用预训练的文本到图像扩散模型 CLIP 指导来将图形知识转化为图像。

  • 我们首先预训练我们的场景图编码器,使用基于 GAN 的训练将场景图特征与相应图像的 CLIP 特征对齐。
  • 此外,我们将场景图特征与给定场景图中的对象标签的 CLIP 嵌入融合,以创建一种场景图一致的 CLIP 引导的调节信号
  • 在调节输入中,对象嵌入提供图像的粗略结构,场景图特征基于对象之间的关系提供结构对齐。
  • 最后,我们使用场景图一致的调节信号对预训练的扩散模型进行微调,其中包括重建和 CLIP 对齐损失。

详细的实验证明,我们的方法在 COCO-stuff 和 Visual Genome 数据集的标准基准上优于现有方法。

场景图表示视觉场景的图形,其中节点对应于对象,边表示这些对象之间的关系或交互。

自然语言句子往往又长且结构松散,用于语义解释时对语法的依赖较大。语言的固有歧义性,即不同的句子可能传达相同的概念,会在训练过程中带来不稳定性的风险。这在需要精确描述约束的至关重要的场景中特别显著。

3. 方法

3.1 扩散背景

3.2 场景图编码器

我们使用多层图卷积网络从场景图生成图特征。我们遵循现有的场景图编码器架构,以与现有方法进行公正比较。

场景图 S 包含一组对象 S_o 和一组关系 S_r。S 使用关系三元组 (o_i, r_ij, o_j) 表示,其中 o_i ∈ S_o 和 o_j ∈ S_o 是对象集 S_o 中的两个对象,而 r_ij ∈ S_r 是第 i 个和第 j 个对象之间的关系。图编码器融合个体对象嵌入和个体关系嵌入,以生成全局场景图嵌入。

对于对象 o_i,我们取 Out(o_i) 的集合作为 o_i 具有出向定向边(outgoing directed edge)的对象集合。集合 In(o_i) 表示对象 o_i 具有来自这些对象的入向定向边(incoming directed edge)的对象集合。我们按照以下方式为对象 o_i 找到嵌入:

其中 G_(o_i),G(o_j) ∈ R^(d_o) 分别是对象 o_i 和 o_j 的嵌入。G_(r_ij),G_(r_ji) ∈ R^(d_r) 分别是关系 r_ij 和 r_ji 的嵌入。F^out_o,F^in_o 是图卷积层,F^pool 是平均池化层。类似于此,我们按照以下方式找到关系嵌入: 

其中 F^rel 是一个图卷积层。在获取这些个体对象和关系嵌入之后,我们按照以下方式计算全局图特征 G^s_global。首先,我们使用包含两个层的 MLP F^o_(d_g) 和 F^r_(d_g) 分别将 d_o 维度的对象嵌入和 d_r 维度的关系嵌入映射到 d_g 维度的嵌入。在获取相同维度嵌入之后,我们按照以下方式找到表示每个场景图三元组的嵌入: 

最后,计算场景图 S 的全局嵌入 G^s_global,方法是将个体三元组嵌入连接起来,然后将其映射到 d_g 维度的特征:

我们在微调文本到图像扩散模型时使用 G^s_global 作为调节信号。

3.3 使用 CLIP 引导的图条件进行扩散模型微调

设 S^label 表示场景图中存在的对象的语义标签。将语义标签通过 CLIP 文本编码器传递,以生成对象标签嵌入。然后通过图编码器将 S 传递,使用公式 5 生成嵌入 G^s_global。对象标签嵌入捕捉图像的实体级信息,而 G^s_global 则捕捉这些实体之间的交互。设 label_i 为 S 中第 i 个对象的语义标签。然后,

最后,我们融合 G^s_global 和所有标签的 S_(label_i),生成微调扩散模型的调节信号:

我们添加文本填充以生成相同维度的条件信号,不考虑场景图中存在的对象数量。

然而,我们注意到 G^s_global 和 S_(label_i) 的嵌入空间是不同的。因此,简单的连接并不有用。此外,文本到图像预训练扩散模型使用特定的文本编码器,例如 CLIP 文本编码器。因此,需要提供与 CLIP 嵌入空间对齐的特征。否则,领域不匹配可能导致图像生成质量不佳。为此,我们引导我们的图编码器生成与 CLIP 空间中相应图像特征对齐的嵌入。接下来,我们讨论训练和对齐策略。

训练目标。我们的学习目标是双重的。首先,扩散模型应学习图像-场景图对的分布。其次,我们希望将图编码器的输出映射到一个空间,使其与文本到图像扩散模型的先验语义知识对齐。我们通过以下方式实现这些目标。

重构损失:我们使用重构损失来引导扩散模型学习数据的分布。损失 L_recon 如下: 

其中 ˆx_θ 是扩散的去噪网络,x_t 是扩散时间步 t 的有噪样本,而 S_cond 是获得的调制信号。 (x, S) 是从数据中随机采样的图像-场景图对。

对齐损失:为了实现第二个目标,即将 G^s_global 与 CLIP 空间对齐,我们在 G^s_global 和相应图像的 CLIP 视觉特征之间应用均方差误差损失。对于图像-图对 (x, S),损失 L_CLIP 如下:

此外,我们还使用最大均值差异(Maximum Mean Discrepancy,MMD)损失 [L i 等人,2017] 来弥合 G^s_global 和 CLIP 视觉特征之间的域差距。在我们的实验中,我们观察到 MMD 损失使训练更稳定,提高了定量结果和图像质量。MMD 损失定义如下:

其中 c 是输入图像的 CLIP 特征,而 G^s_global 是相应场景图的图编码器输出。ϕ 是核函数。我们结合 L_CLIP 和 L_MMD 定义一个对齐损失,如下: 

其中 β 是一个超参数。

总损失:现在通过考虑重构损失和对齐损失,我们定义我们的训练目标如下: 

其中 λ 是一个超参数。我们使用 L_train 对扩散模型和场景图编码器进行微调。

尽管 L_align 引导场景图嵌入与 CLIP 特征空间的对齐,但最初场景图编码器输出的潜在空间与 CLIP 特征空间差异很大。为了弥合这个差距,我们提出了基于 GAN 的 CLIP 对齐模块(GAN-based CLIP alignment,GCA)来预训练场景图编码器。接下来,我们讨论 GCA。

3.4 基于 GAN 的 CLIP 对齐

我们使用基于 GAN 的预训练来将 G^s_global 与 CLIP 特征对齐。图 3 提供了我们基于 GAN 的 CLIP 对齐模块的概述。我们将场景图编码器视为生成器,G^s_global 视为我们生成的数据。CLIP 视觉特征 c 构成真实数据。鉴别器被训练以预测输入来自真实数据还是生成的数据。它引导我们的生成器的输出与 CLIP 特征对齐。图编码器的训练由 L_graph 引导,其中给定场景图 S 作为输入时,G(S) 是场景图编码器的输出。L_graph 是用于基于 GAN 的架构的标准生成器损失:

鉴别器的训练由 L_disc 引导,这是基于 GAN 的架构的标准鉴别器损失。设 D(c) 是鉴别器在输入来自真实分布(CLIP 特征 c)时预测的概率。 

3.5 采样过程

在图 2 中,第 2 阶段提供了采样过程的概述。一旦扩散网络训练完成,我们可以从潜在噪声 ϵ 中采样图像。对于微调的去噪 Unet ˆx_θ,我们可以在给定场景图 S 的条件下采样潜在,如下所示: 

其中 S_cond 是场景图调节信号,ϵ ∼ N(0, I)。然后使用扩散的潜在解码器对 x_latent 进行解码,得到一幅图像。生成的图像与输入的场景图很好地对齐。

4. 实验

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

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

相关文章

Hugo使用且部署GitHubPages

hugo的使用 20201121 Hugo是由Go语言实现的静态网站生成器。简单、易用、高效、易扩展、快速部署。 安装Hugo 0.windows安装(releases) 下载地址:https://github.com/spf13/hugo/releases。 配置环境变量 验证测试是否安装成功 hugo help1. 二进制安装&#xf…

Asp.Net Core 获取应用程序相关目录

在ASP.NET Core中,可以通过以下三种方式获取应用程序所在目录: 1、使用AppContext.BaseDirectory属性: string appDirectory AppContext.BaseDirectory; 例如:D:\后端项目\testCore\test.WebApi\bin\Debug\net6.0\ 2、使用…

Jmeter实现造10个账户、单元数据

今天简单介绍Jemeter的入门,Jmeter 的安装这边就跳过,直接讲述如何使用JMETER,如何运用Jmeter进行测试。Jmeter实现造10个账户、单元数据,之后大数据量批量造数据以此类推。 1.下载jmeter软件 2.安装jmeter软件 3.运行\bin\jmeter.bat批处理文件 4.选择脚本文件 5.…

Adobe ColdFusion 反序列化漏洞复现(CVE-2023-38203)

0x01 产品简介 Adobe ColdFusion是美国奥多比(Adobe)公司的一套快速应用程序开发平台。该平台包括集成开发环境和脚本语言。 0x02 漏洞概述 Adobe ColdFusion存在代码问题漏洞,该漏洞源于受到不受信任数据反序列化漏洞的影响,攻击者通过漏洞可以代码执行,可导致服务器失…

Linux 驱动开发基础知识—— 具体单板的 LED 驱动程序(五)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…

Unity应用在车机上启动有概率黑屏的解决方案

问题描述 最近将游戏适配到车机上(Android系统),碰到了一个严重bug,启动的时候有概率会遇到黑屏,表现就是全黑,无法进入Unity的场景。 经过查看LogCat日志,也没有任何报错,也没有任…

代码随想录刷题笔记-Day12

1. 二叉树的递归遍历 144. 二叉树的前序遍历https://leetcode.cn/problems/binary-tree-preorder-traversal/94. 二叉树的中序遍历https://leetcode.cn/problems/binary-tree-inorder-traversal/145. 二叉树的后续遍历https://leetcode.cn/problems/binary-tree-postorder-tra…

java获取linux和window序列号

前言 获取系统序列号在Java中并不是一个直接支持的功能,因为Java语言本身并不提供直接访问硬件级别的信息,如CPU序列号。但是,我们可以使用一些平台特定的工具或命令来实现这一功能。下面我将展示如何使用Java获取Windows和Linux系统上的CPU…

【Qt无门槛入门】信号以及信号机制及其常用控件(1)

信号与信号槽 信号源:由哪个控件发出的信号。 信号的类型:用户进行不同的操作,就可能出发不同的信号。 信号处理的方式:槽(slot)某个对象接收到这个信号之后,就会做一些相关的处理动作。但是Qt对象不会无故…

【MAC】Multi-Level Monte Carlo Actor-Critic阅读笔记

基本思想: 利用多层次蒙特卡洛方法(Multi-Level Monte Carlo,MLMC)和Actor-Critic算法,解决平均奖励强化学习中的快速混合问题。 快速混合? 在强化学习中,当我们说一个策略"混合得快"…

HCS-华为云Stack-FusionSphere

HCS-华为云Stack-FusionSphere FusionSphere是华为面向多行业客户推出的云操作系统解决方案。 FusionSphere基于开放的OpenStack架构,并针对企业云计算数据中心场景进行设计和优化,提供了强大的虚拟化功能和资源池管理能力、丰富的云基础服务组件和工具…

文心一言情感关怀之旅

【AGIFoundathon】文心一言情感关怀之旅,让我们一起来体验吧! 上传一张照片,用ernie-bot生成专属于你的小故事! 此项目主要使用clip_interrogator获取图片的关键信息,然后将此关键信息用百度翻译API翻译成中文后,使用封装了⼀⾔API的Ernie Bot SDK(ernie-bot)生成故事…

「研发部」GitFlow规范-升级版(二)

前言 上一篇文章简单整理过一次产研团队的GitFlow《Git 分支管理及Code Review 流程 (一)》 GitFlow是一种流行的Git分支管理策略,它提供了一种结构化的方式来管理项目的开发和发布流程。以下是GitFlow规范的主要组成部分: 主要分支: mast…

上升子序列的最大长度,递归-记忆化搜索-动态规划三步走

题目描述: 小明有一个数组,他想从数组任意元素开始向后遍历,找出所有上升子序列,并计算出最长的上升子序列的长度。 数据范围: 每组数据长度满足 1≤n≤200 1≤n≤200 , 数据大小满足 1≤val≤350 1≤val≤…

牛客BC151 数位五五

今天有点懒&#xff0c;就是一篇水文吧。 第一种方法用循环的方式来解决。 int main() {int a, b, count 0;scanf("%d %d", &a, &b);for (int i a; i < b; i) {int val i, sum 0;while (val) {sum val % 10;val / 10;}if (sum % 5 0) count;}pri…

从零学习Hession RPC

为什么学习Hessian RPC&#xff1f; 存粹的RPC&#xff0c;只解决PRC的四个核心问题&#xff08;1.网络通信2.协议 3.序列化 4.代理&#xff09;Java写的HessianRPC落伍了&#xff0c;但是它的序列化方式还保存着&#xff0c;被Dubbo(Hessian Lite)使用。 被落伍&#xff0c;只…

缓存技术—redis

一、redis介绍 1.什么是NoSQL NosQL (Not-Only:sQL)&#xff0c;泛指非关系型的数据库(关系型数据库: 以二维表形式存储数据) 非关系型的数据库现在成了一个极其热门的新领域&#xff0c;发展非常迅速。而传统的关系数据库在应付超大规模和高并发的网站已经显得力不从…

Django笔记(六):DRF框架

首 前后端分离是互联网应用开发的标准使用方式&#xff0c;让前后端通过接口实现解耦&#xff0c;能够更好的进行开发和维护。 RESTful接口常见规范 在接口设计中&#xff0c;大家遵循一定的规范可以减少很多不必要的麻烦&#xff0c;例如url应有一定辨识度&#xff0c;可以…

精品代码,接稳了!EI顶刊复现:计及风电波动及电解槽运行特性的电氢混合储能容量优化配置程序代码!

适用平台/参考文献&#xff1a;MatlabYalmipCplex/Gurobi&#xff1b; 参考文献&#xff1a;中国电机工程学报首发论文《平抑风电波动的电-氢混合储能容量优化配置》 程序首先利用EMD将原始风电功率信号分解为直接并网分量和混合储能系统&#xff08;HESS&#xff09;功率任务…

算法训练营Day60(单调栈)

84.柱状图的最大矩形 84. 柱状图中最大的矩形 - 力扣&#xff08;LeetCode&#xff09; 注意首尾加0的细节就可 class Solution {public int largestRectangleArea(int[] heights) {Deque<Integer> stack new LinkedList<>();int[] newHeight new int[heights.…