链接:https://github.com/byliutao/1Prompt1Story

这个项目是一个基于单个提示生成一致文本到图像的模型。它在ICLR 2025会议上获得了聚焦论文的地位。该项目提供了生成一致图像的代码、Gradio演示代码以及基准测试代码。

主要功能点:

  • 使用单个提示生成一致的文本到图像
  • 提供在线Gradio演示
  • 包含基准测试代码

技术栈:

  • PyTorch
  • Transformers
  • Diffusers
  • OpenCV
  • Scipy
  • Gradio
    在这里插入图片描述

docs:1Prompt1Story

1Prompt1Story项目通过AI生成图像实现连贯叙事

该项目采用滑动窗口方法创建图像序列,确保核心主体(ID提示词)在不同场景中保持视觉稳定性。

这种一致性通过动态影响图像生成过程的自定义控制实现,具体通过调节提示词权重注意力机制达成。

可视化

在这里插入图片描述

章节目录

  1. 滑动窗口故事生成器
  2. 图像生成管线
  3. 生成行为控制器
  4. 语义向量重加权(SVR)
  5. 注意力机制增强(IPCA)
  6. 去噪神经网络(UNet)

第一章:滑动窗口故事生成器

欢迎来到1Prompt1Story的精彩世界🐻‍❄️

在本章中,我们将探索一种称为滑动窗口故事生成器的智能技术。

该工具通过AI生成动态故事画面,确保核心角色或对象在场景变换中保持视觉一致性。

一致性挑战

假设我们需要创建包含连续场景的图像故事,例如"红狐在雪地嬉戏→进食浆果→树下休憩"。

若将全部描述一次性输入AI图像生成器,可能导致画面混乱:红狐形象模糊或背景元素混杂。

核心问题在于:

  • AI模型擅长处理简洁明确的指令
  • 过长或复杂的提示词会干扰模型对重点内容的理解
  • 需要分帧叙述策略,在保持主角一致性的同时实现场景平滑过渡

解决方案:滑动窗口机制

滑动窗口故事生成器犹如智能取景器,通过动态聚焦实现分步叙事:

  1. ID提示词(核心主体):贯穿所有画面的固定描述(如"红狐")
  2. 帧提示列表(场景演变):分步场景描述集合(如[“雪地嬉戏”, “进食浆果”, “树下休憩”])
  3. 滑动窗口机制:每次仅选取帧提示列表的子集生成单帧画面,窗口沿列表滑动推进
  4. 循环模式:窗口到达列表末端时自动回绕起始位置,形成无缝循环叙事

该机制确保:

  • 核心主体(ID提示词)在每帧画面中保持清晰一致
  • 场景通过渐进式切换实现流畅演变

滑动窗口工作流程

假设帧提示列表为[A, B, C, D],窗口长度为2:

在这里插入图片描述

窗口滑动过程始终保持部分前一画面的提示词,通过重叠提示实现平滑过渡

使用指南

通过main.py脚本启动生成器,示例命令如下:

python main.py \--id_prompt "红狐写真" \--frame_prompt_list "佩戴围巾于草地" "雪地嬉戏" "村庄边缘临溪" \--window_length 2 \--seed 42 \--save_padding "狐物语"

参数解析:

  • --id_prompt:核心主体描述(每帧画面固定出现)
  • --frame_prompt_list:场景演变描述集合(空格分隔)
  • --window_length:单次组合的帧提示词数量
  • --seed:随机种子(确保结果可复现)
  • --save_padding:输出文件前缀

执行后将生成序列图像及合成故事长图,红狐形象保持稳定而场景渐进变化。

技术实现解析

核心函数movement_gen_story_slide_windows位于unet/utils.py,工作流程如下:
在这里插入图片描述

关键技术点:

最大窗口长度计算(防止提示词过长)

def get_max_window_length(unet_controller, id_prompt, frame_prompt_list):combined_prompt = id_promptmax_len = 0for prompt in frame_prompt_list:combined_prompt += ' ' + promptif len(combined_prompt.split()) >= 77:  # 标准token限制breakmax_len += 1return max_len

循环窗口生成

def circular_sliding_windows(lst, w):n = len(lst)return [ [lst[(i+j)%n] for j in range(w)] for i in range(n) ]

核心生成逻辑

