StoryDiffusion:四步在本地跑通角色一致漫画生成
【免费下载链接】StoryDiffusionAccepted as [NeurIPS 2024] Spotlight Presentation Paper项目地址: https://gitcode.com/GitHub_Trending/st/StoryDiffusion
StoryDiffusion 是 NeurIPS 2024 论文的开源实现,让现成的 SDXL 模型也能生成多张同一角色保持一致的图片。本文讲清它的适用场景、工作原理与低显存本地部署步骤,帮你四步跑通第一套角色一致的漫画。
适用场景:什么时候需要 StoryDiffusion
做漫画或分镜时,用普通扩散模型(从噪声逐步去噪生成图片的 AI)分别生成“同一角色的不同场景”,经常出现脸型和发色对不上的情况。StoryDiffusion 的核心能力是角色一致多图生成:给几行角色设定提示词,再给若干场景提示词,它会输出一组人物形象保持相近的图片,无需为角色单独训练模型。
这个机制是一个热插拔模块,兼容所有基于 SD1.5 和 SDXL 的图像模型,适合条漫创作、角色多角度定妆图、分镜预演等场景,也可以作为图生视频流程的前置阶段。
原理速览:一致性自注意力如何保持人物不变
扩散模型的降噪网络叫 UNet,它在每一步都会做“自注意力”(计算图像各区域应该参考哪些其他区域的机制)来更新画面。StoryDiffusion 的做法是把 UNet 中部分注意力处理器替换为自定义的 SpatialAttnProcessor2_0,生成时把角色设定提示词和场景提示词放进同一批次:前几行用于定义角色身份(id_length,默认 4),之后每张新场景图都会通过一张专门设计的掩码,去参考前面的角色图。
这张掩码并不全开,而是按两种粒度(对应 32×32 与 16×16 的图块)以概率随机采样,两个采样比例就是 sa32 和 sa64,默认都是 0.5。比例越大,新图借用的角色信息越多,一致性越强,但过大画面会显得僵硬雷同。
def cal_attn_mask_xl(total_length, id_length, sa32, sa64, height, width, ...)掩码的构建逻辑在 utils/gradio_utils.py 中。
上手步骤:低显存版演示四步跑通
第一步,克隆代码:
git clone https://gitcode.com/GitHub_Trending/st/StoryDiffusion第二步,创建环境并安装依赖(Python 3.10,依赖版本由 requirements.txt 锁定):
conda create --name storydiffusion python=3.10 conda activate storydiffusion pip install -r requirements.txt第三步,确认模型配置。config/models.yaml 列了 Juggernaut、RealVision、SDXL、Unstable 四个可选 SDXL 模型,低显存版默认用 Unstable,首次运行会自动下载权重。
第四步,启动界面并生成:
python gradio_app_sdxl_specific_id_low_vram.py浏览器打开终端打印的本地地址,输入不少于 3 行角色设定提示词和若干行场景提示词(官方建议 5~6 行),sa32/sa64 保持默认 0.5,点击生成即可。官方 README 注明该版本在 24GB 显存(Tesla A10)加 30GB 内存的机器上测试通过,建议显存不低于 20GB;脚本内部通过 VAE 切片和模型 CPU 卸载(enable_model_cpu_offload)来省显存。
参数速查:id_length 与 sa32/sa64 调节指南
- id_length(默认 4):作为角色身份定义的行数,这部分不能加 [NC] 标记
- sa32 / sa64(默认 0.5):两种粒度的采样比例,调大一致性更强
- [NC] 标记:写在场景行开头,表示这一帧不出现角色
- 参考图模式:上传人脸照片后,提示词中角色名词后必须加 “img” 触发词
常见问题与排错:三个典型报错
提示 “Support for more than three characters is temporarily unavailable” 现象:点生成后弹出超过三个角色的报错。原因:低显存版把角色设定限制在 3 行以内。解决:把角色提示词压到 3 行,或换更大显存的机器。
提示 ‘Please add the trigger word " img "’ 现象:参考图模式下无法生成。原因:提示词里角色词后没有写 “img” 触发词。解决:在角色名词后加上,例如 “man img”。
提示 “The first 4 row is id prompts, cannot use [NC]!” 现象:在角色设定行加 [NC] 直接报错。原因:前 id_length 行用于定义身份,必须包含角色。解决:只在设定行之后的场景行使用 [NC]。
StoryDiffusion 用一张注意力掩码让 SDXL 模型做到多页人物一致。想改用 notebook 方式,可看 Comic_Generation.ipynb。
【免费下载链接】StoryDiffusionAccepted as [NeurIPS 2024] Spotlight Presentation Paper项目地址: https://gitcode.com/GitHub_Trending/st/StoryDiffusion
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考