查看原文
其他

CVPR 2023 | 3D循环视频构建 (3D Video Loops from Asynchronous Input)

马力 将门创投
2024-08-23

论文链接:

https://arxiv.org/abs/2303.05312
项目主页:
https://limacv.github.io/VideoLoop3D_web/

DEMO:

https://limacv.github.io/VideoLoop3D_web/

注:
1、点开网页(Demo)后是一个实时渲染的动态的3D(严格意义上来说是2.5D)的视频,可以通过手指拖动或鼠标滑动来实时改变视角。
2、在宽屏下体验更加,在手机上可以将手机横屏然后刷新一下网页。
3、由于托管在github page上,所以加载起来会比较慢,加载时会闪烁,属于正常现象。

一、论文简介

在这片文章中,我们提出一个方法,它能从不同步的多目视频重建出一个3D的动态循环视频,并且提出了一种场景表示,它能较好的压缩3D视频,并且能在手机端实时渲染出来。目前代码和数据集均已开源,感兴趣的朋友们多多star!

深入具体方法之前有几个概念需要说明。

什么是3D视频:会动的三维场景 / 可以在任意视角下看的三维视频。注意不是指的那种3D电影,3D电影的视角其实只有两个(左眼和右眼)。

什么是3D循环视频:在3D视频基础上,是一个循环视频(looping video),循环的意思是从视频最后一帧切换到第一帧时,肉眼看不出明显的切换痕迹。这样有一个好处,就是对于本身就接近循环的场景而言,我只需要一段短视频,就可以源源不断的生成无穷无尽的视频。它的具体应用,比如用于一些网页的teaser,配图,或者当作一些虚拟背景,比如虚拟会议的背景,VR应用的背景,等等。

什么是不同步的多目视频:这是一个不严格的定义,对于这个方法的输入来说,我需要在不同视角下拍一段视频,每一段视频需要基本在同一视点(相机位姿不变),但是不同视角的视频可以不同步,即可以用一个相机分别在不同的视角拍摄,这样完全不同步的数据我们的方法也是可以处理的。

二、相关的工作
构建2D循环视频,是个比较小众的方向。之前的方法大致的做法是:
  1. 输入一个视角不变的视频,相当于我们有FxHxWx3的一个视频。

  2. 我们通过优化方法得到每个像素位置的最佳循环,即对于HxW个像素,每个位置在F帧中取出一个较好的循环片段,这个片段的结尾和开头的差别不能太大。

  3. 这样我们能重新组合出一个新的视频,利用一些blending的操作,我们可以吧一些不太连续的片段给变连续。

具体可以看这一篇:
Fast computation of seamless video loops
https://hhoppe.com/proj/fastloops/

3D视频表示,其实3D视频本身就是一个还在发展的方向,因‍‍‍为即使对于静态场景而言,比较好的重建出3D也是比较难的事情,对于动态视频而言,又增加了一个维度,所以问题更加困难。最近有几个用NeRF来重建3D视频的工作,都非常不错,之后有时间来系统整理一下这方面的工作。但是这篇文章没有用NeRF,或者TensorRF,Triplane,NGP等NeRF-like的3D场景表示,主要是因为NeRF的训练非常占用显存,特别是如果在训练过程中一次性训练一个大的video patch,对于NeRF-like的场景表示来说GPU memory占用是不可想像的(大致估计如果用NeRF来优化本文中的方法,需要大概6TB的显存)。

MPI场景表示,又叫Multiplane Image,多层图像。这篇文章的3D视频表示,是基于MPI的,就是看中它渲染和优化都比较快。它的原理其实十分简单,看下图就能一眼看懂,其实就是分布在视锥体下的一层一层图片,每一层图片带有一个透明度alpha通道。这样渲染的时候只要从远到近,开启alpha-blending就可以得到最终的结果。
Multiplane Image (MPI) 场景表示

三、
具体方法1 - MTV场景表示

前文中提到我们基于MPI。但是如果非常直接的将MPI拓展到动态视频,它将会占用非常大的存储资源。对于32层的MPI,有60帧视频,图像分辨率为640x360,那么将会用60x32x640x360x4个float来存储这个表示。因此我们提出了Multi-tile Video,想法非常的好理解,就是我把这些plane给细分成一个个tile,对于静态的部分来说,我只需要存储一个tile,对于空的tile来说,我直接就扔掉就可以了,只有对于动态的场景来说,我才需要每帧存储一个tile。
我们的MTV表示和直接将MPI扩展成MPV的对比

