animatediff
animatediff 重构,显著降低了显存使用量。
同时,**支持无限生成长度!**太棒了!
LoRA 加载功能目前绝对没有实现!
欢迎提交 PR!😆😅
理论上可以在 CPU 上运行,但不推荐。应该可以在 GPU 上正常运行,无论是 NVIDIA 还是其他品牌,但我还没有在非 CUDA 硬件上测试过。默认使用 PyTorch 2.0 缩放点积注意力(即内置 xformers),但如果你真的想使用 xformers,可以传递 --xformers
参数强制使用。
如何使用
我应该写一些更详细的步骤,但以下是大致流程:
git clone https://github.com/neggles/animatediff-cli
cd animatediff-cli
python3.10 -m venv .venv
source .venv/bin/activate
# 安装 Torch。使用你喜欢的 torch 版本(>= 2.0.0),但在非 NVIDIA 设备上可能会遇到困难...
python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 安装其余所有依赖(应该是全部了!我可能漏掉了一些依赖。)
python -m pip install -e '.[dev]'
# 现在你应该可以运行
animatediff --help
# 这里会打印出一个漂亮的帮助屏幕,里面有很多信息。
接下来,你需要将想要使用的检查点放入 data/models/sd
目录,复制 config/prompts
中的一个提示配置文件,编辑它以设置你选择的提示和模型(提示 .json 文件中的模型路径是相对于 data/
的,例如 models/sd/vanilla.safetensors
),然后就可以开始了。
对于 8GB 显存的显卡,可以使用类似以下的命令:
animatediff generate -c 'config/prompts/waifu.json' -W 576 -H 576 -L 128 -C 16
对于显存少于 8GB 的显卡,你可能需要将 -C
降低到 8,而对于显存更大的显卡,你可以将其提高到 20-24。最大值为 24。
注意:生成 128 帧会非常慢...
RiFE!
我已经为 rife-ncnn-vulkan 添加了实验性支持,使用 animatediff rife interpolate
命令。它有相当直观的帮助信息,并已在 Linux 上进行了测试,但我不确定它是否能在 Windows 上运行。
无论如何,你需要在系统上安装 ffmpeg 并将其添加到 PATH 中,还需要从 GitHub 仓库(上面的链接)下载适用于你所选操作系统的 rife-ncnn-vulkan 发布版。解压它,并将提取的文件夹放在 data/rife/
目录下。你应该有一个 data/rife/rife-ncnn-vulkan
可执行文件,或者在 Windows 上是 data\rife\rife-ncnn-vulkan.exe
。
你还需要使用以下命令重新安装仓库/包:
python -m pip install -e '.[rife]'
或者手动安装 ffmpeg-python
。
默认设置是将每帧乘以 8,将 8fps 的动画转换为 64fps,然后编码为 60fps 的 WebM。(如果你选择 GIF 模式,它将是 50fps,因为 GIF 的帧持续时间以 1/100 秒为单位编码,这很诡异)。
看起来效果还不错...
待办事项:
无特定顺序:
- 支持无限生成长度
- 支持 RIFE 进行运动插值(
rife-ncnn-vulkan
不是最佳实现) - 将 RIFE 插值后的帧导出为视频文件(webm、mp4、动画 webp、hevc mp4、gif 等)
- 在 6-8GB 显存的显卡上生成无限长度的动画(512x512 分辨率,8 帧上下文,但至少能用)
- Torch SDP 注意力(使 xformers 成为可选项)
- 在提示配置中支持
clip_skip
- 实验性支持
torch.compile()
(上游 Diffusers 的 bug 略微减慢了速度,但仍然很快) - 使用
--repeat
批量生成!(例如,--repeat 10
将重复所有提示 10 次) - 从另一个 Python 程序调用
animatediff.cli.generate()
函数,无需每次重新加载模型 - 将剩余的旧 Diffusers 代码更新到最新版本(大部分已完成)
- 添加 Web 界面(也许吧,已经有人在封装这个项目了,所以可能不需要)
- img2img 支持(从现有图像开始并继续生成)
- 尽可能停止使用自定义模块(应该能够使用 Diffusers 完成几乎所有功能)
- 自动生成然后使用 RIFE 插值的模式
致谢:
参见 guoyww/AnimateDiff(这里很少有我的工作)
注意:COPYING
文件中的版权声明缺少原作者的名字,仅仅是因为原始仓库(在撰写本文时)没有在许可证中附加姓名。然而,我使用了与他们相同的许可证(Apache 2.0)。