CameraCtrl

CameraCtrl

AI视频生成模型实现精准相机轨迹控制

CameraCtrl是一款基于AnimateDiffV3和SVD技术的视频生成模型,通过精确控制相机轨迹来创造连贯的多视角视频。该模型支持自定义相机移动路径,不仅适用于文本到视频生成,还能与RealEstate10K LoRA等模型结合,扩展应用场景。CameraCtrl为AI视频创作提供了更多可能性,使生成的视频内容更加丰富多样。

CameraCtrl视频生成相机控制动画扩散轨迹生成Github开源项目

CameraCtrl

本仓库是 CameraCtrl 的官方实现。

main 分支包含在 AnimateDiffV3 上实现的 CameraCtrl 的代码和模型。关于 CameraCtrl 与稳定视频扩散的代码和模型,请参阅 svd 分支了解详情。

CameraCtrl: 为视频扩散模型启用摄像机控制 <br> 何昊徐英豪郭宇炜Gordon Wetzstein戴波李弘升杨策元<br>

[论文] [项目页面] [权重] [HF演示]

待办事项

  • 发布推理代码。
  • 发布 AnimateDiffV3 上的预训练模型。
  • 发布训练代码。
  • 发布 Gradio 演示。
  • svd 分支发布 SVD 上的预训练模型。

配置

环境

  • 64位 Python 3.10 和 PyTorch 1.13.0 或更高版本。
  • CUDA 11.7
  • 用户可以使用以下命令安装软件包
conda env create -f environment.yaml conda activate cameractrl

数据集

  • RealEstate10K 下载摄像机轨迹和视频。
  • 运行 tools/gather_realestate.py 获取每个视频的所有片段。
  • 运行 tools/get_realestate_clips.py 从原始视频中获取视频片段。
  • 使用 LAVIS 或其他方法为每个视频片段生成说明文本。我们在 Google DriveGoogle Drive 提供了我们提取的说明文本。
  • 运行 tools/generate_realestate_json.py 生成用于训练和测试的 json 文件,你可以通过从训练 json 文件中随机抽样一些项目来构建验证 json 文件。
  • 完成上述步骤后,你可以得到如下结构的数据集文件夹
- RealEstate10k - annotations - test.json - train.json - validation.json - pose_files - 0000cc6d8b108390.txt - 00028da87cc5a4c4.txt - 0002b126b0a8a685.txt - 0003a9bce989e532.txt - 000465ebe46a98d2.txt - ... - video_clips - 00ccbtp2aSQ - 00rMZpGSeOI - 01bTY_glskw - 01PJ3skCZPo - 01uaDoluhzo - ...

推理

准备模型

  • HuggingFace 下载 Stable Diffusion V1.5 (SD1.5)。
  • AnimateDiff 下载 AnimateDiffV3 (ADV3) 适配器和运动模块的检查点。
  • HuggingFace 下载预训练的摄像机控制模型。
  • 运行 tools/merge_lora2unet.py 将 ADV3 适配器权重合并到 SD1.5 unet 中,并将结果保存到 SD1.5 文件夹下的新子文件夹中(如 unet_webvidlora_v3)。
  • (可选)从 HuggingFace 下载在 RealEstate10K 数据集上预训练的图像 LoRA 模型,以在室内和室外房产上采样视频。
  • (可选)从 CivitAI 下载个性化基础模型,如 Realistic Vision

准备摄像机轨迹和提示

  • 采用 tools/select_realestate_clips.py 准备轨迹 txt 文件,一些示例轨迹和相应的参考视频分别在 assets/pose_filesassets/reference_videos 中。生成的轨迹可以用 tools/visualize_trajectory.py 可视化。
  • 准备提示(负面提示,特定种子),一个示例是 assets/cameractrl_prompts.json

推理

  • 运行 inference.py 采样视频
python -m torch.distributed.launch --nproc_per_node=8 --master_port=25000 inference.py \ --out_root ${OUTPUT_PATH} \ --ori_model_path ${SD1.5_PATH} \ --unet_subfolder ${SUBFOUDER_NAME} \ --motion_module_ckpt ${ADV3_MM_CKPT} \ --pose_adaptor_ckpt ${CAMERACTRL_CKPT} \ --model_config configs/train_cameractrl/adv3_256_384_cameractrl_relora.yaml \ --visualization_captions assets/cameractrl_prompts.json \ --use_specific_seeds \ --trajectory_file assets/pose_files/0f47577ab3441480.txt \ --n_procs 8

其中

  • OUTPUT_PATH 指保存结果的路径。
  • SD1.5_PATH 指下载的 SD1.5 模型的根路径。
  • SUBFOUDER_NAMESD1.5_PATH 中 unet 的子文件夹名称,默认为 unet。这里我们采用 tools/merge_lora2unet.py 指定的名称。
  • ADV3_MM_CKPT 指下载的 AnimateDiffV3 运动模块检查点的路径。
  • CAMERACTRL_CKPT