四、
具体方法2 - 3D循环视频优化

有了场景表示,我们就可以通过输入的多目视频对其进行优化。我们采用了和NeRF类似的优化方法:Analysis-by-synthesis,即通过可微分渲染得到结果,与输入做loss之后将error梯度回传到表示本身。我们用了一个两阶段的训练:
两阶段优化方法
第一阶段先优化一个静态的MPI。我们从输入计算得到长时间曝光的图片以及静态与否的一个Mask,经过刚刚所述的优化方法可以得到两个东西:静态的MPI,以及3D的静态与否的一个Mask。用这两个东西,我们就可以对我们的MPI进行tile的划分以及取舍了。具体的操作方法其实也很直观:首先将每个plane划分成规律的tile,然后对于每一个tile,找到它里面最大的透明度,最可能是动态的Mask,根据这两个值来判断我是否将这个tile丢弃,或者将它设为静态tile。这样我们就得到了一个MTV的表示。
第二阶段就开始优化动态的MTV。我们用了同样的优化方法,每一个iteration,渲染一个视频patch,然后与输入求loss。这次我们用了新提出的一个looping loss。这个loss是受这篇文章的启发得来的。具体来说这个loss的计算方法如下图Figure 4所示:

Looping loss

为了计算这个loss,我们对每个pixel对位置采取同样的策略。对于每一个像素位置,我们先在输入视频和生成视频的时序上提取所有的3Dpatch。然后对于这两组3Dpatch,我们会计算一个相似性分数。然后我们对于最相似的两个patch进行一个MSE的计算,然后把所有3Dpatch对的MSE加起来,就得到了我们的looping loss。
在提取patch的时候,我们要提取的应该是最终循环视频的patch,也就是说有无限多的patch需要提取,这显然是不现实的,但是根据Figure 5我们可以看到,其实只要对生成的短视频加上几帧pad,提取出来的patch就和原来无限多patch的分布是一样的。

五、结果

对比结果,ablation结果,以及更多的demo可以在项目主页访问到。

六、不足之处

  • 训练得到的结果其实还是有一些artifacts,并且这些artfiact在输入不满足假设的情况下会加剧,比如输入的场景不是循环的情况。
  • 它和NeRF相比,不能模拟高光等与视点有关的视觉效果,并且严格意义上是2.5D,并不是真正的3D
  • 目前优化阶段还是需要吃比较多的内存(20GB左右),所以这些结果都限制在640x360的分辨率

作者:马力

https://zhuanlan.zhihu.com/p/614619564

Illustration by IconScout Store from IconScout
-The End-

扫码观看

本周上新!




“AI技术流”原创投稿计划


TechBeat是由将门创投建立的AI学习社区(www.techbeat.net)。社区上线480+期talk视频,2400+篇技术干货文章,方向覆盖CV/NLP/ML/Robotis等;每月定期举办顶会及其他线上交流活动,不定期举办技术人线下聚会交流活动。我们正在努力成为AI人才喜爱的高质量、知识型交流平台,希望为AI人才打造更专业的服务和体验,加速并陪伴其成长。


投稿内容

// 最新技术解读/系统性知识分享 //

// 前沿资讯解说/心得经历讲述 //


投稿须知

稿件需要为原创文章,并标明作者信息。

我们会选择部分在深度技术解析及科研心得方向,对用户启发更大的文章,做原创性内容奖励


投稿方式

发送邮件到

chenhongyuan@thejiangmen.com

或添加工作人员微信(chemn493)投稿,沟通投稿详情;还可以关注“将门创投”公众号,后台回复“投稿”二字,获得投稿说明。


>>> 添加小编微信!



关于我“门”将门是一家以专注于发掘、加速及投资技术驱动型创业公司的新型创投机构,旗下涵盖将门投资基金将门创新服务以及TechBeat人工智能社区公司致力干通过连接技术与商业,发掘和培育具有全球影响力的科技创新企业,推动企业创新发展与产业升级。
将门成立于2015年底,创始团队由微软创投在中国的创始团队原班人马构建而成,曾为微软优选和深度孵化了126家创新的技术型创业公司。
如果您是技术领域的初创企业,不仅想获得投资,还希望获得一系列持续性、有价值的投后服务,欢迎发送或者推荐项目给我“门”bp@thejiangmen.com    
点击右上角,把文章分享到朋友圈点击“阅读原文”按钮,查看社区原文⤵一键送你进入TechBeat快乐星球
修改于
继续滑动看下一个
将门创投
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存