Rerender_A_Video - 重新渲染视频:零镜头文本引导视频到视频翻译

Created at: 2023-05-08 16:25:21
Language: Jupyter Notebook
License: NOASSERTION

重新渲染视频 - 官方 PyTorch 实现

传情

重新渲染视频:零镜头文本引导视频到视频翻译
杨帅周一凡刘紫薇和陈 在SIGGRAPH Asia 2023会议论文集
项目页面更改洛伊
| |补充视频 |输入数据和视频结果

网络演示 游客

摘要: 大型文本到图像扩散模型在生成高质量图像方面表现出了令人印象深刻的熟练程度。然而,当将这些模型应用于视频域时,确保视频帧之间的时间一致性仍然是一个巨大的挑战。该文提出一种新颖的零镜头文本引导视频到视频翻译框架,使图像模型适应视频。该框架包括两部分:关键帧翻译和完整视频翻译。第一部分使用适应的扩散模型来生成关键帧,并应用分层交叉帧约束来加强形状、纹理和颜色的一致性。第二部分通过时间感知补丁匹配和帧混合将关键帧传播到其他帧。我们的框架以低成本(无需重新训练或优化)实现了全局风格和局部纹理的时间一致性。改编与现有的图像扩散技术兼容,允许我们的框架利用它们,例如使用 LoRA 自定义特定主题,并使用 ControlNet 引入额外的空间指导。广泛的实验结果表明,我们提出的框架在渲染高质量和时间连贯的视频方面比现有方法有效。

