LLM-groundedDiffusion
利用大语言模型作为布局解析器,让 Stable Diffusion 精准理解文本提示中的空间位置关系
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
利用大语言模型作为布局解析器,让 Stable Diffusion 精准理解文本提示中的空间位置关系
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你对 AI 说「画一只猫坐在沙发的左边,右边放一杯咖啡」。传统的 Stable Diffusion 模型往往会顾此失彼——猫可能跑到右边,咖啡可能漂到天花板上。这就是文本到图像生成模型长期面临的「位置理解」难题:自然语言擅长描述对象的属性,但难以精确指定空间关系。
加州大学伯克利分校和 UCFS 的研究团队带来了一个优雅的解决方案——LLM-grounded Diffusion(LLM 接地的扩散模型,简称 LMD),发表于 TMLR 2024,并获得了 Featured Certification 荣誉。
图1:LLM-grounded Diffusion 工作流程 — Text Prompt → LLM 请求解析 → 中间表示(图像布局)→ Stable Diffusion → 图像
LMD 的核心创新在于两阶段流水线设计,通过将大型语言模型(LLM)作为请求解析器,弥合了自然语言描述与精确视觉布局之间的鸿沟。
第一阶段:文本→布局(Text-to-Layout)。用户输入一段文本提示词(如「左边一只黑猫,右边一盆绿植」),系统将其发送给 LLM(支持 GPT-3.5、GPT-4、Llama-2、Mixtral 等主流模型)。LLM 扮演「智能边界框生成器」,将文本解析为一系列带有坐标的物体边界框(bounding boxes),并生成背景描述词。这个中间表示是一个结构化的布局方案,包含每个对象的名称及其在 512×512 图像空间中的精确位置。
第二阶段:布局→图像(Layout-to-Image)。生成的边界框信息作为额外条件注入到 Stable Diffusion 的去噪过程中。代码层面,通过自定义的 latent_backward_guidance 函数在扩散模型的潜空间中实施位置引导——模型通过注意力机制感知每个边界框的空间约束,在去噪迭代过程中逐步将对象「推」到正确的位置。实现上,修改了 diffusers 库中 Transformer2DModel 的注意力层,使用门控自注意力机制(Gated Self-Attention)注入布局信息。
整个架构的设计哲学是最小干预:Stable Diffusion 的预训练权重完全冻结,只需要一个 LLM 作为外部「翻译官」,无需对扩散模型进行任何微调。这使得 LMD 可以直接复用开源社区积累的 SD 生态。
项目提供了丰富的生成脚本和工具,覆盖从研究评估到日常使用的完整场景。
命令行生成。generate.py 是核心推理脚本,支持指定 LLM 模型、重复采样、批量生成等参数。prompt_batch.py 则面向批量评测场景,可自动执行评测集的所有提示词并可视化边界框。生成结果通过 utils/vis.py 中的可视化模块输出包含边界框标注的对比图。
多版本支持。代码库包含多种生成策略实现:
generation/lmd.py:标准 LMD 基线generation/lmd_plus.py:增强版,支持背景提示词引导和负提示词generation/boxdiff.py:BoxDiff 定位扩散方法generation/gligen.py:GLIGEN 门控注入generation/multidiffusion.py:多区域扩散generation/sdxl_refinement.py:SDXL 质量增强后处理无 LLM 调用也能运行。项目内置了本地缓存机制(utils/cache.py),可以预先缓存 LLM 生成的布局结果,避免重复 API 调用。评测结果显示,即使使用自托管的 Mixtral-8x7B-Instruct-v0.1 也能达到与 GPT-3.5 相当的性能,这为完全本地化部署提供了可能。
图2:传统 SD 与 LMD 在复杂提示词上的可视化对比 — LMD 能准确理解「左边/右边」等空间关系
代码组织遵循功能模块化原则,主要目录结构如下:
models/:扩散模型核心实现,包含自定义注意力处理器(attention_processor.py)、UNet 块(unet_2d_blocks.py)、SAM 分割模型集成(sam.py)utils/:工具函数,LLM 调用封装(llm.py)、边界框解析(parse.py)、可视化(vis.py)、调度器(schedule.py)、引导梯度(guidance.py)generation/:各生成策略的核心算法实现webui/:HuggingFace Spaces 部署代码scripts/:评测脚本(eval_stage_one.py、owl-vit 评测)核心依赖包括 torch==2.0.0、diffusers==0.18.0、transformers==4.29.2(现已集成到 diffusers>=0.24.0)、opencv-python、gradio==3.35.2。技术栈为纯 Python,以 PyTorch 深度学习框架为核心。
在线体验(推荐入门):官方提供了托管在 HuggingFace Spaces 的 Gradio WebUI,可直接访问体验,无需任何安装步骤。按提示输入文本提示词,即可实时生成带精确空间约束的图像。不过托管服务存在 GPU 队列等待和高并发限速的问题。
本地部署(需 GPU):本地部署可以获得更快的推理速度和更大的模型选择自由度。需要 Python 3.8+、CUDA 11.x、NVIDIA GPU(8GB+ VRAM)以及 LLM API 密钥(OpenAI 或自托管模型)。安装步骤为 pip install -r requirements.txt,然后运行 python generate.py --model gpt-3.5-turbo --prompt-type demo。无 Dockerfile 和 Docker Compose 支持是明显的不足,对于不熟悉 CUDA 环境配置的用户存在一定门槛。
硬件要求。该项目对 GPU 有强需求——在 RTX 3080 或同等性能以上的 GPU 上,单张 512×512 图像生成时间约 20-40 秒(不含 LLM 调用延迟)。CPU 推理不现实,显存不足会导致 OOM。
LMD 并非完美解决方案,存在以下局限:
LLM 调用延迟与成本。每次生成都需要 LLM 处理提示词,GPT-4 API 调用的延迟和费用在大规模使用场景中不可忽视。虽然支持自托管 Mixtral,但配置过程复杂,且性能略有下降。
空间精度有限。边界框的坐标是离散的 512×512 网格,对于精细的空间关系(如「在XX上方5厘米处」)表达仍然粗糙。复杂场景下 LLM 生成边界框的准确性直接影响最终图像质量。
单对象优先。当前 prompt 模板设计倾向于单个边界框,对多个重叠或密集场景的处理能力有限。
LLM-grounded Diffusion 属于 2023-2024 年文本到图像领域的重要进展之一。它的核心价值在于示范了一种有效的跨模态协作范式:不重新训练扩散模型,而是利用 LLM 的语义理解能力为扩散模型提供精确的视觉约束。这种「LLM as Request Parser」的思路后来被多个项目沿袭,包括 ControlNet 的一些变体和 ComfyUI 中的提示词增强节点。
从增长曲线看,该项目在 GitHub 上获得了持续关注,Star 增长稳定,论文在学术界也有一定引用量。其 diffusers 官方集成意味着它已成为 Stable Diffusion 生态的「正规军」而非边缘项目。对于需要精确控制图像空间布局的开发者(如电商图片生成、场景合成、数据增强)来说,LMD 提供了目前最简单有效的开源解决方案之一。