当前位置: 首页 > news >正文

MuLan:模仿人类画家的多对象图像生成

在图像生成领域,处理包含多个对象及其空间关系、相对大小、重叠和属性绑定的复杂提示时,现有的文本到图像模型仍面临挑战:当文本提示中包含多个对象,并且这些对象之间存在特定的空间关系时,现有模型往往难以准确地捕捉和表现这些复杂的场景。

例如,假设有一个文本提示是“一个橙色的南瓜放在黑色的门的右边”。对于这样的提示,现有的文本到图像(T2I)模型可能无法正确地将南瓜和门的相对位置以及属性(如颜色)表现出来。这主要是因为现有模型在空间推理能力上存在限制,并且它们与扩散模型的结合并不总是能够精确地理解和处理复杂的文本提示。

自香港科技大学、加州大学洛杉矶分校、宾夕法尼亚州立大学和马里兰大学的研究团队提出了一个无需训练的多模态大型语言模型(LLM)代理。MuLan的核心思想是将复杂的文本提示分解为一系列更简单的子提示,每个子提示只关注生成提示中的一个对象。这种方法模仿了人类画家的工作方式,即先制定一个高级的计划,然后逐步绘制每个对象,并在必要时进行修正。

MuLan生成的图像与其他几种方法生成的图像的对比

方法 

MuLan模型的架构,包括三个主要组件:LLM规划、单对象扩散与注意力引导,以及VLM反馈控制

如图1所示MuLan由三个主要部分组成:

  1. LLM规划(LLM planning):这部分涉及使用大型语言模型(LLM)来规划图像生成的总体布局。LLM负责将复杂的文本提示分解为一系列更易管理的子提示,每个子提示关注生成提示中的一个对象。

  2. 单一对象扩散与注意力引导(Single-object diffusion with attention guidance):在这一步,MuLan集中于根据子提示和之前已生成的对象来生成一个单一的对象。LLM为新对象提供一个大致的布局规划,而注意力引导则确保对象在图像中的位置和形状精确,通过提供一个准确的掩码来实现。

  3. VLM反馈控制(VLM-feedback control):这是MuLan中的一个反馈循环机制,使用视觉-语言模型(VLM)来评估当前生成步骤的结果,并与原始文本提示进行对比。如果发现任何偏差或错误,VLM将提供反馈,MuLan据此调整扩散模型的超参数,以重新生成图像,确保每一步的生成结果都尽可能地符合原始提示的要求。

研究者设计的MuLan系统利用LLM的高级语言理解能力,自动地从原始文本提示中识别出各个对象,并确定它们在图像中的相对位置和顺序。这一过程模仿了人类画家在开始绘画前制定计划的方式,LLM根据预定义的空间顺序——从左到右、从下到上——来组织对象,确保生成的图像布局合理且符合人类的直观感受。

为了实现这一目标,研究者为LLM提供了一个明确的任务描述,指导模型将文本提示中的对象按照绘画的顺序进行排列。LLM根据这个描述,生成一个对象列表,这个列表决定了在图像生成过程中各个对象的创建顺序。这个过程不仅需要LLM理解文本中的对象和它们的关系,还需要它能够预测并规划出这些对象在最终图像中的布局。

研究者还为LLM设计了一套模板,用于在生成过程中对每个对象的大致位置和大小进行规划。这包括确定对象是在另一个对象的左边、右边、上方或下方,以及估计对象的数量。通过这种方式,MuLan能够在生成每个对象之前,就对它们在图像中的分布有一个初步的规划。

MuLan 利用大型语言模型(LLM)规划和注意力引导来逐步生成图像过程开始于LLM规划的粗略掩码,该掩码定义了新对象在图像中的预期位置和大小。这个掩码基于LLM对对象相对位置的规划,考虑到图像中当前可用的空间。例如,如果前一个对象已经放置在图像的左侧,LLM将决定新对象的位置,可能是在右侧或者上方,并估计对象的尺寸。

接下来,MuLan使用稳定扩散模型在由注意力掩码定义的边界框内生成对象。注意力引导在这一步骤中发挥了至关重要的作用,它确保了对象在生成过程中能够被精确地定位。就是说MuLan利用反向引导方法,通过调整扩散模型的输入潜在表示,来引导对象在图像中的正确位置生成。

