前言
想要探究一下文章中是怎么学习到所谓的隐式属性的
简介
joint learning:
Joint Learning是指模型中存在多个子任务,而我们可以将这些子任务一起训练。
这么说起来有点抽象,可以举个简单的例子。比如在深度学习中,这个“深度”就可以理解为采用了多个模型进行Joint Learning,比如在许多NLP任务中,在进行模型训练前,我们会使用Word Embedding层(word to vector)对词向量进行编码,而Embedding层的参数,可以在和整个模型一起训练中得到,也可以单独对该层进行预训练,而后在该层参数确定后再拿来和模型剩余部分一起训练,这两种方法都属于Joint Learning的范畴,即Joint Learning中的子任务既可以和整个模型一起训练,也可以单独训练。而Joint Learning的含义则是将多个子模型集成为一个模型,完成最终的目标任务。
输入&输出:
一段音频和一段视频, 输出带有头部姿态的, 眨眼的, 和音频同步的人的视频
数据:
对于视频数据集使用了论文 3d talking face
with personalized pose dynamics 提到的。
音频预处理没有使用通常的MFCC, 而是使用了DeepSpeech, 每秒50帧然后上重采样到每秒30帧, 也就是1s对对应30*D的维度, 这里D=29
头部姿态和眨眼使用了OpenFace, 论文 Openface: A general-purpose face recognition
library with mobile applications 中提到的方法, 头部姿态提取欧拉角以及一个3d变换向量
对于眼睛的运动, 利用AU来定义眼睛周围肌肉群的动作强度。
对于3D model使用了一个弱监督重建的方法, 我看好几个论文使用他了。Accurate 3d face reconstruction with
weakly-supervised learning: From single image to image set.
贡献:
- 显示属性和隐式属性是一起训练的,产生的效果很好
- 提出了FACIAL-GAN, 使用每个帧的语音信息对上下文信息进行编码, 模拟合成头部运动需要的隐式属性。
- 把FACIAL-GAN 产生的eye blinking 的AU编码到eye attention map, 可以在渲染中用到
想法:
- 这里其实也提到了, eye, pose等很依赖long term 的 information, 还有提取特征的Deepspeech, openface, 论文 deep video portraits
- 还有一个3d 弱监督重建的方法
- 这个一个好处是有眨眼的动作, 一般3d模型是难以做到的, 但是并没有在文中很明显的指出为什么输入需要是一段视频, 一张图片不可以吗?
方法
问题构思
传统的公式可能是这样
隐式和显示属性有固有的联系,namely
FACe Implicit Attribute Learning (FACIAL).
作者提出的是这样:
其中有个eye regions, R是render
FACIAL-GAN
-
每一帧生成一个显示的表达如嘴巴运动
-
编码上下文信息, 例如把时间相关性放进网络中, 用于隐式属性的学习。这个FACIAL-GAN包括3个部分,一个 G t e m G^{tem} Gtem, 一个 G l o c G^{loc} Gloc , 一个D
下面是示意图:
注意这里完全是音频作为输入, 音频是T帧, 每帧29维
Temporal correlation generator
为了提取整个序列的关系, 关键idea就是送入整个T音频序列到contextual encoder, 然后产生一个z, 这个z就代表整个序列的时序关系或者说上下文关系, 就可以理解为transformer的encoder送出来的然后切分开可以代表一帧, 就是上图左边的部分,详细看下图:
Local phonetic generator
上面的集中在全局, 而这个集中在local features c t c_t ct, 输入是个16帧的语音, 输出是第t帧的特征。 这样每个时间步t就有c特征和z特征了。 然后经过fc得到71维的向量, 详细如下图
其中f, p, e分别值得是facial expression parameters, head pose features, eye blink AU estimation。
Implicit PartSensitive
Encoding
下面就说说怎么对隐式向量编码的, 这里主要是指的眨眼睛,一个直观的方法是把blink value和face image 按通道级联, 但是CNN不能专门识别眼睛领域hhh, 这里作者提出使用了一个 eye attention map, 这个东西首先定位眼睛区域, 然后 根据blinking AU value 来改变对应位置的像素值就, 作者具体做法是:
-
make 3D model眼睛周围的vertices, 具体公式如下:
-
在3d 渲染期间, 定位和mask region有关的像素, 来生成eye attenion map
- 这个图提到编码的e由两部分组成, 一个是估计的眨眼AU, 一个是eye attention map
- 最后把归一化的blinking value根据 attention map 应用在像素上
RenderingtoVideo
Network
这是最后一步了。借鉴了一些工作。
总结:
如下图:
Deep speech:
Scaling up end-to-end speech recognition
语音识别任务是把声音数据转换为文本,研究的主要目标是实现自然语言人机交互。在过去的几年里,语音识别领域的研究成为人们关注的热点,出现了众多新型语音应用,例如语音搜索、虚拟语音助手(苹果的Siri)等