1Prompt1Story
ICLR 2025 Spotlight:用一句话提示词生成主体一致的连贯故事图像
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
ICLR 2025 Spotlight:用一句话提示词生成主体一致的连贯故事图像
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你只需要输入「一只小狗在海边玩耍」,就能生成一组画面连贯、主体一致的小狗图像——它在花园里奔跑、在城市里遛弯、在海滩上晒太阳,每一帧都是同一只小狗。这听起来像是专业特效团队才能实现的效果,如今却被一个开源项目轻松做到了。这个项目叫做 One-Prompt-One-Story(简称 1P1S),来自南京大学等机构的研究团队,已被 AI 顶级学术会议 ICLR 2025 录用为 Spotlight 论文——Spotlight 在 ICLR 约 2500 篇投稿中仅约 200 篇获得,意味着该项目的研究成果代表了扩散模型领域的重要突破。
图1:同一主体在不同场景下的生成效果示意
以 Stable Diffusion 为代表的文生图模型近年来能力突飞猛进,用户只需要一段文字描述,就能生成质量惊人的图像。然而,当用户尝试用同一个主体(如「一只猫」)生成一系列故事情节时,会遇到一个核心痛点:主体身份无法保持一致。第一张图是一只橘猫,第二张图可能就变成了一只黑猫;第三张图甚至变成了完全不同种类的动物。这在创作漫画、绘本、广告素材等需要叙事一致性的场景中,几乎是不可接受的。
为什么会出现这个问题?传统方法在生成不同帧时,每次推理都从全新的随机噪声开始,文本提示词中的主体描述(如「一只狗」)需要依靠 CLIP 文本编码器来「记住」主体的视觉特征,但 CLIP 的文本特征本身缺乏对细粒度视觉身份的表达能力。当帧数增加、场景变化时,模型很容易「忘记」最初的主体外观,转而根据当前帧的文本描述生成一个全新的主体。
One-Prompt-One-Story 的解决思路精妙而直接:既然纯文本特征无法稳定承载主体身份,那就直接在图像特征空间注入主体信息,让它在去噪过程中持续发挥作用。项目实现了两个核心机制:IPCA(In-Prompt Cross-Attention,提示内交叉注意力)和SVR(Subject-Visual-Response,主体视觉响应)。
IPCA 的工作原理是:在生成故事后续帧时,将第一帧(ID帧)的图像特征通过交叉注意力机制注入到去噪网络中。具体来说,在 UNet 的多个层级(down0/down1/down2/mid/up0/up1/up2)的交叉注意力模块中,除了注入当前帧的文本提示词嵌入(prompt_embeds),还额外注入第一帧的图像查询特征(Q)、键特征(K)、值特征(V)。这个过程发生在模型推理的早期去噪步(约前 50% 的步数),目的是在模型还未完全「遗忘」主体时,就强制建立第一帧图像特征与当前帧去噪之间的关联。
代码实现位于 unet/unet_controller.py 中的 UNetController 类,通过修改 pipeline_stable_diffusion_xl.py 的 encode_prompt 方法,在推理时动态切换 prompt_embeds 的模式为 'original'(仅文本)或 'ipca'(文本+图像特征混合)。整个过程无需对预训练模型进行任何权重微调,是真正的「免费午餐」(Free-Lunch)方法。
SVR 机制通过引入四个可学习的权重参数(Alpha_weaken、Beta_weaken、Alpha_enhance、Beta_enhance),对 IPCA 注入的图像特征进行通道级别的响应调制。当某个特征通道对主体身份贡献过大(可能导致图像模糊)时,SVR 会按比例削弱其响应强度;当某个通道对主体身份贡献不足时,SVR 会适度增强。这种动态平衡确保了主体外观既被稳定保持,又不会因为过度注入而导致图像质量下降。
此外,项目还集成了 FreeU 机制(通过 Freeu_parm 参数 {'s1': 0.6, 's2': 0.4, 'b1': 1.1, 'b2': 1.2}),进一步优化去噪过程中的高频与低频特征平衡,提升生成图像的清晰度和细节表现。
项目的代码架构非常清晰,体现了「最小侵入式扩展」的设计理念。整体基于 Hugging Face diffusers 库的 StableDiffusionXLPipeline,在此基础上通过 UNetController 类实现了一套参数化控制器,对原始 Pipeline 的 encode_prompt 方法进行了猴子补丁式的注入。
核心文件结构:
main.py:推理入口,通过 generate_images() 函数驱动整个生成流程app.py:Gradio WebUI 界面,提供参数调节面板(Seed、Window Length、各类强化/衰减系数、IPCA/FreeU 开关等)unet/unet_controller.py:核心控制器类,定义所有超参数和模式切换逻辑unet/utils.py(约 21KB):模型加载、IPCA 特征计算、PCA 降维、kd-tree 相似度匹配等核心算法unet/pipeline_stable_diffusion_xl.py:定制的 SDXL Pipeline,在 encode_prompt 中根据 Prompt_embeds_mode 动态选择文本模式/IPCA 模式/SVR 模式resource/example.json:包含 14 个预设示例,覆盖人物、动物、物体等多种主体类型值得注意的是,项目还提供了 Jittor 版本(jittor_version/ 分支),Jittor 是国产的自主可控深度学习框架,意味着该项目也考虑了在国内芯片(如华为昇腾等)上的部署需求。
对于非技术用户,项目通过 app.py 提供了开箱即用的 Gradio 网页界面。界面包含以下可调参数:
在命令行模式下,只需运行 python main.py,项目会自动加载示例配置(resource/example.json),依次生成每个组合的故事情节图像,并保存到 result/ 目录。
天下没有免费的午餐。1P1S 虽然称为「Free-Lunch」,但仍存在以下局限:
对 GPU 显存要求高:作为基于 SDXL 的项目,推理至少需要 8GB VRAM,实际推荐 12GB+。在没有高性能 GPU 的环境下,生成一张图像可能需要等待数分钟,体验较差。
主体外观仍可能漂移:IPCA 机制在帧数很多(>5帧)时,主体一致性仍会逐渐下降,特别是当故事场景与主体初始外观差异较大时(如「室内」到「月球表面」)。
不支持中文提示词:项目目前仅针对英文 CLIP 文本编码器进行优化,中文描述的生成质量无法保证。
需要手动下载 SDXL 权重:项目没有集成自动化模型下载脚本,用户需要自行从 HuggingFace 下载约 6.5GB 的 SDXL 模型权重,部署门槛不低。
One-Prompt-One-Story 被 ICLR 2025 接收为 Spotlight 论文,标志着「故事化文生图」正式成为 AI 生成内容(AIGC)领域的一个新兴研究方向。该项目的核心贡献不仅是提出了一种新的技术方案,更重要的是定义了新的研究基准:Consistory+ 评测集(resource/consistency+.yaml),用于量化评估故事图像生成的一致性质量。
这一方向的应用前景非常广泛:
从更大的视角看,1P1S 代表了扩散模型从「生成单张图像」向「生成连贯序列」演进的重要趋势。随着技术的成熟,未来的 AI 不仅能生成一张「完美的照片」,更能生成一部「完整的电影」。
图2:长故事序列生成效果