MuLan还考虑了对象间的重叠问题。在生成新对象时,如果LLM判断存在与前一个对象的重叠,MuLan会计算几个候选的粗略掩码,这些掩码对应不同的重叠比例。然后,MuLan会使用这些掩码生成几个候选图像,并通过计算输入提示与生成图像之间的一致性得分来选择最佳图像。

最后,MuLan通过视觉-语言模型(VLM)进行反馈控制,以确保生成的每个对象都与原始文本提示保持一致。如果在任何生成阶段检测到错误,VLM将提供反馈,MuLan据此调整扩散模型的参数,重新生成对象。

MuLan在第n阶段生成单个对象objn时的流程,包括LLM规划粗糙掩码、注意力引导和单对象扩散

MuLan在生成每个对象后,会利用VLM对生成的图像进行评估。VLM的作用是提供对当前生成步骤的反馈,确保图像中的对象与原始文本提示保持一致。如果VLM检测到生成的对象与预期不符,比如对象的位置、大小或属性与文本描述不匹配,它将向MuLan提供反馈,指出需要调整的地方。

基于VLM的反馈,MuLan可以调整扩散模型的超参数,对图像进行重新生成。这个过程可以重复进行,直到生成的图像满足文本提示的要求。这种自适应的反馈和调整机制是MuLan系统的核心特点之一,它使得系统能够持续优化生成结果,提高图像的准确性和真实性。

除了与VLM的交互外,MuLan还考虑了人类用户的参与。在实际应用中,人类用户可能希望对生成过程进行监督或提出特定要求。MuLan的设计允许人类用户在生成过程中提供输入,比如调整文本提示或对生成的图像给出评价。这种用户交互可以进一步提高生成图像的满意度,并使MuLan更加灵活和适应不同的应用场景。

如何根据前一个生成的对象objn−1的精确掩码来计算当前对象objn的粗糙掩码

 实验

研究者为了评估MuLan框架,构建了一个由不同基准测试组成的提示数据集。这个数据集专注于生成包含多个对象、空间关系和属性绑定的复杂提示。研究者首先从T2I-CompBench收集了所有复杂的空间提示,并通过ChatGPT生成了约400个具有不同对象、空间关系和属性绑定的提示,使提示集包含约600个提示。为了进一步评估框架在极其复杂和困难的提示上的能力,研究者手动添加了SDXL无法生成的提示,形成了包含200个提示的困难提示数据集。

作为一个无需训练的框架,MuLan可以集成到任何现有的扩散模型中。研究者评估了两种稳定扩散模型与MuLan框架的结合效果,包括Stable Diffusion v1.4和最先进的Stable Diffusion XL。为了验证MuLan的优越性,研究者将其与先前的可控生成方法和通用T2I生成方法进行了比较,包括Structure Diffusion、Promptist、原始的Stable Diffusion v1.4、原始的SDXL和最近的SOTA扩散模型PixArt-α。

MuLan使用GPT-4作为LLM规划器,并使用LLaVA-1.5作为VLM检查器提供反馈。研究者还进行了消融研究,以展示VLM提供的反馈控制在所提出的框架中的重要性,以及不同VLM的影响。研究者发现在注意力引导过程中使用的注意力块至关重要,这些块可以被分类为近输入块、近中间块和近输出块。在主要实验中,研究者使用了近中间块,并展示了不同块的消融结果。

由于提示数据集包含具有复杂组成的文本,研究者设计了一个问卷,全面调查生成图像与相应输入文本之间的一致性。问卷由三个方面组成 - 对象完整性、属性绑定的正确性以及空间关系的准确性。对于每个问题,研究者只设置了两个选项(是或否),没有歧义。研究者使用问卷询问最新一代的多模态大型语言模型(GPT-4V)和人类评估者对生成图像的质量进行评估。

研究者使用GPT-4V对不同方法和不同基础模型生成的图像进行了评估结果显示,MuLan框架在与其他可控生成方法和T2I生成方法相比时,能够实现最佳性能。特别是在属性绑定和空间关系的两个“更难”方面,MuLan能够以较大优势超越其他方法。

