论文介绍 FreeControl: 无需额外训练实现文本到图像的空间操控!

论文介绍 FreeControl: 无需额外训练实现文本到图像的空间操控!

论文介绍 FreeControl: Training-Free Spatial Control of Any Text-to-Image Diffusion Model with Any Condition
关注微信公众号: DeepGo

项目地址:https://genforce.github.io/freecontrol/

论文地址:https://arxiv.org/abs/2312.07536

本文介绍一种新颖的图像编辑算法FreeControl,允许用户在不需要额外训练的情况下,对预训练的文本到图像(T2I)扩散模型进行空间控制。它通过分析和合成两个阶段工作,首先从目标概念生成种子图像,并对它们的扩散特征进行主成分分析(PCA)以获得线性子空间作为语义基础。然后,在合成阶段,使用结构引导和外观引导来确保生成的图像在结构上与指导图像一致,同时在外观上与同一种子未进行结构控制生成的图像相似。

alt 上图展示了 FreeControl 方法如何实现对(Stable Diffusion)稳定扩散模型的无训练条件控制。此图分为两个部分(a)和(b),演示了 FreeControl 如何在给定任何模态的输入条件图像下,实现对预训练文本到图像扩散模型的零样本控制。 (a)部分:说明了 FreeControl 如何允许用户在没有任何额外训练的情况下,对预训练的文本到图像扩散模型进行空间控制。这一点突出了 FreeControl 在处理输入条件和文本描述之间存在冲突时,如何在空间和图像-文本对齐之间实现良好平衡的能力。它支持一些难以构造训练对的条件类型(例如,借用行中的 2D 点云和网格投影)。 (b)部分:与 ControlNet 相比,FreeControl 在处理引导图像和文本描述之间存在冲突的情况下,实现了空间和图像-文本对齐之间的良好平衡。此外,它支持多种条件类型,例如 2D 投影的点云和网格,在这些情况下,构建训练对是困难的。

问题、挑战和贡献

该论文尝试解决的主要问题和挑战是如何在不需要额外训练的情况下,为预训练的文本到图像(T2I)扩散模型提供精细的空间控制。现有的方法,如ControlNet,虽然能够提供空间控制,但需要为每种空间条件、模型架构和模型文件训练额外的模块,这既耗时又费力,且难以适应不断演变的模型架构和个性化的模型。此外,这些方法面临高训练成本、可扩展性差和由训练方案导致的限制,如控制信号难以从图像中推断、模型倾向于优先考虑空间条件而非文本描述等问题。

alt 上图提供了 FreeControl 方法的概述,展示了如何在无需额外训练的情况下,对任何预训练的文本到图像(T2I)扩散模型进行控制。该图分为两个主要部分:分析阶段(a)和合成阶段(b),展示了从目标概念(例如,“man”)生成种子图像到最终生成具有控制结构和外观的图像的整个过程。 (a) 分析阶段:在此阶段,FreeControl 使用预训练的扩散模型为目标概念生成种子图像,并对这些图像的扩散特征执行主成分分析(PCA)。通过这种分析,获得了作为语义基础的线性子空间。这一步骤的关键是构建一个时间依赖的基础 ,代表语义结构。 (b) 合成阶段:在此阶段,FreeControl 利用结构引导和外观引导来生成最终图像。结构引导使用在分析阶段得到的语义基础,确保生成图像在结构上与输入条件图像对齐。同时,外观引导促进从相同种子但未经结构控制生成的兄弟图像( )到最终图像( )的外观转移,使得 在内容和风格上与 相似,但结构上遵循输入条件图像( )。

方法概述

FreeControl 分为两个阶段:分析阶段合成阶段

  • 分析阶段:通过对种子图像的扩散特征进行主成分分析(PCA),形成时间依赖的基 ,作为语义结构表示。
  • 合成阶段:结构引导帮助在引导图像 的指导下构建输出图像 的结构模板,而外观引导从相同种子生成的兄弟图像 中借用外观细节。
语义结构表示

在实现文本到图像(T2I)扩散的零样本空间控制时,关键在于需要一种对图像模态不变的语义图像结构的统一表示。根据最近的研究,自监督的 Vision Transformers 和 T2I 扩散模型中的自注意力特征(即键和查询)被认为是图像结构的强大描述符。因此,作者假设操纵这些自注意力特征是实现可控 T2I 扩散的关键。

  • 直接注入方法的局限性: 在 Plug-and-Play(PnP)方法中,尝试直接将引导图像( )的自注意力权重(或等效的特征)注入到图像 的扩散过程中。这种方法容易引入外观泄漏,即不仅传递了 的结构,还传递了外观细节的痕迹,特别是当 属于不同模态时(例如,深度图与自然图像),这在可控生成中是一个问题。

  • 图像结构与外观的分离: 为了分离图像的结构和外观,作者借鉴了 Transformer 特征可视化的方法,对一组语义相似图像的自注意力特征执行主成分分析(PCA)。作者的关键观察是,主要的 PCs 形成了一个语义基础;它与不同图像模态中的对象姿态、形状和场景构成表现出强烈的相关性。作者利用这个基础作为语义结构表示,并在分析阶段获得这些基础。

  • 语义基础的获取: 首先收集一组 张图像 ,这些图像与文本提示 共享目标概念,使用经文本提示 修改后的 生成, 将概念标记插入到故意保持通用的模板中(例如,“一张带背景的[]照片。”)。这使得 覆盖了多样的对象形状、姿态、外观以及图像构成和风格,对于语义基础的表达性至关重要。 通过对 执行 DDIM 逆向,以获得大小为 的时间依赖扩散特征 ,产生 个不同的特征向量,对其执行 PCA 以获得时间依赖的语义基础 作为前 个主成分:

    直观地讲, 跨越了不同图像模态的语义空间 ,允许在合成阶段将图像结构从 传播到 。 一旦计算出来, 可以被相同的文本提示重复使用,或由具有相关概念的提示共享。因此,基础构建的成本可以在合成阶段的多次运行中分摊。