def movement_gen_story_slide_windows(id_prompt, frame_list, pipe, window_len, seed, controller, save_dir):# 计算可用窗口长度max_win = get_max_window_length(controller, id_prompt, frame_list)window_len = min(window_len, max_win)# 生成提示窗口prompt_windows = circular_sliding_windows(frame_list, window_len)story_images = []for idx, window in enumerate(prompt_windows):# 配置提示词权重controller.frame_prompt_express = window[0]controller.frame_prompt_suppress = window[1:]# 生成组合提示词full_prompt = f"{id_prompt} {' '.join(window)}"# 调用生成管线image = pipe(full_prompt, generator=torch.Generator().manual_seed(seed)).images[0]story_images.append(image)# 合成输出return combine_story(story_images)

code:https://github.com/lvy010/AI-exploration/tree/main/AI_image/1Prompt1Story

结语

本章揭示了滑动窗口故事生成器如何通过智能提示词管理实现连贯叙事

在后续章节中,我们将深入解析图像生成管线的技术细节,揭示AI如何将结构化提示转化为视觉盛宴。


第二章:图像生成管线

在第一章中,我们学习了滑动窗口故事生成器如何巧妙编排文本提示序列,实现连贯的动画叙事。

但精心设计的文本提示如何转化为可见图像?这正是图像生成管线的核心使命。

图像工厂:从文本构思到视觉现实

想象一个高科技工厂的运作场景:滑动窗口机制交付生产订单(如"红狐雪地嬉戏"的文本提示),这些订单需经过专业设备处理才能转化为成品(图像)。

图像生成管线正是这个智能工厂的全自动化产线与中央控制系统,负责将文本构思转化为最终视觉呈现。

管线核心组件

我们的图像工厂包含四大核心设备:

  1. 文本编码器(语言翻译器)
    将人类可读的提示(如"红狐")转化为AI可理解的数值化"思维向量"

  2. VAE(变分自编码器)

    一种生成模型,通过压缩图像到潜在空间(低维表示)再重建,适合生成模糊但结构合理的图像。

    • 图像压缩:将真实图像编码为抽象潜在表征
    • 图像解压:将潜在空间数据解码为可视图像
  3. UNet(去噪神经网络)
    一种带跳跃连接的对称网络,能保留图像细节,常用于图像分割或扩散模型中逐步去噪生成高清图

    作为核心画师,从随机噪声(类似电视雪花屏)起步,在文本引导下通过多步去噪逐步揭示隐藏图像

  4. 调度器(艺术指导)
    精确控制UNet在各去噪步骤中的噪声消除量,确保图像生成过程平滑自然

在这里插入图片描述

管线使用方法

通过StableDiffusionXLPipeline实例(来自Diffusers库的定制版本)实现核心交互:

# 摘自main.py(简化版)
from unet.pipeline_stable_diffusion_xl import StableDiffusionXLPipeline
import torch# 初始化管线(加载模型与分词器)
pipe = StableDiffusionXLPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")  # 启用GPU加速# 接收滑动窗口生成的提示词
story_prompt = "红狐雪地嬉戏写真"# 配置可复现的随机种子
story_generator = torch.Generator().manual_seed(42)# 执行图像生成
# unet_controller参数用于高级控制(第三章详解)
generated_images = pipe(prompt=story_prompt,generator=story_generator,unet_controller=None  # 基础模式设为None
).images# 保存首张生成图像
generated_images[0].save("fox_snow.jpg")

参数解析

  • generator:确保相同种子生成确定性结果
  • unet_controller:实现跨帧一致性的高级控制接口(第三章详解)
  • .images:返回PIL图像对象列表

管线工作原理

在这里插入图片描述

1. 提示词编码(encode_prompt)
def encode_prompt(self, prompt: str, ..., unet_controller=None):# 分词处理text_inputs = self.tokenizer(prompt, padding="max_length", truncation=True, return_tensors="pt")# 生成嵌入向量prompt_embeds = self.text_encoder(text_input_ids, output_hidden_states=True)# 提取UNet专用嵌入层input_prompt_embeds = prompt_embeds.hidden_states[-2] return input_prompt_embeds

该过程将文本转化为AI可理解的数值化表征,为后续生成提供语义指引

2. 潜在空间初始化(prepare_latents)
def prepare_latents(self, ..., same=False):# 生成随机噪声矩阵latent_shape = (batch_size, num_channels, height//8, width//8)latents = torch.randn(latent_shape, generator=generator)# 批量生成时保持噪声一致性if same: latents[1:] = latents[0]  return latents * self.scheduler.init_noise_sigma