不同方法生成的图像在GPT-4V评估和人类评估下的性能对比
由不同方法生成的图像的更多定性结果
不同注意力块对扩散生成过程中性能的影响

研究者从提示数据集中随机抽取了50个提示,用于消融研究中的所有实验。研究者发现,近中间块在生成控制和性能方面能够实现最佳结果,通常包含最丰富的语义信息。

VLM反馈控制是MuLan中提供反馈和调整生成过程以确保每个阶段正确生成的关键组件。研究者展示了通过从整个框架中移除反馈控制的重要性。结果显示,如果没有反馈控制,结果会大大恶化,因为没有保证或适应性调整每个生成阶段,这验证了VLM提供的反馈控制对于处理复杂提示至关重要。

有无VLM反馈控制在MuLan性能上的差异
在MuLan中使用不同VLM对性能的影响

实验表明,MuLan优于先前的方法,展示了MuLan作为可控扩散生成新范式的潜力。

在MuLan模型中使用不同视觉-语言模型(VLM)对整体性能的影响

尽管MuLan取得了显著的成果,但仍存在需要在未来工作中进一步解决的局限性。由于整个生成包含多个阶段,根据对象的数量,它将比单阶段生成方法需要更长的时间。另一方面,LLM规划器可能会错误地解析输入提示,导致错误的分解。这可以通过首先通过LLM重写输入提示来解决,以便于后续处理。

相关文章:

MuLan:模仿人类画家的多对象图像生成

在图像生成领域,处理包含多个对象及其空间关系、相对大小、重叠和属性绑定的复杂提示时,现有的文本到图像模型仍面临挑战:当文本提示中包含多个对象,并且这些对象之间存在特定的空间关系时,现有模型往往难以准确地捕捉…...

如何在Android中实现网络通信,如HttpURLConnection和HttpClient。

在Android开发中,网络通信是一个不可或缺的功能,它允许应用与服务器交换数据,实现丰富的功能。在实现网络通信时,HttpURLConnection和HttpClient是两种常用的方式。下面将从技术难点、面试官关注点、回答吸引力以及代码举例四个方…...

评价ChatGPT与强人工智能的未来

在人工智能领域,ChatGPT的出现无疑是一个里程碑事件。它不仅展示了自然语言处理技术的巨大进步,也引发了人们对于强人工智能(AGI)的无限遐想。本文将从多个角度评价ChatGPT,并探讨强人工智能距离我们还有多远。 ChatGP…...

【web前端HTML+CSS+JS】--- CSS学习笔记02

一、CSS(层叠样式表)介绍 1.优势 2.定义解释 如果有多个选择器共同作用的话,只有优先级最高那层样式决定最终的效果 二、无语义化标签 div和span:只起到描述的作用,不带任何样式 三、标签选择器 1.标签/元素选择器…...

linux 安装 ImageMagick 及 php imagick扩展

安装imagick扩展前必须安装ImageMagick 一、安装ImageMagick wget http://www.imagemagick.org/download/ImageMagick.tar.gz 上面如果报错(cannot verify download.imagemagick.org’s certificate)执行 sudo yum install -y ca-certificates tar zxv…...

秋招突击——7/5——复习{}——新作{跳跃游戏II、划分字母区间、数组中的第K个大的元素(模板题,重要)、前K个高频元素}

文章目录 引言正文贪心——45 跳跃游戏II个人实现参考实现 划分字母区间个人实现参考实现 数组中的第K个最大元素个人实现参考做法 前K个高频元素个人实现参考实现 总结 引言 今天就开始的蛮早的,现在是九点多,刚好开始做算法,今天有希望能够…...

【Linux】信号的处理

你很自由 充满了无限可能 这是很棒的事 我衷心祈祷你可以相信自己 无悔地燃烧自己的人生 -- 东野圭吾 《解忧杂货店》 信号的处理 1 信号的处理2 内核态 VS 用户态3 键盘输入数据的过程4 如何理解OS如何正常的运行5 如何进行信号捕捉信号处理的总结6 可重入函数volatile关…...

