DepthCrafter:为开放世界视频生成一致的长深度序列

ops/2024/9/23 4:14:23/

在这里插入图片描述
通过利用视频扩散模型,我们创新了一种新颖的视频深度估算方法–DepthCrafter。 它可以为开放世界视频生成具有细粒度细节的时间一致性长深度序列,而无需摄像机姿势或光流等附加信息。

简介

动机。 尽管在静态图像的单目深度估算方面取得了重大进展,但由于开放世界视频在内容、运动、摄像机移动和长度等方面存在极大差异,因此估算开放世界视频的深度仍然具有挑战性。 我们提出了一种创新方法–DepthCrafter,用于为开放世界视频生成具有复杂细节的时间一致性长深度序列,而无需摄像机姿势或光流等任何补充信息。 DepthCrafter 通过精心设计的三阶段训练策略,利用编译好的成对视频深度数据集,从预先训练好的图像到视频扩散模型训练视频到深度模型,从而实现对开放世界视频的泛化能力。 我们的训练方法使模型能够一次性生成长度可变的深度序列,最多可达 110 帧,并从现实和合成数据集中获取精确的深度细节和丰富的内容多样性。 我们还提出了一种推理策略,通过分段估计和无缝拼接来处理超长视频。

在这里插入图片描述
概述 DepthCrafter 是一个条件扩散模型,它以输入视频为条件,对深度序列的分布进行建模。 我们分三个阶段对模型进行训练,其中扩散模型的空间层或时间层是在我们编译的现实数据集或长度可变的合成数据集上逐步学习的。 在推理过程中,给定一个开放世界的视频,它可以从初始化的高斯噪声中为整个视频生成具有细粒度细节的时间上一致的长深度序列,而不需要任何补充信息,如摄像机姿势或光流。

在这里插入图片描述
超长视频推理。 我们将视频划分为重叠的片段,并采用噪声初始化策略估算每个片段的深度序列,以锚定深度分布的尺度和偏移。 然后,这些估算出的片段通过潜在插值策略无缝拼接在一起,形成整个深度序列。

Project: https://depthcrafter.github.io/
Code: https://github.com/Tencent/DepthCrafter
arXiv: https://arxiv.org/abs/2409.02095
Paper:https://depthcrafter.github.io/pdf/DepthCrafter.pdf
Model:https://huggingface.co/tencent/DepthCrafter

使用

安装

git clone https://github.com/Tencent/DepthCrafter.git
cd DepthCrafter
pip install -r requirements.txt

推理

  1. 高分辨率推理,需要 1024x576 分辨率的约 26GB 内存的 GPU:
  • 完全推理(在 A100 上约为 0.6 fps,建议用于获得高质量结果):
python run.py  --video-path examples/example_01.mp4

通过四步去噪,在无分类器引导的情况下实现快速推理(在 A100 上约为 2.3 fps):

python run.py  --video-path examples/example_01.mp4 --num-inference-steps 4 --guidance-scale 1.0
  1. 低分辨率推理,需要约 9GB 内存的 GPU,分辨率为 512x256:
  • 完全推理(在 A100 上约为 2.3 帧/秒):
python run.py  --video-path examples/example_01.mp4 --max-res 512
  • 通过 4 步去噪和无分类器引导实现快速推理(在 A100 上约为 9.4 帧/秒):

python run.py --video-path examples/example_01.mp4 --max-res 512 --num-inference-steps 4 --guidance-scale 1.0

Gradio Demo

提供了本地的 Gradio Demo 模型,以运行:

gradio app.py

http://www.ppmy.cn/ops/114574.html

相关文章

【前端学习】作用域实际问题学习记录

在复习apply,call,bind的时候遇到了一个作用域问题。 let name noName let age 18function getMyname() {console.log(my name is this.name, and I am this.age years old); }getMyname() }在全局使用let定义变量name和age之后,运行g…

认识结构体

目录 一.结构体类型的声明 1.结构的声明 2.定义结构体变量 3.结构体变量初始化 4.结构体的特殊声明 二.结构体对齐(重点难点) 1.结构体对齐规则 2.结构体对齐练习 (一)简单结构体对齐 (二)嵌套结构体对齐 3.为什么存在内存对齐 4.修改默认对齐数 三.结构体传参 1…

Flink 实现无界流

Flink 实现无界流 package org.example.test;import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.api.java.opera…

【数据结构-差分】力扣1589. 所有排列中的最大和

有一个整数数组 nums ,和一个查询数组 requests ,其中 requests[i] [starti, endi] 。第 i 个查询求 nums[starti] nums[starti 1] … nums[endi - 1] nums[endi] 的结果 ,starti 和 endi 数组索引都是 从 0 开始 的。 你可以任意排列…

【数据结构】经典题

所以,语句 x; 的语句频度为:n(n1)(n2)/6 选C 临时变量 t:只使用了一个额外的变量来存储交换的值。 没有使用额外的数组:所有的操作都是在原数组 a 上进行的。 因此,算法的空间复杂度是常数级别的&#xff0…

使用Apache SeaTunnel高效集成和管理SftpFile数据源

本文为Apache SeaTunnel已经支持的SftpFile Source Connector使用文档,旨在帮助读者理解如何高效地使用SFTP文件源连接器,以便轻松地使用Apache SeaTunnel集成和管理您的SftpFil数据源。 SftpFile 是指通过 SFTP(Secure File Transfer Proto…

LeetCode题练习与总结:回文链表--234

一、题目描述 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2: 输入&#x…

python函数的一些介绍

函数的多返回值 def 函数(): return 1,2,3 x,y,z 函数()#对应1,2,3 有几个就要有对应的几个变量存储,不然会报错 函数的关键字参数 def 函数(name,id): 打印输出name和id 函数…