Project Icon

Rerender_A_Video

零样本文本引导的视频风格转换框架

Rerender_A_Video项目提出了一种零样本文本引导的视频到视频转换框架。该框架通过关键帧转换和全视频转换,实现了视频风格和纹理的时间一致性。无需重新训练,可与现有图像扩散技术兼容,支持使用LoRA自定义主题和ControlNet引入空间引导。这种方法能生成高质量、时间连贯的风格化视频。

Rerender A Video - 官方 PyTorch 实现

预览图

Rerender A Video: 零样本文本引导的视频到视频转换
杨帅, 周一凡, 刘子为罗乔恩
发表于 SIGGRAPH Asia 2023 会议论文集
项目主页 | 论文 | 补充视频 | 输入数据和视频结果

网页演示 访问量

摘要: 大型文本到图像扩散模型在生成高质量图像方面展现出令人印象深刻的能力。然而,将这些模型应用到视频领域时,确保视频帧之间的时间一致性仍然是一个巨大的挑战。本文提出了一种新颖的零样本文本引导的视频到视频转换框架,以将图像模型适配到视频。该框架包括两个部分:关键帧转换和全视频转换。第一部分使用改进的扩散模型生成关键帧,同时应用分层的跨帧约束来强制形状、纹理和颜色的一致性。第二部分通过时间感知的补丁匹配和帧混合将关键帧传播到其他帧。我们的框架以较低的成本(无需重新训练或优化)实现了全局风格和局部纹理的时间一致性。该适配方法与现有的图像扩散技术兼容,使我们的框架能够利用它们的优势,例如使用LoRA定制特定对象,以及使用ControlNet引入额外的空间引导。大量的实验结果证明了我们提出的框架在渲染高质量和时间连贯的视频方面优于现有方法。

特点:

  • 时间一致性: 跨帧约束实现低级时间一致性。
  • 零样本: 无需训练或微调。
  • 灵活性: 与现成模型(如ControlNet, LoRA)兼容,实现定制转换。

更新

待办事项

  • 集成到Diffusers。
  • FreeU集成到Rerender
  • 在README.md中添加推理说明。
  • 在WebUI中添加示例。
  • 在流水线中添加可选的泊松融合。
  • 为Windows添加安装说明

安装

请确保您的安装路径只包含英文字母或下划线

  1. 克隆仓库。(别忘了--recursive。否则,请运行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) 推理

WebUI (推荐)

python webUI.py

Gradio应用程序还允许您灵活更改推理选项。尝试一下以了解更多详情。(对于WebUI,您需要在安装后下载revAnimated_v11realisticVisionV20_v20./models/)

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

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

界面

我们提供了丰富的高级选项供您使用

使用自定义模型 - 使用LoRA/Dreambooth/微调/混合SD模型 - 修改`sd_model_cfg.py`以添加保存的SD模型路径 - 如何使用LoRA: https://github.com/williamyang1991/Rerender_A_Video/issues/39#issuecomment-1730678296 - 使用ControlNet的其他控制(如深度、姿势) - 在此处添加更多选项,如`control_type = gr.Dropdown(['HED', 'canny', 'depth']` https://github.com/williamyang1991/Rerender_A_Video/blob/b6cafb5d80a79a3ef831c689ffad92ec095f2794/webUI.py#L690 - 按照以下方式添加模型加载选项`elif control_type == 'depth':` https://github.com/williamyang1991/Rerender_A_Video/blob/b6cafb5d80a79a3ef831c689ffad92ec095f2794/webUI.py#L88 - 按照以下方式添加模型检测器`elif control_type == 'depth':` https://github.com/williamyang1991/Rerender_A_Video/blob/b6cafb5d80a79a3ef831c689ffad92ec095f2794/webUI.py#L122 - 这里给出了一个示例[链接](https://huggingface.co/spaces/Anonymous-sub/Rerender/discussions/10/files)