创建初始噪声空间时,same参数可实现跨帧噪声一致性,为动画连贯性奠定基础

噪声空间

是图像生成过程中模型随机添加的干扰信号,通过逐步调整这些噪声最终生成清晰的图像。类似于“从模糊的电视雪花屏逐渐修复成完整画面”。

3. 去噪循环(call
for i, t in enumerate(self.timesteps):# UNet预测噪声分布noise_pred = self.unet(latent_model_input,t,encoder_hidden_states=prompt_embeds,unet_controller=unet_controller  # 接受高级控制)# 调度器更新潜在空间latents = self.scheduler.step(noise_pred, t, latents)[0]

每次迭代逐步清除噪声,unet_controller在此注入定制化生成逻辑

4. 图像解码(vae.decode)
image = self.vae.decode(latents, return_dict=False)[0]

将优化后的潜在空间数据解码为768x768像素的RGB图像

技术价值

1Prompt1Story是ICLR 2025聚焦论文项目,通过AI实现单提示词驱动的连贯图像叙事。

核心创新在于滑动窗口机制,将ID提示词(如"红狐")与帧提示列表(场景描述)动态组合,在保持主体一致性的同时实现场景平滑过渡

技术实现结合PyTorch框架与Diffusers库,通过文本编码器、VAE、UNet等组件构建图像生成管线,支持Gradio在线演示。

项目提供完整的代码实现与基准测试方案,解决了传统文本到图像生成中主体漂移的难题。

该管线架构实现三大创新:

  1. 分层控制:通过UNet控制器实现提示词权重动态调整
  2. 潜在空间复用:批量生成时共享噪声基底确保跨帧一致性
  3. 自适应调度:根据硬件资源动态调整去噪步长

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

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

相关文章

【GitHub开源AI精选】Sitcom-Crafter:北航联合港中文等高校打造的剧情驱动3D动作生成系统

系列篇章💥 No.文章1【GitHub开源AI精选】LLM 驱动的影视解说工具:Narrato AI 一站式高效创作实践2【GitHub开源AI精选】德国比勒费尔德大学TryOffDiff——高保真服装重建的虚拟试穿技术新突破3【GitHub开源AI精选】哈工大(深圳)…

智和信通全栈式运维平台落地深圳某学院,赋能运维管理提质提效

深圳某学院校园内信息化设备众多,网络环境复杂,使得网络管理工作面临着诸多难题与挑战。为保障校园网络能够稳定、高效地运行,学院亟须构建一套集高效、智能、协同于一体的网络运维平台。 对运维平台的期望包括: 实现校园内教学…

开疆智能Ethernet转ModbusTCP网关连接测联无纸记录仪配置案例

本案例是通过Ethernet转ModbusTCP网关将记录仪数据传送到欧姆龙PLC,具体操作过程如下。欧姆龙PLC配置首先打开主站组态软件“Sysmac Studio”并新建项目。设置PLC的IP地址点击工具-Ethernet/IP连接设置,在弹出的选个框内选择显示EDS库添加网关eds文件开始…

Eureka故障处理大汇总

#作者:Unstopabler 文章目录1. Eureka 服务启动故障处理1.1 端口占用导致启动失败1.2 配置文件错误导致启动失败1.3 依赖冲突与类加载错误2. 服务注册与发现异常2.1 服务无法注册到 Eureka2.2 Eureka 控制台看不到注册的服务2.3 服务注册后立即被剔除3. Eureka 集群…

基于Transformer的机器翻译——模型篇

1.模型结构 本案例整体采用transformer论文中提出的结构,部分设置做了调整。transformer网络结构介绍可参考博客——入门级别的Transformer模型介绍,这里着重介绍其代码实现。 模型的整体结构,包括词嵌入层,位置编码,…

上位机TCP/IP通信协议层常见问题汇总

以太网 TCP 通信是上位机开发中常用的通信方式,西门子 S7 通信、三菱 MC 通信以及 MQTT、OPC UA、Modbus TCP 等都是其典型应用。为帮助大家更好地理解 TCP 通信,我整理了一套常见问题汇总。一、OSI参考模型与TCP/IP参考模型基于TCP/IP的参考模型将协议分…

搭建ktg-mes

项目地址 该安装事项,基于当前最新版 2025年8月16日 之前的版本 下载地址: 后端JAVA 前端VUE 后端安装: 还原数据表 路径:根目录/sql/ry_20210908.sql、根目录/sql/quartz.sql、根目录/doc/实施文档/ktgmes-202505180846.sql.g…

uniapp纯前端绘制商品分享图

效果如图// useMpCustomShareImage.ts interface MpCustomShareImageData {canvasId: stringprice: stringlinePrice: stringgoodsSpecFirmName: stringimage: string }const CANVAS_WIDTH 500 const CANVAS_HEIGHT 400 const BG_IMAGE https://public-scjuchuang.oss-cn-ch…

醋酸镧:看不见的科技助力

虽然我们每天都在使用各种科技产品,但有些关键的化学物质却鲜为人知。醋酸镧,就是这样一种默默为科技进步贡献力量的“幕后英雄”。它不仅是稀土元素镧的一种化合物,还在许多高科技领域中发挥着重要作用。今天,让我们一起来了解这…

苍穹外卖日记

day 1 windows系统启动nginx报错: The system cannot find the path specified 在启动nginx的时候报错: /temp/client_body_temp" failed (3: The system cannot find the path specified) 解决办法: 1.检查nginx的目录是否存在中文 ,路…

楼宇自控系统赋能建筑全维度管理,实现环境、安全与能耗全面监管

随着城市化进程加速和绿色建筑理念普及,现代楼宇管理正经历从粗放式运营向精细化管控的转型。楼宇自控系统(BAS)作为建筑智能化的核心载体,通过物联网、大数据和人工智能技术的深度融合,正在重构建筑管理的全维度框架&…

【HarmonyOS】Window11家庭中文版开启鸿蒙模拟器失败提示未开启Hyoer-V

【HarmonyOS】Window11家庭中文版开启鸿蒙模拟器失败提示未开启Hyoer-V一、问题背景 当鸿蒙模拟器启动时,提示如下图所示:因为Hyper-V 仅在 Windows 11 专业版、企业版和教育版中作为预装功能提供,而家庭版(包括中文版&#xff09…

vscode远程服务器出现一直卡在正在打开远程和连接超时解决办法

项目场景: 使用ssh命令或者各种软件进行远程服务器之后,结果等到几分钟之后自动断开连接问题解决。vscode远程服务器一直卡在正在打开远程状态问题解决。问题描述 1.连接超时 2.vscode远程一直卡在正在打开远程...原因分析:需要修改设置超时断…

Maven下载和配置-IDEA使用

目录 一 MAVEN 二 三个仓库 1. 本地仓库(Local Repository) 2. 私有仓库(Private Repository,公司内部仓库) 3. 远程仓库(Remote Repository) 依赖查找流程(优先级&#xff09…

Dify实战应用指南(上传需求稿生成测试用例)

一、Dify平台简介 Dify是一款开源的大语言模型(LLM)应用开发平台,融合了“Define(定义) Modify(修改)”的设计理念,通过低代码/无代码的可视化界面降低技术门槛。其核心价值在于帮助…

学习日志35 python

1 Python 列表切片一、切片完整语法列表切片的基本格式: 列表[start:end:step]start:起始索引(包含该位置元素,可省略)end:结束索引(不包含该位置元素,可省略)step&#…

Linux -- 文件【下】

目录 一、EXT2文件系统 1、宏观认识 2、块组内部构成 2.1 Data Block 2.2 i节点表(Inode Table) 2.3 块位图(Block Bitmap) 2.4 inode位图(Inode Bitmap) 2.5 GDT(Group Descriptor Table) 2.6 超…

谷歌手机刷机和面具ROOT保姆级别教程

#比较常用的谷歌输入root面具教程,逆向工程师必修课程# 所需工具与材料清单 真机设备 推荐使用 Google Pixel 4 或其他兼容设备,确保硬件支持刷机操作。 ADB 环境配置 通过安装 Android Studio 自动配置 ADB 和 Fastboot 工具。安装完成后,需在系统环境…

平衡二叉搜索树 - 红黑树详解

文章目录一、红黑树概念引申问题二、红黑树操作一、红黑树概念 红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位用来表示节点颜色(红色或者黑色),红黑树通过约束颜色,可以保证最长路径不超过最短路径的两倍,因而近似平衡…

从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.14

第十六天 第五十二,五十三,五十四,五十五和五十六集 第五十二集 文件包含 一个include命令只能指定一个被包含文件 文件允许嵌套,就是一个被包含的文件可以包含另一个文件。 文件名可以用尖括号或者双引号括起来 但是两种的查找方…