上述推理示例用于在原始 T2V 模型域中生成视频。inference.py 脚本支持使用图像 LoRA(args.image_lora_rankargs.image_lora_ckpt)在其他域中生成视频,如 RealEstate10K LoRA 或一些个性化基础模型(args.personalized_base_model),如 Realistic Vision。详情请参考代码。

结果

  • 相同的文本提示,不同的相机轨迹
<table> <tr> <th width=13.3% style="text-align:center">相机轨迹</th> <th width=20% style="text-align:center">视频</th> <th width=13.3% style="text-align:center">相机轨迹</th> <th width=20% style="text-align:center">视频</th> <th width=13.3% style="text-align:center">相机轨迹</th> <th width=20% style="text-align:center">视频</th> </tr> <tr> <td width=13.3% ><img src="https://yellow-cdn.veclightyear.com/835a84d5/9915d54d-1129-4e3e-92f9-a50f8aa6cb54.png" alt="马1_轨迹" width="90%"></td> <td width=20%><img src="https://yellow-cdn.veclightyear.com/835a84d5/8f366329-5165-4310-8110-701d5afd6015.gif" alt="马1_视频" width="90%" ></td> <td width=13.3%><img src="https://yellow-cdn.veclightyear.com/835a84d5/0861a53a-18a1-4618-8ffd-4cb6e9dbb6c5.png" alt="马2_轨迹" width="90%"></td> <td width=20%><img src="https://yellow-cdn.veclightyear.com/835a84d5/353425f3-e659-41f5-a7ca-ec577dcf11ed.gif" alt="马2_视频" width="90%" ></td> <td width=13.3%><img src="https://yellow-cdn.veclightyear.com/835a84d5/7f020168-1f98-49f4-a1f6-b8debbd633c3.png" alt="马3_轨迹" width="90%"></td> <td width=20%><img src="https://yellow-cdn.veclightyear.com/835a84d5/a2c1421b-510a-4b7e-ad6f-8c2bffb132e6.gif" alt="马3_视频" width="90%"></td> </tr> <tr> <td width=13.3%><img src="https://yellow-cdn.veclightyear.com/835a84d5/d4520738-4e45-4efd-aa0e-113581ec9d44.png" alt="马4_轨迹" width="90%"></td> <td width=20%><img src="https://yellow-cdn.veclightyear.com/835a84d5/7257ebd7-7aaa-4345-b820-a0193dfd9d3a.gif" alt="马4_视频" width="90%" ></td> <td width=13.3%><img src="https://yellow-cdn.veclightyear.com/835a84d5/c5b6b0ad-34ed-437f-ad85-e39b9375d7be.png" alt="马5_轨迹" width="90%"></td> <td width=20%><img src="https://yellow-cdn.veclightyear.com/835a84d5/81657842-a40f-48d5-ad03-8e7a579dbff8.gif" alt="马5_视频" width="90%"></td> <td width=13.3%><img src="https://yellow-cdn.veclightyear.com/835a84d5/2fa3fe5d-16a2-4943-8f9b-d11af26ee009.png" alt="马6_轨迹" width="90%"></td> <td width=20%><img src="https://yellow-cdn.veclightyear.com/835a84d5/26f3fb89-3fa5-434e-a465-4f8ddb21f8a0.gif" alt="马6_视频" width="90%"></td> </tr> </table> - 不同领域视频的相机控制 <table> <tr> <th width=11.7% style="text-align:center">生成器</th> <th width=11.7% style="text-align:center">相机轨迹</th> <th width=17.6% style="text-align:center">视频</th> <th width=11.7% style="text-align:center">相机轨迹</th> <th width=17.6% style="text-align:center">视频</th> <th width=11.7% style="text-align:center">相机轨迹</th> <th width=17.6% style="text-align:center">视频</th> </tr> <tr> <td width=11.7% style="text-align:center" width="90%">SD1.5</td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/544b604a-7e44-41dd-86a2-3b762dd7d22f.png" alt="dd1_traj" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/380cd4c6-9b2e-4d1d-80d9-5484b21a9c80.gif" alt="dd1_vid" width="90%"></td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/baa90df7-c3c9-431e-8bbd-5c3dc0dff4dc.png" alt="dd2_traj" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/5250607b-ef25-45ca-8096-234a35b509a9.gif" alt="dd2_vid" width="90%"></td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/246b8ef2-2aad-4c90-a896-aa495cda8371.png" alt="dd3_traj" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/7ee47a24-c46f-464a-a156-da7ea445fec7.gif" alt="dd3_vid" width="90%"></td> </tr> <tr> <td width=11.7% style="text-align:center" width="90%">SD1.5 + 房地产 LoRA</td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/8c2293fc-c474-4c49-aa9b-b2721e3fc53f.png" alt="dd4_traj" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/a6b756a5-65be-43d0-af45-edc565ffbbe1.gif" alt="dd4_vid" width="90%"></td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/c3aa9122-49e1-48ff-9210-4180f1d276bc.png" alt="dd5_traj" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/8bbb92fe-6a31-480a-b896-16f64654fce1.gif" alt="dd5_vid" width="90%"></td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/79cfc85f-65f1-42df-9f6c-63bb2fbab4dd.png" alt="dd6_traj" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/1c8d131f-227a-4f03-b8fe-05617bb67b69.gif" alt="dd6_vid" width="90%"></td> </tr> <tr> <td width=11.7% style="text-align:center" width="90%">真实视觉</td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/40bc4de7-a386-407b-aaab-a1d23fb5e829.png" alt="dd7_traj" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/eb2a2138-83c8-4309-a1aa-82219f2d75f5.gif" alt="dd7_vid" width="90%"></td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/ae4c183a-6343-43eb-8dd7-e5967b509569.png" alt="dd8_traj" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/af925d5c-9e1f-40d4-82a7-f50c21d8af4b.gif" alt="dd8_vid" width="90%"></td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/022d872a-6241-4e6d-86a8-f1f963b72ae5.png" alt="dd9_traj" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/f14680c0-b39e-4061-bc2c-a9f530187378.gif" alt="dd9_vid" width="90%"></td> </tr> <tr> <td width=11.7% style="text-align:center" width="90%">卡通风格</td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/0e00a93f-66e7-47d7-bc35-516975b34f9c.png" alt="dd10_traj" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/9f104496-3dd0-4a61-aa23-3c5815c005b2.gif" alt="dd10_vid" width="90%"></td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/e21b3c03-fa02-4980-94c2-5f8bb421fb92.png" alt="dd11_traj" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/921426cf-ac62-47ff-a972-78f89e0a257a.gif" alt="dd8_vid" width="90%"></td> <td width=11.7%><img src="https://yellow-cdn.veclightyear.com/835a84d5/667cae28-81b9-454e-b77d-d2d0b17ed032.png" alt="dd12_轨迹" width="90%"></td> <td width=17.6%><img src="https://yellow-cdn.veclightyear.com/835a84d5/a39d78af-318b-48bd-bdc9-633eeb2e9e3f.gif" alt="dd12_视频" width="90%"></td> </tr> </table> 请注意,每张与视频配对的图像代表相机轨迹。图像上的每个小四面体代表一个视频帧的相机位置和方向。四面体的顶点代表相机位置,而底面代表相机的成像平面。红色箭头表示相机**位置**的移动。相机旋转可以通过四面体的方向观察到。