特点

  • 时间一致性:用于低级时间一致性的跨帧约束。
  • 零射击:无需培训或微调。
  • 灵活性:与现成的模型(例如,ControlNet,LoRA兼容,以进行定制翻译。

https://github.com/williamyang1991/Rerender_A_Video/assets/18130694/811fdea3-f0da-49c9-92b8-2d2ad360f0d6

更新

  • [2023/09] 代码已发布。
  • [09/2023] SIGGRAPH Asia 2023会议论文集被接受!
  • [06/2023] 集成到🤗拥抱脸。享受网络演示!
  • [05/2023] 本网站已创建。

待办事项

  • [x] 集成到扩散器中。
  • [x] 在 README.md 中添加推理指令。
  • [x] 将示例添加到 webUI。
  • [x] 将可选的泊松融合添加到管道中。
  • [x] 添加适用于 Windows 的安装说明

安装

请确保你的安装路径仅包含英文字母或 _

  1. 克隆存储库。(不要忘记 --递归。否则,请运行
    git submodule update --init --recursive
    )
git clone git@github.com:williamyang1991/Rerender_A_Video.git --recursive
cd Rerender_A_Video
  1. 如果你已经安装了PyTorch CUDA,你可以简单地用pip设置环境。
pip install -r requirements.txt

你还可以从头开始创建新的 conda 环境。

conda env create -f environment.yml
conda activate rerender

需要 24GB 显存。请参考 https://github.com/williamyang1991/Rerender_A_Video/pull/23#issue-1900789461 以减少内存消耗。

  1. 运行安装脚本。所需的模型将在 中下载。
    ./models
python install.py
  1. 你可以使用
    rerender.py
python rerender.py --cfg config/real2sculpture.json
在视窗上安装

在运行上述 1-4 个步骤之前,你需要准备:

  1. 安装库达
  2. 安装 git
  3. 使用 Windows 10/11 SDK 安装 VS(用于构建 deps/ebsynth/bin/ebsynth.exe)
安装失败?
  1. 如果构建 ebsynth 失败,我们提供我们兼容的 ebsynth
  2. FileNotFoundError: [Errno 2] No such file or directory: 'xxxx.bin' or 'xxxx.jpg'
    :确保你的路径仅包含英文字母或 _ (https://github.com/williamyang1991/Rerender_A_Video/issues/18#issuecomment-1723361433)
  3. KeyError: 'dataset'
    :将 Gradio 升级到最新版本 (https://github.com/williamyang1991/Rerender_A_Video/issues/14#issuecomment-1722778672)
  4. 处理视频时出错:手动安装 ffmpeg(https://github.com/williamyang1991/Rerender_A_Video/issues/19#issuecomment-1723685825https://github.com/williamyang1991/Rerender_A_Video/issues/29#issuecomment-1726091112)
  5. ERR_ADDRESS_INVALID
    无法在浏览器中打开 webUI:在 webUI.py 中将 0.0.0.0 替换为 127.0.0.1 (https://github.com/williamyang1991/Rerender_A_Video/issues/19#issuecomment-1723685825)
  6. CUDA out of memory
    : (https://github.com/williamyang1991/Rerender_A_Video/pull/23#issue-1900789461)
  7. AttributeError: module 'keras.backend' has no attribute 'is_tensor'
    :更新 einops (https://github.com/williamyang1991/Rerender_A_Video/issues/26#issuecomment-1726682446)

(1)推理

python webUI.py

Gradio 应用程序还允许你灵活更改推理选项。只需尝试一下即可了解更多详情。(对于WebUI,你需要在安装后下载revAnimated_v11realisticVisionV20_v20

./models/

上传你的视频,输入提示,选择种子,然后点击:

  • 运行第一个关键帧:仅翻译第一帧,因此你可以在运行整个视频之前调整提示/模型/参数以找到理想的输出外观。
  • 运行关键帧:根据第一帧的设置翻译所有关键帧,因此你可以在运行整个视频之前调整与时间相关的参数以获得更好的时间一致性。
  • 运行传播:将关键帧传播到其他帧以进行完整的视频转换
  • 全部运行:运行第一个关键帧、运行关键帧运行传播

用户界面

我们提供丰富的高级选项供你玩

使用自定义模型
第一帧转换的高级选项
  1. 分辨率相关(帧分辨率,左/上/右/下裁剪长度):裁剪并将其短边调整为 512。
  2. 控制网相关:
    • 控制网络强度:输出与输入控制边沿的匹配程度
    • 控制类型:霍尔效应边缘或罐形边缘
    • 低/高阈值:更多边缘细节的低值
  3. SDEdit相关:
    • 降噪强度:重绘度(低值使输出看起来更像原始视频)
    • 保留颜色:保留原始视频的颜色
  4. 标清相关:
    • 步骤:降噪步骤
    • CFG 比例:输出与提示的匹配程度
    • 基本模型:基础稳定扩散模型(SD 1.5)
    • 新增提示/否定提示:补充提示
关键帧转换的高级选项
  1. 关键帧相关
    • 关键帧频率(K):每K帧对关键帧进行统一采样。对于大型或快速运动,值较小。
    • 关键帧数 (M):最终输出视频将具有 K*M+1 帧和 M+1 关键帧。
  2. 时间一致性相关
    • 跨帧注意:
      • 跨帧注意力开始/结束:应用跨帧注意力以实现全局样式一致性时
      • 跨帧注意更新频率(N):每N个关键帧更新一次参考样式帧。对于长视频,应该很大,以避免错误累积。
    • 形状感知融合检查以使用此功能
      • 形状感知融合开始/结束:应用形状感知融合以实现局部形状一致性时
    • 像素感知融合检查以使用此功能
      • 像素感知融合开始/结束:应用像素感知融合以实现像素级时间一致性时
      • 像素感知融合强度:保留非修复区域的强度。小,避免错误累积。大以避免毛刺质地。
      • 像素感知融合细节级别:锐化修复区域的强度。小,避免错误累积。大以避免毛刺质地。
      • 平滑融合边界:检查以平滑修复边界(避免误差累积)。
    • 颜色感知型阿达因检查以使用此功能
      • 颜色感知 AdaIN 开始/结束:应用 AdaIN 使视频颜色与第一帧一致时
完整视频翻译的高级选项
  1. 渐变混合:应用泊松混合以减少重影伪影。可能会减慢该过程并增加闪烁。
  2. 并行进程数:多处理以加快进程速度。建议使用大值 (8)。

选项

命令行

我们还提供了一个灵活的脚本来运行我们的方法。

rerender.py

简单模式

通过命令行设置选项。例如

python rerender.py --input videos/pexels-antoni-shkraba-8048492-540x960-25fps.mp4 --output result/man/man.mp4 --prompt "a handsome man in van gogh painting"

该脚本将运行完整的管道。将在 创建一个工作目录,结果视频将另存为

result/man
result/man/man.mp4

高级模式

通过配置文件设置选项。例如

python rerender.py --cfg config/van_gogh_man.json

该脚本将运行完整的管道。我们提供了目录中配置的一些示例。配置中的大多数选项与 WebUI 中的选项相同。请查看 WebUI 部分中的说明。

config

通过在配置中设置指定自定义模型。例如:

sd_model

{
  "sd_model": "models/realisticVisionV20_v20.safetensors",
}

自定义管道

与WebUI类似,我们提供三步工作流程:重新渲染第一个关键帧,然后重新渲染完整关键帧,最后通过传播重新渲染完整视频。要仅运行一个步骤,请指定选项 ,并:

-one
-nb
-nr

  1. 重新渲染第一个关键帧
python rerender.py --cfg config/van_gogh_man.json -one -nb
  1. 重新渲染完整关键帧
python rerender.py --cfg config/van_gogh_man.json -nb
  1. 通过传播重新渲染完整视频
python rerender.py --cfg config/van_gogh_man.json -nr

我们的 Ebsynth 实现

我们提供了一个单独的 Ebsynth python 脚本,其中包含通过示例设置视频样式中引入的时间混合算法,用于在关键帧之间插入样式。它可以独立于我们的重新渲染算法在你自己的风格化关键帧上工作。

video_blend.py

用法:

video_blend.py [-h] [--output OUTPUT] [--fps FPS] [--beg BEG] [--end END] [--itv ITV] [--key KEY]
                      [--n_proc N_PROC] [-ps] [-ne] [-tmp]
                      name

positional arguments:
  name             Path to input video

optional arguments:
  -h, --help       show this help message and exit
  --output OUTPUT  Path to output video
  --fps FPS        The FPS of output video
  --beg BEG        The index of the first frame to be stylized
  --end END        The index of the last frame to be stylized
  --itv ITV        The interval of key frame
  --key KEY        The subfolder name of stylized key frames
  --n_proc N_PROC  The max process count
  -ps              Use poisson gradient blending
  -ne              Do not run ebsynth (use previous ebsynth output)
  -tmp             Keep temporary output

例如,要在视频上运行 Ebsynth ,

man.mp4

  1. 将风格化的关键帧设置为每 10 帧(命名为 、、...)
    videos/man/keys
    0001.png
    0011.png
  2. 将原始视频帧放入(命名为 、、...)。
    videos/man/video
    0001.png
    0002.png
  3. 使用泊松渐变混合在视频的前 101 帧上运行 Ebsynth,并使用以下命令将结果保存到 FPS 25 以下:
    videos/man/blend.mp4
python video_blend.py videos/man \
  --beg 1 \
  --end 101 \
  --itv 10 \
  --key keys \
  --output videos/man/blend.mp4 \
  --fps 25.0 \
  -ps

(2) 结果

关键帧转换

白色古希腊雕塑,米洛维纳斯,浅粉红色和蓝色背景 一个英俊的希腊男人 中国水墨画中的一座传统山峰 卡通老虎
中国水墨画中的天鹅,单色 CG风格的美女 一个干净简单的白玉雕塑 深蓝色大海中的荧光水母

完整视频翻译

文本引导的虚拟角色生成。

https://github.com/williamyang1991/Rerender_A_Video/assets/18130694/1405b257-e59a-427f-890d-7652e6bed0a4

https://github.com/williamyang1991/Rerender_A_Video/assets/18130694/efee8cc6-9708-4124-bf6a-49baf91349fc

视频风格化和视频编辑。

https://github.com/williamyang1991/Rerender_A_Video/assets/18130694/1b72585c-99c0-401d-b240-5b8016df7a3f

引文

如果你发现这项工作对你的研究有用,请考虑引用我们的论文:

@inproceedings{yang2023rerender,
 title = {Rerender A Video: Zero-Shot Text-Guided Video-to-Video Translation},
 author = {Yang, Shuai and Zhou, Yifan and Liu, Ziwei and and Loy, Chen Change},
 booktitle = {ACM SIGGRAPH Asia Conference Proceedings},
 year = {2023},
}

确认

该代码主要基于ControlNet,Stable Diffusion,GMFlow Ebsynth开发。