生成阶段

合成阶段通过引导将生成的图像 与引导图像 进行条件化。首先,作者用语义基础 表达 的语义结构。(ps: 原文的公式不知为何都在表达的时候,将大写字母成了小写,如M写成m,注意区分)

  • 引导图像的逆变换:

    作者对 执行DDIM逆变换,以获取尺寸为 的扩散特征 ,并将其投影到 上,得到其语义坐标 ,尺寸为 。为了局部控制前景结构,作者进一步从概念标记的交叉注意力图中派生出掩码 (尺寸 ),全局控制时 设置为1(尺寸 )。接下来介绍如何使用结构引导来生成具有控制结构的

  • 结构引导: 在每个去噪步骤 ,作者通过将扩散特征 投影到 上,获得语义坐标 。结构引导的能量函数 可以表达为:

    其中, 的空间索引, 是平衡权重。阈值 定义为:

    直观来说, 表明前景结构的存在。直观上,前向项引导 的结构与 在前景中对齐,而当 时,后向项通过抑制背景中的假结构来帮助雕刻出前景。

  • 外观引导: 受DSG启发,作者将图像外观表示为 ,即扩散特征 的加权空间均值:

    其中, 的空间索引, 的通道索引, 是Sigmoid函数。作者将 用作权重,以便不同的 编码不同语义组件的外观。对于 ,作者在每个时间步骤 分别计算 。 外观引导的能量函数 可以表达为:

    它惩罚外观表示之间的差异,从而促进从 的外观转移。 (DSG: Diffusion self-guidance for controllable image generation)

  • 引导生成过程: 最后,作者通过结构和外观引导以及无分类器引导,得到修改后的分数估计

    其中, 是各自引导的强度。

实验结果

alt 上图展示了 FreeControl 在支持多种控制信号和三个主要版本的 Stable Diffusion 模型下,生成的图像如何紧密遵循文本提示,同时展示了与输入图像的强烈空间对齐。这突显了 FreeControl 在各种条件下的适用性和效果。

总结

FreeControl支持多种控制条件、模型架构和自定义模型文件,能够处理大多数现有无训练方法失败的挑战性输入条件,并且与基于训练的方法相比,实现了竞争性的合成质量。通过在多个预训练的T2I模型上的广泛定性和定量实验,FreeControl展示了其优越的性能。 尽管它依赖于DDIM逆转过程来提取指导图像的中间特征和计算合成阶段的额外梯度,这导致了推理时间的增加。希望这项工作能为可控的视觉内容创作提供新的见解和分析。

更多细节请参阅论文原文

关注微信公众号: DeepGo

本文由 mdnice 多平台发布

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

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

相关文章

【Java程序设计】【C00266】基于Springboot的超市进存销管理系统(有论文)

【Java程序设计】【C00266】基于Springboot的超市进存销管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的超市进销存系统 本系统分为登录注册模块、管理员功能模块以及员工功能模块。 登录注册模块&#…

Java学习18-- Override方法重写【★】

重点:super类 & 方法重写 ★看不明白多看几遍,记住static优先级>>高于override 重写Override methods★ 重写Override:child class可以覆盖father class中的method,即子类child class和父类father class有相同名称、…

如何部署一个高可用的 Linux 集群?

部署一个高可用的 Linux 集群需要经过多个步骤和考虑因素。以下是一个简要的指南,帮助您了解如何部署一个高可用的 Linux 集群: 确定需求和目标:在开始部署之前,您需要明确高可用性的定义和目标。对于一些组织而言,高…

鸿蒙开发第3篇__大数据量的列表加载性能优化

