来源:IBC2021 主讲人:Dominic Rüfenacht 内容整理:张雨虹 本文是对 Dominic Rüfenacht 的《Customized Facial Expression Analysis in Video》文章的介绍,主要围绕视频中的自定义面部表情分析,从当前研究现状、主要技术以及应用方面进行了介绍。
目录
情绪和面部表情并不是一回事。情绪是我们感受到的东西。面部表情指的是我们皮肤下肌肉的位置和运动,所以虽然面部表情可以作为情绪的指标,但是面部表情反映的并非是一种情绪,比如微笑表情有时也可以表示悲伤的情绪。
Paul Ekman 首先提出了 6(+1)种基本情绪用于情绪分类。因此大部分 AI 模型都被训练来识别这 6 或 7 种或者是子集的情绪。模型以一张脸作为输入,输出某种情绪正在显示的概率。这种方法的问题是添加一个新类别时需要添加大量的训练数据。所以,当想添加一种新的情绪时,基本上都需要重新训练整个模型。
FACS
另一种有趣的方法是面部动作编码系统(FACS)。这在 70 年代后期开发的,由 Ekman 和 Friesen 再次提出,最初用于训练来识别情绪。他们指定了 32 个元面部肌肉动作,称之为动作单元(AU)。例如,拍一张快乐的脸,我们会发现主要有 3 个行动单位在活跃,分别是 AU 6 、AU 12、AU 25。AU 6 是一个脸颊抬高的动作,然后是 AU 12 嘴角的动作以及 AU 25 嘴唇部分的动作。最近,他们提议合并这些 AU 来产生新的情绪。例如,从一张快乐的脸和一张惊讶的脸提取 AU,就会得到一种新的情绪,他们称之为快乐的惊讶,在他们的工作中,他们确定了 21 种合并的情绪。然而,正如他们在论文中也提到的。这只能说可以区分这些已知的复合情绪,但并不能训练一个可以区分它们的系统,并且也很难获得足够的训练数据。
面部表情比较
并非定义特定的动作单元并收集数据来训练,Vemulapalli 和 Agarwala 提出基于深度学习利用面部图像三元组来学习面部表情。并进行主观测试,询问受试者给定三元组中哪一个与其他两个最不同。如上图中 Triplet 1 中所示,三个人都面带微笑,但是左边的两个人的微笑比右边的人大一点,所以右边的人可能会被标记为最不相似的表达。受到这项工作的启发,我们也使用这里提出的数据集来训练我们的模型。
我们工作的第一部分学会分辨分面部表情。假设有一堆不同表情的人的照片,需要根据面部表情对它们进行排序,所以你开始一张张放置图片,总是试图把相似的面部表情放在一起,比如微笑的人在右边,然后越靠近中间,微笑变得有点不太明显,甚至会变成一张悲伤的脸。所以现在有趣的是,你可以把一把尺子放在桌子上,可以测量不同照片或不同面部表情之间的距离,更相似的面部表情距离更小。那么机器该如何去衡量这些表情呢?
从面部到表情指纹
所以我们的方法是将面部转换成表情指纹来帮助我们更好地获取面部特征。我们利用 CNN 来提取嵌入向量(表情指纹)。以人物面部作为输入,利用我们的 FEENet,输出表情指纹。模型随机初始化,由于不知道什么是面部表情,所以这个特征嵌入向量只是随机数。我们利用之前的表情三元组数据,将它们输入到面部表情网络中进行训练。
Triplet loss
使用 Triplet loss 作为损失函数,所谓 Triplet loss 就是越相似的面部表情的距离越小。然后调整参数,继续训练。
然后,我们试图解释系统学到的东西。尽管我们没有明确某个元素编码什么东西,但我们发现,嵌入在编码特定特征时确实有特定的元素,比如第一个元素可能是眼睛睁开的程度,如果眼睛闭上,值将是 -1,如果眼睛完全睁开,值将是 +1。因此不必明确编码动作单元,系统自己学习到用来区分不同表情的东西。
实验结果
如何评价系统区分面部表情的好坏呢?一种方法是我们可以使用系统训练过程中没有用到的表情三元组来进行评估。检查这些三元组中有多少可以正确分类,这意味着两个更相似的面部表情具有更小的距离。结果表明我们的模型实现了 84.5% 的三元组预测准确度,高于之前工作的 81.8%。然而事实上,人类的平均预测精度也只有 86.2%,因此基本上可以说,我们提出的 FEENet 在区分面部表情方面几乎和人类一样好。
Custom Facial Expression Tagging
如果把这些嵌入投射到一个二维空间上,放大以后,我们会发现左上角是快乐的脸,微笑着的。然后右上角有张着嘴的人,惊讶的表情。然后在底部,是中立的面孔。
各种各样的“Happiness”
更有趣的是,如果我们单独看 “Happiness”,我们可以看到系统中不仅有看起来微笑的人,而且有一系列的 “Happiness”,如上图所示,在顶部的行中是非常轻松的微笑,图像彼此之间的距离非常非常小,这意味着系统会说认为它们是相同的面部表情,当我们往下看时,人的嘴巴张的越来越大。这就表明系统在没有明确知道有像微笑这样的东西的情况下学习了非常细粒度的面部表情特征。
现在已经做到了可以区分面部表情,那么如何添加自定义面部表情?拿一张显示感兴趣的面部表情的脸会将其添加到数据库中,然后比较这张脸,计算与其他脸的距离,获得最接近的匹配的脸。可以看到它们看起来都非常相似,这意味着系统真的学会了区分这些面部表情。
FaceQA
现在我们考虑视频中的应用,由于从视频中提取的质量比照片低,因此,我们需要一种自动过滤掉低质量人脸的方法,在本文中,我们提出了一个自动人脸质量评价,它主要基本上评估了清晰度和侧脸角度。正面脸是最容易的,当头的转动角度越来越大时,就很难区分非常侧向的面部表情了。因此 FaceQA 的目的就是过滤掉侧身和模糊的面孔。
人脸分组
为了进行有意义的面部表情分析,我们需要对人脸进行分组。使用面部验证系统中的面部特征来做这件事,来学会区分不同的人。
整体框架
把上述工作整合在一起,首先有自定义的面部表情数据库,如图所示,我们将这3张脸添加到数据库中,提取面部表情嵌入;然后我们以电影的主要女演员为例,按时间顺序对提取的面部进行排序,对于每一个面孔都提取面部表情嵌入,为了稳定性,有一个 Temproal Pooling 部分;之后计算平均值,这样就可以过滤掉一些质量不好的面孔。然后与已知面部表情嵌入进行比对;如果距离接近,就将其归类到那个面部表情中。
应用
我们可以跟踪自定义的面部表情。一篇心理学文章总结了 7 个 Donald Trump 的典型面孔,我们提取文章中的照片用于实验,作为表情标签。然后我们以一个 Trump 和 Biden 之间长达 2 小时的总统辩论为例,计算了所有面孔的面部表情,每张面孔有数千张。上图展示了每个不同面部与自定义面部表情的最佳匹配。同时也可以对每种表情出现的次数进行计数,如下图所示。
表情统计
图中红色表示 Trump,蓝色表示 Biden。可以看到 Trump 有大约 20% 的概率出现夸张的嘴的表情。而 Biden 微笑的时候比较多,约 20%,而 Trump 几乎没有笑。所以这一切都是完全自动完成的。
附上演讲视频:http://mpvideo.qpic.cn/0b2egmaaoaaaiyahof4hwbrfam6da4zqabya.f10002.mp4?dis_k=4d2349a5c89e09b1e956bfecede06737&dis_t=1653461420&vid=wxv_2406709187172204547&format_id=10002&support_redirect=0&mmversion=false
附上 5 月 20 日帖子 实时人脸识别系统 演讲视频:http://mpvideo.qpic.cn/0bc3seabgaaateabde4k2frfbeodcoiqaeya.f10002.mp4?dis_k=800c509647b880867e57eca6f1bb3850&dis_t=1653461512&vid=wxv_2409533452942671873&format_id=10002&support_redirect=0&mmversion=false