苹果把NeRF玩出新高度:只需单个10s视频,就能重构人物动作和场景

2024-03-23 17:30

本文主要是介绍苹果把NeRF玩出新高度:只需单个10s视频,就能重构人物动作和场景,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

羿阁 发自 凹非寺
量子位 | 公众号 QbitAI

有了这个发明,以后演员拍戏再也不用抠图了?

答:可以直接一键合成。(手动狗头)

让我们赶紧来看看,这个由苹果最新研发的NeuMan框架:

只需输入一段10s左右的人物视频,就能合成该人物在新场景下做着各种新动作的影像。

前空翻?so easy!

c0744a2187240887838f8c1d0268acc3.gif

跳舞那也是不在话下。

这妖娆的舞姿,看来NeuMan心里也有一个舞魂~

84019e43dc068622a72fee396c4f4921.gif

有网友看完就表示:喔~简直是电影界未来的发展方向。

eeb7fb52e0852ea88170bd6bf8804b0c.png

目前,有关NeuMan的研究论文已被ECCV’22收录,并且已在GitHub上开源。

f62235fa993ab3890e3d4b12a96096f9.png

全新场景渲染

在介绍NeuMan的原理之前,让我们再来欣赏几个酷炫的例子~

如下图所示,左上角是输入的训练视频,左下角是新的背景,右边则是合成后小哥在新背景下跳跃的效果。

0597552b27341ac70dd44cfc0f27dd90.gif

不仅是跳跃这种常规操作,广播体操也完全没问题。

374b3688eda3e5497d1b93421edfe9d5.gif

更厉害的是,NeuMan还可以将上面例子中的两个人合成到一起。

2eaa2e938d48465b00f2e3b30221b4fe.gif

再加上一个人,立马变成魔性的广场舞视频。

cc123e719dd7c5cd7496f593f3d801d0.gif

这微笑的小表情,真的很难解释不是本人亲自跳的(手动狗头)

那么话说回来,这个神奇的NeuMan背后的原理是什么呢?

基于NeRF的新突破

事实上,自从伯克利和谷歌联合打造的NeRF(Neural Radiance Fields神经辐射场)横空出世,各种重建三维场景的研究层出不穷。

NeuMan原理也是基于此,简单来说,就是用单个视频训练一个人物NeRF模型和一个场景NeRF模型,然后再合成在一起生成新的场景。

0d120f16f89867b99499c87700977eac.png

首先,在训练场景NeRF模型时,我们先从输入的视频中提取相机姿态、稀疏场景模型和多视角-立体深度图。

对于原视频中被人体遮挡的部分,则使用Mask R-CNN进行图像实体分割,将人体掩模膨胀4倍,以确保人体被完全遮蔽。此时,就能做到仅在背景上训练场景NeRF模型。

至于人体NeRF模型训练,研究人员引入了一种端到端的SMPL优化(end-to-end SMPL optimization)和纠错神经网络(error-correction network)。

SMPL(Skinned Multi-Person Linear Model)是一种基于顶点的人体三维模型,能够精确地表示人体的不同形状和姿态。

如下图所示,使用端到端的SMPL优化的人体模型,能够更好地表现人体的典型体积。

fc30885f0f5b8138968f69bf7c2d5a86.png

纠错神经网络则是用来弥补SMPL模型无法表达的细节。值得一提的是,它只在训练过程中使用,在进行全新场景渲染时会被放弃,以免造成过度拟合。

接下来,在两个模型对齐的阶段,研究人员先使用COLMAP解决任意尺度下的对齐问题。然后通过假设人类始终与地面有至少一个接触点,来进一步估计该场景的比例。

850841e51d236207e503cebc74b39b89.png

最后,再应用SMPL网格和场景的点云叠加,就形成了新图像的渲染效果。

10f78556a48348b0bdd0dd2ca56c5b4b.png

最终成品显示,该场景NeRF模型方面模型能够有效地去除场景中的人类,并在有限的场景覆盖下生成高质量的新背景渲染图像。

807c1cc94921cef15aa7526d91c830ed.png

人物NeRF模型方面也能很好的捕捉人体的细节,包括袖子、衣领甚至衣服拉链,甚至在渲染新动作时,能执行难度极大的侧翻动作。

32e3dcc47d1d37bd09cc32bdc982c6da.png

值得一提的是,不同于现行的其他NeRF模型对训练视频要求很高,比如需要多个机位拍摄、曝光要保持不变、背景要干净等等,NeuMan的最大亮点是仅通过用户随意上传的单个视频就能达到同款效果。

3e162535be830b96ad43d03d8ad1713f.png

并且,在分别输入六组不同的视频后,数据显示,与此前方法相比,NeuMan的方法生成的视频渲染质量最佳。

5d0e52b3d0ec8a42210866de0ae47a49.png

不过,研究团队也承认,NeuMan的设计目前还存在一些缺陷。

例如,由于人在活动时手势的变化细微又多变,因此生成视频中对手部细节的把握还不是很准确。

另外,在NeRF模型渲染时,由于系统假设人类始终与地面有至少一个接触点,因此NeuMan不能适用于人与地面接触为零的视频,比如人做后空翻的视频。

要想解决这个问题,需要更智能的几何推理知识,这也是未来研究的一个发展方向。

研究团队

这项研究由苹果机器学习研究中心和英属哥伦比亚大学合作完成。

第一作者Wei Jiang,是英属哥伦比亚大学计算机科学专业的一名四年级博士生,目前在苹果机器学习研究中心实习。

主要研究方向是新视角合成、视觉定位和三维视觉。

5ef8c7c0bc4856d6b5efec458e538f6f.jpeg

他还是英属哥伦比亚大学计算机视觉实验室的一员,导师是Kwang Moo Yi 教授。

硕士毕业于波士顿大学计算机科学专业,本科毕业于浙江工业大学软件工程专业。

参考链接:
[1]https://twitter.com/anuragranj/status/1559606408789708800
[2]https://arxiv.org/abs/2203.12575
[3]https://machinelearning.apple.com/research/neural-human-radiance-field
[4]https://github.com/apple/ml-neuman
[5]https://jiangwei221.github.io/

这篇关于苹果把NeRF玩出新高度:只需单个10s视频,就能重构人物动作和场景的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/839034

相关文章

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Java中Runnable和Callable的区别和联系及使用场景

《Java中Runnable和Callable的区别和联系及使用场景》Java多线程有两个重要的接口,Runnable和Callable,分别提供一个run方法和call方法,二者是有较大差异的,本文... 目录一、Runnable使用场景二、Callable的使用场景三、关于Future和FutureTa