音视频开发之旅()数字人照片说话之adalker腾讯云开发者社区

AI数字人目前做的最好的无疑是heygen,但是费用也是很贵,也有一些其他的商业应用,比如:微软小冰、腾讯智影、万兴播爆和硅基智能等。

而开源的方案也是层出不穷,比如:wav2lip、sadtalker、genfaceplusplus和videoRetalker,就在这两天 阿里的EMO也发布了一些效果视频也是相当不错,尚未开源。

今天我们来学习分析下Sadtalker。这里涉及到很多技术点:文字转语音、图像识别、音频驱动口型和肢体联动以及视频合成等

一、效果展示

生成步骤:

使用Stablediffusion文生图生成虚拟人物照片

准备文本内容,把内容使用文字转语音

使用音频驱动照片嘴唇和表型等变化生成视频

二、SadTalker原理学习

在制作会说话的头像(Talking Head Generation)时,会面临一些挑战,比如头部运动不自然、面部表情扭曲,甚至人物的身份似乎发生了变化。这些问题通常是由于直接从二维图像中学习头部和面部的运动,而这些二维图像中的运动信息是复杂相互关联的。同样,即使使用三维信息,也可能会遇到表情僵硬和视频不连贯的问题。

为了解决这些问题,西安交通大学的研究人员提出了SadTalker模型。这种方法首先生成了一个三维的脸部模型(3DMM),这个模型包括头部的姿势和表情等系数。然后,利用三维面部渲染器来生成视频。为了让生成的面部运动更加真实,研究者探索了音频和不同类型的面部运动系数之间的联系。他们设计了ExpNet网络,通过观察三维渲染的人脸来学习如何产生准确的面部表情。同时,为了生成多样化的头部动画,还设计了PoseVAE网络来生成不同风格的头部动画。最后,将生成的3DMM系数映射到面部渲染器的三维关键点空间,以生成最终的视频。

图片

2.1 表情系数 ExpNet

图片

对于一段音频,首先生成t帧表情系数,其中每个帧的音频特征就是0.2s的梅尔频谱。训练时,利用一个基于ResNet的音频编码器映射到一个隐空间,然后线性层作为一个映射网络解码表情系数。为了保证个人特征,通过第一帧的表情系数建立表情和特定人的身份进行关联;为了减少在说话时其他面部成分的表情的权重,利用预训练的Wav2lip生成的嘴唇运动系数作为target

2.2 头部姿势 PoseVAE

图片

PoseVAE没有直接生成姿势,而是学习与第一帧姿势 ρ0之间的残差,这使本方法能够在测试阶段中基于第一帧条件下的生成更长、稳定和连续的头部运动

2.3 3D-aware面部渲染

图片

face-vid2vid需要真实视频作为驱动信号,而研究者提出的面部渲染器利用3DMM参数进行驱动,通过mappingNet来学习3DMM运动系数(头部姿势和表情)和3D关键点之间的关系

三、SadTalker代码实现分析

3.1. 模型初始化

preprocess_model:用于将人脸从图像中裁剪出来,并提取人脸的关键点以及3DMM形态模型

audio_to_coeff:将音频转换为控制面部表情特别是唇部运动的系数

animate_from_coeff: 根据上面两个模型数据生成最终的面部动画

复制

3.2. 处理流程

复制

主要用于从视频帧中裁剪出人脸,并提取面部关键点和3DMM(三维形态模型)参数

复制

用于根据音频进行 表情系数和 头部姿态参数 的预测

复制

根据3dmm人脸模型数据以及音频驱动口型数据和关键点信息等 生成视频帧

生成256x256的人头口型说话视频、对音频进行重采样到16000,然后合并音轨和视轨

把裁剪人脸的生成的对口型视频再贴回到全身图生成全身视频

对人脸和背景进行画质增强或超分

复制

四、性能优化

4.1 工程优化

4.1.1 处理速度慢

通过上面的代码分析,主要流程有三步:

人脸关键点检测&3DMM形态模型提取;根据音频进行 表情系数和 头部姿态参数;人脸渲染视频生成

其中最主要耗时有三块:FaceRender(人脸渲染)、seamlessClone(把人脸“贴回”原图)、画质增强

face render可以通过设置batch_size加快,batchsize从默认值2增加到4,人脸渲染时间降低2s,但gpu翻倍,如果gpu资源足够的话可以增加batchsize,否则就不要修改.

seamlessClone  驱动口型动的是256*256的人头区域,最终想输出full的视频,需要把上面的头部视频加上mmmmmmmmmmmmmmmmbn 原始图片根据mask和location进行合并成新的视频,这个可以优化,通过线程池进行加速,耗时可以从40s减少到20s

复制

3、画质增强这块耗时暂时没有很好的优化方案

4.1.2 显存占用过多

如果是图片比较大,很容易爆显存,这是如果内存足够大的话,可以把在make_animation中把图片放到cpu,注意内存不要爆了。

另外可以对大图像进行resize进行输入

4.2 模型加速

使用 TensorRT 对 SadTalker 模型进行加速

修改 ONNX 模型,降低模型精度。float32 精度下加速效果不是很明显,可能只有 1.x 倍的提升,而在 fp16 精度下虽然有 2.5 倍的提升,但是生成的视频质量会有所下降

THE END
0.AI实战:一键生成数字人视频!阿里百炼数字人AI实战:一键生成数字人视频! 做自媒体行业的同学都知道,制作一条可发布的视频成本是很高的,通常我们需要先录制原始视频,而录制原始视频的时间通常是发布视频时长的 3-5 倍,之后还需要花费很长的时间剪辑,最终才能制作一条可发布的视频,相当费时费力。 但是,技术发展到今天,我们可以使用数字人来自动生成视频。这样jvzquC41dnuh0lxfp0tfv8xwhw718>4ctvodnn4fgvgjn|436:<:8==7
1.360智脑大模型国内首发“文生视频”功能重新定义AI数字人来源: 央视网 2023年06月14日 12:33 内容简介 360智脑大模型AI数字人 新闻栏目推荐 新闻联播 焦点访谈 新闻直播间 新闻1+1 朝闻天下 CCTV-1综合 CCTV-2财经 CCTV-3综艺 CCTV-4中文国际 CCTV-5体育 CCTV-5+体育赛事 CCTV-6电影 CCTV-7国防军事 CCTV-8电视剧 CCTV-9纪录 CCTV-10科教 CCTV-11jvzquC41pg}t0lhvx0ipo872455188661XOEGphtzXyZibhGf2Os7xRXK4918:90ujznn
2.领绘AI领绘AI是一个在线AI数字人视频创作平台,通过AI简化视频创作的过程,提供AI数字人口播、AI数字人短视频制作、AI数字人分身定制、数字人声音克隆等服务,300+精品数字人形象和声音供您选择。jvzquC41yy}/nrsijwo/c{y1