AD-NeRF:用于说话人头部合成的音频驱动神经辐射场

作为构建未来虚拟世界诸多应用的主干,如何创造栩栩如生的虚拟数字人,一直是计算机视觉、计算机图形学与多媒体等人工智能相关学科密切关注的重要研究课题。近日,中国科学技术大学联合的卢深视科技有限公司、浙江大学与清华大学共同打造的 AD-NeRF 技术,引发了学界及业界关注。来自中科大张举勇课题组等机构的研究者们在近期大火的神经辐射场(NeRF: Neural Radiance Fields)技术基础上,提出了一种由语音信号直接生成说话人视频的算法。仅需要目标人物几分钟的说话视频,该方法即可实现对该人物超级逼真的形象复刻和语音驱动。

def transform_semantic(self, semantic, frame_index):
index = self.obtain_seq_index(frame_index, semantic.shape[0])
coeff_3dmm = semantic[index,...]
# id_coeff = coeff_3dmm[:,:80] #identity
ex_coeff = coeff_3dmm[:,80:144] #expression
# tex_coeff = coeff_3dmm[:,144:224] #texture
angles = coeff_3dmm[:,224:227] #euler angles for pose
# gamma = coeff_3dmm[:,227:254] #lighting
translation = coeff_3dmm[:,254:257] #translation
crop = coeff_3dmm[:,257:300] #crop param
coeff_3dmm = np.concatenate([ex_coeff, angles, translation, crop], 1)
返回 torch.Tensor(coeff_3dmm).permute(1,0)

论文题目
题目:AD-NeRF: Audio Driven Neural Radiance Fields for Talking Head Synthesis

作者团队:

会议:ICCV 2021

论文:https://arxiv.org/abs/2103.11078

代码:https://github.com/YudongGuo/AD-NeRF

任务定义
这篇文章主要针对的任务是talking face generation,也有一种说法是audio driven face reenactment。实际上整个流程是给定一段语音,和源人脸,生成一段说话人视频。

很多方法都是身份无关的,即模型训练好之后,可以生成多个人的说话视频。

AD-Nerf使用了Nerf作为基础架构,限定了当前人物的信息,一个模型只可以生成一个人物的说话视频,这也大大提升了生成的清晰度和分辨率。

动机/创新点
没有尝试使用复杂的音素-人脸对齐方式或者使用容易引入信息损失的二维关键点或者3DMM。

对人像使用Nerf进行建模,将头部和衣着的形变分开建模。

在这种情境下,可以很轻松的进行头部姿态的改变和背景的改变。

方法


实验结果
NeRF学习到的是一个映射函数,作者这里直观的想法是将音频信息融合到输入中。

d是视角信息(相机参数等),x是三维空间的坐标,a即音频信息。

通过一个MLP网络映射出,c颜色信息,以及密度信息。

这里的音频信息是使用DeepSpeech提取的,每20ms提取一个29维度的特征,最终每段特征的维度是16*29。

使用体渲染得到二维平面上的图像

这部分与Nerf中使用的体渲染的定义很相似。

给定近平面和远平面的信息,给定视线信息r(t)、方向d、射线的积累透明度T(t),最终得到渲染到平面上的颜色信息。

关于NeRF的表达

在AD-NeRF的训练过程中,引入了姿态的信息,因为人物在说话时会有各种不同的动作。作者发现头部的运动与衣着的运动不甚一致,所以尝试分离出头部和衣着两部分NeRF进行表达。

首先使用分割图,分割出头部、衣着、背景三部分。

每部分训练中的背景即为射线与远平面的交点的组合。

第一部分将头部视为前景,将背景图像视为背景进行训练

第二部分,将背景图和头部的组合视为背景,将衣着视为前景进行训练。

数据处理和损失函数
数据集是从网络上收集到的说话视频,3-5分钟,假定背景是不动的。

每个视频首先使用分割网络预测信息,然后预测头部的姿态,然后预测出背景图像。

损失函数使用了重建损失。

实验结果
消融实验

比较直接使用音频特征和使用表情参数作为中间表达

比较使用一个NeRF建模和分开建模

比较实验

与一些基于图像的方法进行比较(分辨率占优)

与基于模型的方法进行比较(效果更自然,甚至可以修改姿态)

定量展示,评估了lip-sync、AU误差等。

此外,作者还进行了用户调查实验。这是将神经渲染的NeRF与talking face generation领域结合的首次尝试,十分具有创新意义。
————————————————
版权声明:本文为CSDN博主「深兰深延AI」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shenlanshenyanai/article/details/121639043

AD-NeRF 数据集的制作
flyfish

通过一个视频文件是如何制作数据集的

以id是Obama为例
bash process_data.sh Obama
该命令自动执行了以下内容

第0步 提取声音特征
通过ffmpeg命令提取视频中音频数据,存储路径是dataset/Obama/aud.wav
通过deepspeech获取音频特征存储路径是dataset/Obama/aud.npy
https://github.com/mozilla/DeepSpeech

第1步 原始视频转换成图像
将原始视频变成一帧帧的图像,数据存储在dataset/Obama/ori_imgs文件夹中

第3步 人脸关键点检测
https://github.com/1adrianb/face-alignment
从dataset/Obama/ori_imgs文件夹中读取每一张图像,检测关键点,然后同名存储到dataset/Obama/ori_imgs文件夹中,文件扩展名是lms
用的是face-alignment,face-alignment可以检测2D或者3D的人脸关键点
下面一个检测2D,一个检测3D
fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False)


fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._3D, flip_input=False)


第3步 人脸解析
输入数据路径是dataset/Obama/ori_imgs
输出数据路径是dataset/Obama/parsing
结果是这样子的


第4步 提取背景图片
这里在第二步人脸关键点检测的时候,确定了最大有效图像个数,默认是100000
并且获取了图像的高度和宽度,后面的操作就操作这些有效的图像。
输出的背景文件是dataset/Obama/bc.jpg


第5步 存储训练数据
通过第4步得到背景数据结合第3步得到解析数据最终得到两种训练数据
一个是只有头部和背景的数据,dataset/Obama/head_imgs
另一个是背景和整个上半身的数据,dataset/Obama/com_imgs

第6步 估计头部姿态
生成文件的路径是dataset/Obama/debug/debug_render
参数存储文件是dataset/Obama/track_params.pt

第7步 写入Transform参数和配置文件
通过第6步得到track_params.pt参数,输出包括
HeadNeRF_config.txt
TorsoNeRF_config.txt
TorsoNeRFTest_config.txt
transforms_train.json
transforms_val.json
————————————————
版权声明:本文为CSDN博主「TheOldManAndTheSea」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/flyfish1986/article/details/122011036

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值