苹果把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

相关文章

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W