列表 是最常用到的组件 一 ForEach 渲染控制语法————Foreach Foreach的作用 遍历数组项,并创建相同的布局组件块在组件加载时, 将数组内容数据全部创建对应的组件内容, 渲染到页面上 const swiperImage: Resource[] {$r("app.me…

2024春晚纸牌魔术原理----环形链表的约瑟夫问题

一.题目及剖析 https://www.nowcoder.com/practice/41c399fdb6004b31a6cbb047c641ed8a?tabnote 这道题涉及到数学原理,有一般公式,但我们先不用公式,看看如何用链表模拟出这一过程 二.思路引入 思路很简单,就试创建一个单向循环链表,然后模拟报数,删去对应的节点 三.代码引…

数据库管理-第150期 Oracle Vector DB AI-02(20240212)

数据库管理150期 2024-02-12 数据库管理-第150期 Oracle Vector DB & AI-02(20240212)1 LLM2 LLM面临的挑战3 RAG4 向量数据库LLM总结 数据库管理-第150期 Oracle Vector DB & AI-02(20240212) 作者:胖头鱼的鱼…

LeetCode:69.x的平方根

嗨嗨嗨,二分又来了,淦它, 这个题官解是,C函数法,二分,和牛顿迭代法(暂且搁置), 当然还有暴力(不必讨论,就从0开始一个一个试)&#…

2.11日学习打卡----初学RocketMQ(二)

2.11日学习打卡 一. RocketMQ整合springboot 首先配置pom.xml文件 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>annotationProcessor</scope></dependency><dependency>…

服装效果图为何要用云渲染100?渲染100邀请码1a12

服装行业是充满创意和竞争的领域&#xff0c;而服装效果图是其中重要一环&#xff0c;以前效果图都是本地渲染&#xff0c;现在越来越多的设计师转向云渲染&#xff0c;以国内最专业的平台渲染100为例&#xff0c;云渲染有以下好处&#xff1a; 1、提高工作效率 设计师可以利用…

Netty源码系列 之 FastThreadLocal源码

目录 Netty优化方案之 FastThreadLocal 前言 ThreadLocal ThreadLocal是干什么的&#xff1f; 为什么要使用ThreadLocal工具类去操控存取目标数据到Thread线程 &#xff1f; ThreadLocal的使用场景 目标数据存储到Thread线程对象的哪里&#xff1f; 怎么样把一个目标数据…

JavaWeb:SpingBoot原理 --黑马笔记

1. 配置优先级 在我们前面的课程当中&#xff0c;我们已经讲解了SpringBoot项目当中支持的三类配置文件&#xff1a; application.properties application.yml application.yaml 在SpringBoot项目当中&#xff0c;我们要想配置一个属性&#xff0c;可以通过这三种方式当中…

Ubuntu Desktop - Terminal 输出全部选中 + 复制

Ubuntu Desktop - Terminal 输出全部选中 复制 1. Terminal2. Terminal 最大化3. Edit -> Select All4. Copy & PasteReferences 1. Terminal 2. Terminal 最大化 3. Edit -> Select All 4. Copy & Paste Edit -> Copy or Shift Ctrl C Edit -> Paste…

【Python网络编程之TCP三次握手】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python开发技术 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Python网络编程之[TCP三次握手] 代码见资源&#xff0c;效果图如下一、实验要求二、协议原理2.…

Microsoft Excel 加载数据分析工具

Microsoft Excel 加载数据分析工具 1. 打开 Excel&#xff0c;文件 -> 选项2. 加载项 -> 转到…3. 分析工具库、分析工具库 - VBA4. 打开 Excel&#xff0c;数据 -> 数据分析References 1. 打开 Excel&#xff0c;文件 -> 选项 2. 加载项 -> 转到… ​​​ 3…

Win32 控制台绘图2

之前已经了解在控制台可以调用Win32 api绘图&#xff1b;下面继续加深一下此概念&#xff1b; #include <stdio.h> #include <stdlib.h> #include <windows.h>HWND WINAPI GetConsoleWindow();int main(int argc, char *argv[]) {HWND hwnd; HDC hdc; HPE…

【MySQL探索之旅】MySQL数据库下载及安装教程

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

c++ 内存

c 内存 内存分区 1.代码区&#xff1a;程序的机器指令&#xff0c;可以被机器直接执行。 属性&#xff1a;只读和共享 代码区包含什么&#xff1a; 在程序编译时就已经被分配好了地址&#xff0c;并保存在可执行文件的代码段中。当程序运行时&#xff0c;操作系统会将代码段的…

【C++】类的隐式类型转换

文章目录 前言一、隐式类型转换二、explicit关键字总结 前言 一、隐式类型转换 C 类的隐式类型转换是指当一个类定义了适当的构造函数或转换函数时&#xff0c;可以在需要时自动进行类型转换&#xff0c;而无需显式调用转换函数或构造函数。这使得代码更具灵活性和简洁性。下面…

一种简单的车辆过减速带识别方法

识别方法参考以下图片上的这篇论文第三章&#xff0c;有需要的自行知网下载。 一、离散冲击路面建立 我们之前已经搭建了C级路面&#xff0c;直接在C级路面中间某一段加上减速带就可以。这里我加的减速带&#xff0c;如下图所示&#xff0c;高30mm&#xff0c;凸台宽约20mm&am…

刘谦春晚魔术的数学原理

刘谦春晚魔术的数学原理 文章目录 前言魔术介绍魔术揭秘STEP 1STEP 2STEP 3STEP 4STEP 5STEP 6STEP 7 总结 前言 2024 春晚刘谦的第二个魔术很多人跟着一起做了&#xff0c;都觉得非常神奇。我也跟着操作了一遍&#xff0c;结果一眼就让我看出了背后的数学原理。下面给大家介…