数字人深度思考(唇形优化)
面了一家北京公司,提到希望对唇形优化,测试了官方的微信小程序,背景分割有锯齿状,口型与TTS对不上,脸部超分存在色差,应该是类似wav2lip GAN的方案,这是大部分初创公司会选择的方案。
口型驱动背景
逃不开的 wav2lip, 第一阶段训练一个专家鉴别器,鉴别口型和audio的匹配度,第二阶段通过encoder-decoder或者GAN的方式训练,减少输入audio和ref图片生成图片与GT的差距;
SadTalker比较新,可以认为是集大成者,分为嘴部和头部pose两部分,对于嘴部,用3DMM(Deep3DRecon)做中间表示,基于wav2lip的输出利用表情系数的间接表示来学习唇形运动;对于头部,使用VAE结构,输入audio+第一帧姿态+style系数,来学习t帧与第一帧的残差(更稳定);生成上借鉴了vid2vid和PIRenderer,只使用表情系数和头部pose来生成最终结果。
最大的问题在于wav2lip是在 LRS2(BBC视频)上train的,SadTalker又在VoxCeleb上train,最终的尺寸也只有256x256,这种配置在中文上不可能取得好的效果,也不可能获得高清图像。
一些细节
APB2Face第一阶段使用audio/pose/eye blink生成landmark,然后用pix2pix方式生成真实人脸,基于鉴别器的方式提升图像质量,每个人脸需要训练一个模型,由于audio/pose/eye多分支的输入使得特征解耦,可以分别控制面部不同位置的姿态;
APB2FaceV2解决了一个模型换N脸的问题,引入了AdaIN设计的AdaConv风格化(kerner1->3),audio经过MFCC编码,效果仅在domain内部取得不错的效果,而在domain外面的人脸显然不能cover;
pix2pix在基础的GAN上引入了conditionGAN,提供了一张inference图片用于计算generator(UNet)生成图像与domain的差距(L1);
pix2pixHD引入multi scale,解决高分辨率生成问题,使网络兼顾局部和全局特征;
CycleGAN 克服了 pix2pix 在图像转换中必须一一配对的限制,给定两个无序图像集 X 和 Y,CycleGAN基于两个生成器+cycle loss实现了domain adaption;
instagan引入了图像实例mask,网络结构与cyclegan相似,将多个不同的实例分割标签图一起concat进入网络,实现了跨实例的生成;
- 从分辨率的角度看,256x在人头生成上不支持高清效果,至少要512x;
- 从数据集上,要解决静音问题,
- 从生成图像质量的角度看,主要从网络结构和Loss的方向去考虑,
- Loss方向:L1 L2的生成图像与domain差异loss,提高图像质量的vgg loss (perception loss),基于鉴别器的GAN loss;
- 网络结构:生成器 UNet/ResNet, Multi-scale鉴别器;
- 音频输入的角度,MFCC/deepspeech等开源方案可以将audio转换为feature;
- 控制生成稳定性的方面,引入inference对G D在loss层面上进行引导;
- 增强泛化性上(语速和音色),需要对img和audio加噪;
- 从解决口型的问题上,关键应该是数据集mask的处理;
总结
- 基于GAN/VAE做audio2face的路线,为了解决高清问题,256的分辨率是无法支撑的,必须要有大量中文音频512以上的数据支撑;
- 基于一些开源实现wav2lip Deep3DFace等等,难以避免的会陷入到domain limit里面,受限于训练数据,无法在某些场景上取得好的效果;
- 如果没有大量数据的支撑,应当尽量简化问题,例如预测更少的区域,限定在更特殊的数据背景下,限定在某种TTS音色下,等等;
- 牙齿生成大部分开源思路还是依托于SR模型,受限制严重,teethnet或许是一种好的思路;