一 写在前面
未经允许,不得转载,谢谢~~~
大概有几个月没有写论文解读类的blog了,有点手生,但还是想坚持更新吧,最近会陆续更一些关注的paper的解读笔记,欢迎交流。
主要信息:
- 文章出处:CVPR2020
- 文章代码:暂时没找到
- 视频demo:https://www.youtube.com/watch?v=CFPTycDPYF8
- 原文链接:http://openaccess.thecvf.com/content_CVPR_2020/papers/Burkov_Neural_Head_Reenactment_with_Latent_Pose_Descriptors_CVPR_2020_paper.pdf
二 主要内容
2.1 任务介绍
文章的主要任务是head reenactment, 具体内容结合下图进行介绍:
task给定一个表示姿态的pose,和一个表示面貌的identity,其目标为让identity保持其面貌不变的情况下去做给定pose中所示的姿态。
在这个例子中蒙娜丽莎就是我们的identity,上面一排呈现不同头部姿态的图我们称之为pose driver,第2排即蒙娜丽莎模仿第1排对应pose的结果。
这里给的例子是image-level的,但其实文章工作是做到video-level的,结合这个例子就是可以让蒙娜丽莎跟着一段视频进行pose的变换。
2.2 相关工作
作者首先提出pose representation学习对于这个任务的性能表现好坏具有关键性的作用。
大多数方法都是基于keypoints即头部关键点信息来对图片进行表征的,这种方法的好处是可以使用现有的一些检测器,比较方便鲁棒。
但也有很多的不足:
- 需要手工标注;
- 会缺少比较多的细节,比如眼部的细节之类的;
- 很多数据集的标注缺少结构基础,尤其是在有遮挡的情况下就会出现关键点不明确甚至出错的可能。
- 关键点是person-specific的,这一点与head reenactment这个任务有出入。(这里我自己理解的是假设我们的目标是要学习某个固定的pose,但不同胖瘦或者不同脸型的人作为pose driver时即使pose一样,其对应的keypoints也是有差别的)
当然文中也列了一些别的例如利用Action Unit(AU)的,或者是经典的3D morphable model(3DMM)方法,我自己对这个领域不是很熟悉,就不在这里介绍了。
2.3 本文工作
这篇工作的前驱工作是Few-shot adversarial learning of realistic neural talking head models(ICCV2019),这就是一篇利用keypoints信息进行pose特征学习的工作。
前驱工作框架图文章在这个框架的基础上主要在2个方面做了修改提升:
- 使得模型拥有识别前景的能力;(增加了语义分割)
- 修改pose的表征从keypoints-based ---> latent pose vector; (最主要的一点)
:)如果要详细学习这篇文章的处理细节,还是应该去翻出之前这篇文章的原文学习一下的,如果只是想了解这篇文章的idea或者说思路的话我觉得看这一篇也差不多够了。
三 具体方法
先看一下framework图:
framework3.1 模型介绍
每个视频取K+1帧, 前K帧(左上角)作为identity source输入,最后1帧(右下角)作为pose source输入;
对于identity source(K帧),分别过一个网络参数比较多的identity encoder获取到对应的特征表示,然后取每帧的特征平均作为这个视频的identity embedding。
对于pose souce(第K+1帧),首先经过一系列Augment增强操作(这个很重要,等会介绍),再过一个相对较小的pose encoder获取到特征表示pose embedding。
此外,还会将第K+1帧输入到语义分割网络中,得到对应的mask(如图最右侧所示),以消除背景带来的影响。
然后将identity embedding和pose embedding做一个concat之后,经过一系列MLP和Generator结构生成最终的结果(4x256x256大小的矩阵)。这个矩阵具体表现为一个3x256x256的RGB图 + 1x256x256的灰度图。其中,3x256x256RGB图就是我们预测到的同时保留identity source中的面貌和pose souce中的姿态,而1x256x256的灰度图表示预测到的前景分割的结果。
这里之所以能实现从<identity embedding, pose embedding> 到目标图的生成,AdaIN(adaptive instance normalization)起到了很关键的作用。关于AdaIN具体的细节就不再介绍了,最先是在style transfer领域中被用的很多,这里也是受到这种思想的启发。可以将pose理解为style transfer中的“style”。
然后就是针对{预测K+1帧图,原始K+1帧图}, {预测K+1帧的分割图,原始K+1帧的分割图}设计各种loss以优化网络参数。
最后就是对第K+1帧进行Augment的理解。细心的话应该可以发现framework图中左下角的人样子和色调看起来都跟原来的不太一样,这里面的操作其实很简单,就是对原始的K+1帧图像进行一些拉伸,对比度修改等变化,来达到保留原始K+1帧图像pose但是修改其identity的效果。
:)我个人觉得这里是这篇文章的灵魂,脱离了keypoints这样的信息,就需要找额外的方式来对pose进行表征。因此,设计这样一个可以利用原视频本身的信息进行模型训练的方法,解决数据GT的问题。
3.2 其他细节
1) finetuning
对于新的identity,对网络identity encoder以及pose encoder之外的部分进行微调以获取更好的结果。
2)disentanglement of pose and identity
作者一开始认为真正实现pose和identity的分离可能需要借助对抗训练或者是clyle-consistency,但是后来发现以下的3点设计已经使得模型具备对两者进行分离的能力:
- low enough capacity of the pose extractor network;
- pose augmentations applied
- background segmented out
四 实验结果
不管是对于主实验的分析还是各种abalation study做的都还是比较充分的,这里挑2个我觉得比较能说明问题的结果。
4.1 定量结果
评价指标:
- identity error:表征脸部的相近程度,用ArcFace人脸检测模型检测到的特征表示之前的差距作为衡量指标。
- pose reconstruction error:表征pose的相近程度,用脸部关键点作为衡量指标。
- 越靠近左下角越好。
实验结果概览:
- ours超过绝大多数的模型(除了FASH+的identity error)
- 关于+的标记:可以看成是固定pose representation部分,但是其他用本文的方法。(非严格解释)
4.2 定性结果
贴一个实验结果图, 整体效果还是挺好的。
五 写在最后
对这个方向不是很熟悉,应该是head reenactment方向接触到的第一篇paper,主要是觉得这篇工作解决问题的思路比较好,有可以学习借鉴的地方,但是对于文章的细节不是很有把握。
如果blog中出现解读有偏差或者错误的地方还请大家帮忙指正,/感恩.jpg (・∀・*)♪゚
网友评论