训练

步骤1(RealEstate10K 图像 LoRA)

更新配置文件 configs/train_image_lora/realestate_lora.yaml 中的以下数据和预训练模型路径

pretrained_model_path: "[替换为 SD1.5 根路径]" train_data: root_path: "[替换为 RealEstate10K 根路径]"

其他训练参数(学习率、轮数、验证设置等)也包含在配置文件中。

然后,使用 slurm 启动图像 LoRA 训练

./slurm_run.sh ${PARTITION} image_lora 8 configs/train_image_lora/realestate_lora.yaml train_image_lora.py

或使用 PyTorch

./dist_run.sh configs/train_image_lora/realestate_lora.yaml 8 train_image_lora.py

我们在 HuggingFace 上提供了我们预训练的 RealEstate10K LoRA 模型检查点。

步骤2(相机控制模型)

更新配置文件 configs/train_cameractrl/adv3_256_384_cameractrl_relora.yaml 中的以下数据和预训练模型路径

pretrained_model_path: "[替换为 SD1.5 根路径]" train_data: root_path: "[替换为 RealEstate10K 根路径]" validation_data: root_path: "[替换为 RealEstate10K 根路径]" lora_ckpt: "[替换为 RealEstate10k 图像 LoRA 检查点]" motion_module_ckpt: "[替换为 ADV3 运动模块]"

其他训练参数(学习率、轮数、验证设置等)也包含在配置文件中。

然后,使用 slurm 启动相机控制模型训练

./slurm_run.sh ${PARTITION} cameractrl 8 configs/train_cameractrl/adv3_256_384_cameractrl_relora.yaml train_camera_control.py

或使用 PyTorch

./dist_run.sh configs/train_cameractrl/adv3_256_384_cameractrl_relora.yaml 8 train_camera_control.py

免责声明

本项目仅供学术使用。我们对用户生成的内容不承担责任。用户对自己的行为完全负责。项目贡献者在法律上不隶属于用户,也不对用户的行为负责。请负责任地使用生成模型,遵守道德和法律标准。

致谢

我们感谢 AnimateDiff 提供的出色代码和模型。

BibTeX

@article{he2024cameractrl, title={CameraCtrl: Enabling Camera Control for Text-to-Video Generation}, author={Hao He and Yinghao Xu and Yuwei Guo and Gordon Wetzstein and Bo Dai and Hongsheng Li and Ceyuan Yang}, journal={arXiv preprint arXiv:2404.02101}, year={2024} }

编辑推荐精选

问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多