Python数据分析的数据导入和导出

在Python数据分析中,数据的导入和导出是非常关键的步骤。这些步骤通常涉及到将数据从外部文件(如CSV、Excel、数据库等)读入到Python程序中,以及将处理后的数据导出回外部文件或数据库。以下是一些常用的库和方法来实现这些操作。…...

【JAVA多线程】线程池概论

目录 1.概述 2.ThreadPoolExector 2.1.参数 2.2.新任务提交流程 2.3.拒绝策略 2.4.代码示例 1.概述 线程池的核心: 线程池的实现原理是个标准的生产消费者模型,调用方不停向线程池中写数据,线程池中的线程组不停从队列中取任务。 实现…...

java双亲委派机制

Java中的双亲委派机制(Parent Delegation Model)是一种类加载机制,它确保了类加载的安全性和一致性。该机制规定了类加载器在加载类时的顺序和方式,从而避免了重复加载和类冲突问题。 以下是一个简单的自定义类加载器的示例&#…...

记录第一次使用air热更新golang项目

下载 go install github.com/cosmtrek/airlatest 下载时提示: module declares its path as: github.com/air-verse/air but was required as: github.com/cosmtrek/air 此时,需要在go.mod中加上这么一句: replace github.com/cosmtrek/air &…...

Leetcode 3213. Construct String with Minimum Cost

Leetcode 3213. Construct String with Minimum Cost 1. 解题思路2. 代码实现 题目链接:3213. Construct String with Minimum Cost 1. 解题思路 这一题的话思路上还是比较直接的,就是一个trie树加一个动态规划,通过trie树来快速寻找每一个…...

python操作SQLite3数据库进行增删改查

python操作SQLite3数据库进行增删改查 1、创建SQLite3数据库 可以通过Navicat图形化软件来创建: 2、创建表 利用Navicat图形化软件来创建: 存储在 SQLite 数据库中的每个值(或是由数据库引擎所操作的值)都有一个以下的存储类型: NULL. 值是空值。 INTEGER. 值是有符…...

【电控笔记6.7】非最小相位系统

全通滤波器 [...

Day05-04-持续集成总结

Day05-04-持续集成总结 1. 持续集成2. 代码上线目标项目 1. 持续集成 git 基本使用, 拉取代码,上传代码,分支操作,tag标签 gitlab 用户 用户组 项目 , 备份,https,优化. jenkins 工具平台,运维核心, 自由风格工程,maven风格项目,流水线项目, 流水线(pipeline) mavenpom.xmlta…...

PyQt5动态热力图清空画布关闭ColorBar

PyQt5生成正弦波动态热力图清空画布关闭ColorBar 1、简介 生成随机正弦波,使用pyqtgraph展示出来,并且使用热力图展示不同频率的正弦波,使用不同的画布颜色显示热力图的变化。 使用python3.8 导入库: pip install matplotlib==3.7.5 pip install numpy==1.24.4 pip in…...

python爬虫入门(一)之HTTP请求和响应

一、爬虫的三个步骤(要学习的内容) 1、获取网页内容 (HTTP请求、Requests库) 2、解析网页内容 (HTML网页结构、Beautiful Soup库) 3、存储或分析数据 b站学习链接: 【【Python爬虫】爆肝两…...

华为OD机考题(HJ41 称砝码)

前言 经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。有需要的可以同步练习下。 描述 现有n种砝码,重量互不相等,分别为 m1,m2,m3…mn ; 每种砝码对应的数量为 x1,x2,x3...xn 。现在要…...

Qt涂鸦板

Qt版本&#xff1a;Qt6 具体代码&#xff1a; 头文件 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog>QT_BEGIN_NAMESPACE namespace Ui { class Dialog; } QT_END_NAMESPACEclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent n…...

C++_03

1、构造函数 1.1 什么是构造函数 类的构造函数是类的一种特殊的成员函数&#xff0c;它会在每次创建类的新对象时执行。 每次构造的是构造成员变量的初始化值&#xff0c;内存空间等。 构造函数的名称与类的名称是完全相同的&#xff0c;并且不会返回任何类型&#xff0c;也不…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...