第一帧翻译的高级选项

  1. 分辨率相关(帧分辨率左/上/右/下裁剪长度):裁剪帧并将其短边调整为512。
  2. ControlNet相关:
    • ControlNet强度:输出与输入控制边缘的匹配程度
    • 控制类型:HED边缘或Canny边缘
    • Canny低/高阈值:低值可获得更多边缘细节
  3. SDEdit相关:
    • 去噪强度:重绘程度(低值使输出更接近原始视频)
    • 保留颜色:保留原始视频的颜色
  4. SD相关:
    • 步数:去噪步骤
    • CFG比例:输出与提示的匹配程度
    • 基础模型:基础Stable Diffusion模型(SD 1.5)
    • 附加提示/负面提示:补充提示
  5. FreeU相关:
    • FreeU第一/第二阶段骨干因子:=1无效果;>1增强输出颜色和细节
    • FreeU第一/第二阶段跳跃因子:=1无效果;<1增强输出颜色和细节

关键帧翻译的高级选项

  1. 关键帧相关
    • 关键帧频率(K):每K帧均匀采样关键帧。大幅或快速运动时使用小值。
    • 关键帧数量(M):最终输出视频将有K*M+1帧,包含M+1个关键帧。
  2. 时间一致性相关
    • 跨帧注意力:
      • 跨帧注意力开始/结束:应用跨帧注意力以保持全局风格一致性的时间
      • 跨帧注意力更新频率(N):每N个关键帧更新一次参考风格帧。长视频应使用大值以避免错误累积。
      • 宽松跨帧注意力:在更少层使用跨帧注意力,以更好地匹配输入视频(适用于大幅运动的视频)
    • 形状感知融合 勾选使用此功能
      • 形状感知融合开始/结束:应用形状感知融合以保持局部形状一致性的时间
    • 像素感知融合 勾选使用此功能
      • 像素感知融合开始/结束:应用像素感知融合以保持像素级时间一致性的时间
      • 像素感知融合强度:保留非修复区域的强度。小值避免错误累积。大值避免模糊纹理。
      • 像素感知融合细节级别:锐化修复区域的强度。小值避免错误累积。大值避免模糊纹理。
      • 平滑融合边界:勾选以平滑修复边界(避免错误累积)。
    • 颜色感知AdaIN 勾选使用此功能
      • 颜色感知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 "梵高画作中的一个英俊男人"

该脚本将运行完整流程。将在result/man创建一个工作目录,结果视频将保存为result/man/man.mp4

高级模式

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

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

该脚本将运行完整流程。 我们在config目录中提供了一些配置示例。 配置中的大多数选项与WebUI中的相同。 请查看WebUI部分的解释。

通过在配置中设置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,使用Stylizing Video by Example中介绍的时间混合算法来插值关键帧之间的风格。 它可以独立于我们的Rerender算法,处理您自己的风格化关键帧。

用法:

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

位置参数:
  name             输入视频路径

可选参数:
  -h, --help       显示此帮助消息并退出
  --output OUTPUT  输出视频路径
  --fps FPS        输出视频的FPS
  --beg BEG        要风格化的第一帧索引
  --end END        要风格化的最后一帧索引
  --itv ITV        关键帧间隔
  --key KEY        风格化关键帧的子文件夹名称
  --n_proc N_PROC  最大进程数
  -ps              使用泊松梯度混合
  -ne              不运行ebsynth(使用之前的ebsynth输出)
  -tmp             保留临时输出

例如,要在视频man.mp4上运行Ebsynth,

  1. 将风格化的关键帧每10帧放入videos/man/keys(命名为0001.png0011.png等)
  2. 将原始视频帧放入videos/man/video(命名为0001.png0002.png等)。
  3. 使用泊松梯度混合在视频的前101帧上运行Ebsynth,并以25 FPS将结果保存为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

新特性

与会议版本相比,我们持续增加新功能。

新特性

松散跨帧注意力

通过在较少的层中使用跨帧注意力,我们的结果将更好地匹配输入视频,从而减少由不一致造成的重影伪影。可以通过在WebUI的关键帧转换高级选项中勾选"松散跨帧注意力"或在脚本中设置loose_cfattn来激活此功能(参见config/real2sculpture_loose_cfattn.json)。

FreeU

FreeU是一种无成本提高扩散模型样本质量的方法。我们发现使用FreeU后,我们的结果将具有更高的对比度和饱和度,更丰富的细节,以及更生动的色彩。可以通过在WebUI的第一帧转换高级选项中设置FreeU骨干因子和跳跃因子,或在脚本中设置freeu_args来使用此功能(参见config/real2sculpture_freeu.json)。

引用

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

@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},
}

致谢

代码主要基于ControlNetStable DiffusionGMFlowEbsynth开发。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号