【蜂口 | AI人工智能】表情识别——龙鹏 深度学习与人脸图像应用连载(七)...-程序员宅基地

【文章首发于蜂口知道公众号,内容来源于蜂口小程序,欢迎关注了解~】

作者:龙鹏,前360AI研究员算法工程师,现任陌陌深度学习实验室高级算法工程师。

本次继续给大家 带来的是表情识别这个问题。 我们将从四个方向给大家进行分享。

首先,我们会给大家科学地定义一下表情是什么? 表情实际上包含了我们平常所说的表情以及微表情。

其次,我们会简单地介绍一下传统方法的研究思路。 传统的方法主要从静态图和动态视频两个方面进行讲述。

然后,我们再给大家介绍一下深度学习的方法。

最后,我们对表情分类这个问题的应用和它的难点做一个完整的介绍。

下面开始我们第一部分的分享:什么是表情?

所谓表情其实指的是面部的肌肉的运动。 我们平常所说的表情包含七种基本的表情, 主要是包括愤怒 厌恶、恐惧、快乐、悲伤 惊讶 以及蔑视等。

上面这张图是一个表情常用的数据集, 这个数据集包含了八种表情, 实际上就是对应我们左边所说的七种表情以及中性, 也就是无 表情 当然这个图的顺序跟我们前面的文字没有一一对应。 总之这七种表情就是我们平常最常见的表情。

但是表情实际上并不仅仅如此。 科学上还有一种表情叫做微表情。 微表情的研究常常被心理学家和犯罪科学家用于相关的研究。

那什么是微表情呢? 所谓微表情,其实就是持续时间非常短, 它只是某种无意识地使人类在隐藏某种情感。 无意识的一个行动,它的持续时间通常不到一秒钟。

举个例子, 当我们有的时候表现出微笑, 但其实我们表示的是蔑视这样的一种感情。 大家平时应该有这样的感受。 所以表情其实分为基本表情和微表 这两大类。 当然还有更多更丰富的表情, 是我们所研究的问题的复杂性来定, 我们可以去进行更多的分类。

那表情它是怎么形成的 前面我们说了表情实际上是面部的肌肉运动, 而面部的肌肉运动虽然是一个整体, 但是这个肌肉运动实际上也可以分离开几个区域, 主要包含这么一些区域:

a)眉毛。眉毛主要包含皱眉、抬眉等等。 它分别可以表示一些惊讶以及一些蔑视的表情。

b)眼睑。眼睑包含 抬眼 睑 以及闭眼睑这样一个动作。 它实际上包含的可能是惊讶、无聊这样的一些表情。

c)眼睛。眼睛可以包含愤怒、蔑视等等。

d)嘴唇。嘴唇的表情非常的丰富, 它可以包含微笑、嘟嘴、惊讶等等。

e) 鼻子。鼻子它相对来说要简单一些。比如 我们常说的耸鼻等等, 它可以表示一种蔑视的表情。

f)下巴 下巴 也可以表示一些嘟嘴之类的表情, 甚至一些惊讶之类的表情。

总的来说,人脸的面部包含了上面列举的这几大区域, 由这几大区域 各自 就组成了表情 也就是 action uints 一般我们在研究的时候,表情 会有20个左右。 这里我们展示了28个技术的表情 由这些基本的表情 就可以组成人脸的丰富的表情。

表情的研究方法也是分两类: 传统的方法和深度学习方法。

传统的方法 主要是两个方面来进行研究:

一方面是静态的图。所谓静态图就是一张人脸的图片。 通常我们会使用一张对齐好的人脸图片。 那么对于 静态 图, 我们来研究的表情通常就采用一些传统的人脸的特征, 包含一些纹理啊等等一些特征。

另一方面是动态图。 所谓动态图就是一个视频, 因为人脸的表情他天生是一个运动的动作, 也就是肌肉的运动, 所以用动态的图或者视频来表征是一个更好的方案。

那么动态图主要有两种研究思路:

一种是 法本身就是用于运动的 跟踪 的, 所以我们可以用 光流+ 梯度场来跟踪我们的表情的运动区域。 前面我们可以分为了一句表情 可以对人脸的区域进行几个区域的划分, 我们可以用光 流+ 梯度场来进行跟踪。 当我们跟踪到这个区域之后, 我们就可以用这些区域运动的方向的变化来表示人脸肌肉的运动, 表征到人 肌肉的运动之后, 我们就可以得到相应的人脸的表情。

第二个是用 ASM等模型 。ASM等模型也就是主动形状模型。它本身就是提取的面部的关键点,而我们人脸的表情实际上可以用面部关键点来进行表征。因为面部关键点它有 序号 的信息,所以我们基于面部关键点,还可以分区域的对人类的表情进行表征,基于动态图的思路会取得更好的研究效果。

这就是传统的方法。

如今,在深度学习已经遍地开花的时代, 我们更多的是采用深度学习的方法来研究人类表情这样的问题

深度学习的方法, 它主要包含两个问题:

一个是 分类的问题 前面我们说了,人 的表情 包含了非常多的表情 所以对于 每一个区域的表情 我们可以进行分别的分类。 那么人脸的表情,对于输入这样一张图, 这就是一个多标签分类的问题。所谓多标签分类, 我们在前面也给大家介绍过, 就是说一张图它不仅仅对应一个唯一的标签, 它可能包含了多个维度, 我们要判断每一个维度上是否存在它的信息。

上图是一个常见的 pipeline框架。 我们可以看到它将人脸的图分成了 8×8这样的一个区域, 将每一个图像块都经过一个单独的 卷积 一个单独的 卷积 通道, 然后获取到它的一个特征图的表示。 然后我们可以把特征图的特征向量进行串接起来, 然后再进行分类。 这就是一个典型的多分类的问题。

分类问题我们可以得到一个表情 是否存在。 但是当我们在应用表情的时候, 我们知道一个表情的存在还不能完美的解决我们的问题, 有时候我们希望知道这个表情的幅度是多大, 所以又带来另一个问题,即 回归的问题

回归的问题 估计的就是表情的幅度。

比如上面这张图, 从左到右它是一个微笑的过程, 但是微笑的幅度是不一样的。 最右边微笑的幅度最大, 最左边基本上已经看不到微笑,或者说他不是微笑。 有的时候很多的时候我们需要对表情做迁移, 或者对表情进行编辑,那么我们需要估计表情的幅度, 估计表情的幅度相对于表情分类来说,它更加困难。 因为人脸面部的表情 之间并非是完全独立的, 比如嘴巴的运动会牵动下巴的运动, 鼻子的运动也会牵动嘴巴的运动, 所以我们无法单独地对表情 进行估计。

通常意义上常用的研究方法是对各个表情基之间建立了一个图, 然后我们会去优化这样的一个图,利用 CRF 等方法来进行优化。 更多的具体细节,大家可以线下去关注。

表情幅度的估计问题的 常用方法就是前面所说的这样的几种思路。

最后我们来看看表情的应用, 表情 可以应用在哪些地方?

首先,游戏。我们可以用 表情 在玩很多的游戏, 比如主播之间利用表情来作 PK, 然后来玩类似于消消乐这样的一些游戏。

其次,人机交互。可以利用表情来做很多的人机的控制交互。

最后,表情迁移。 如下图:

这张图就是一个 avatar 我们利用人脸来 实时 的做一些表情, 从而将这些表情驱动到我们这样的一个 3D的模型上面 来做一些展示, 这样的一个应用在电影里面, CG 制作里面是非常非常有商业前景的。

不过表情估计 也有很多的难点:

第一个难点是表情非常的复杂多变。 前面我们说了人脸的表情有七个基本表情, 但实际上表情还包含非常非常多, 甚至表情都不一定是面部带来的, 它甚至还有其他的图像, 非面部区域以外也能带来一些表情。 的变化非常复杂, 再加上人脸又是一个柔性的模型。

第二个难点是 表情 幅度的量化问题。 像我们上面展示的这样一张图, 我们要用人脸来驱动这样的一个 avatar、 这样的一个3D模型来做一些表情的动作, 那么我们不可避免的要估计人脸, 也就是真人 的表现的幅度是多大, 而对他的幅度进行量化, 就面临了几个挑战:

1)我们要对我们的幅度进行标注, 这是一个非常大的问题。 因为我们需要用系数来量化我们的幅度, 它并不是那么直观。

2)我们要利用方法, 前面我们所说的利用深度学习的方法来估计我们这样的表 的幅度, 它也面临着很多的困难。

好了,以上就是我们人脸表情相关的分享。

免费领取技术大咖分享课,加蜂口V信: fengkou-IT      
感谢您的阅读,更多精彩请持续关注蜂口微信小程序!


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31553577/viewspace-2216044/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31553577/viewspace-2216044/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/congxiao4063/article/details/100424124

智能推荐

两个实用的C语言工具———编程学习必备篇_csdn-程序员宅基地

文章浏览阅读4.5k次,点赞17次,收藏8次。两个实用的C语言工具_csdn

Flask、Django、Tornado三大框架的对比_tornado flask di-程序员宅基地

文章浏览阅读3.9k次。前言之前面试的时候我提到过自己有Flask、Django、Tornado框架的使用经验,于是面试官很自然就问到了这三大框架的区别、各自的特点这样的问题。回答了几次总觉得自己回答得不是太好,有些点没有回答到,亦或是逻辑有点混乱,于是想要归纳总结一下。框架的特点FlaskFlask诞生于2010年,是Armin ronacher用Python语言基于Werkzeug工具箱编写的轻量级Web开发..._tornado flask di

简单实现接口自动化测试(基于python)_接口自动化测试怎么写-程序员宅基地

文章浏览阅读9.3k次,点赞21次,收藏192次。一、简介本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势,然后简单讨论了一下接口测试框架的要点,最后介绍了一下我们目前正在使用的接口测试框架pithy。期望读者可以通过本文对接口自动化测试有一个大致的了解。二、引言为什么要做接口自动化测试?在当前互联网产品迭代频繁的背景下,回归测试的时间越来越少,很难在每个迭代都对所有功能做完整回归。但接口自动化测试因其实现简单、维护成本低,容易提高覆盖率等特点,越来越受重视。为什么要自己写框架呢?使用requets + unitt_接口自动化测试怎么写

JavaScript大数运算】实现高精度计算的JavaScript算法_js 用什么类型运算大数据和精度要求高的数据-程序员宅基地

文章浏览阅读104次。总结起来,JavaScript中的大数运算是一个挑战,但通过使用字符串表示大数并手动实现算术运算,或者使用专门的JavaScript库,我们可以实现高精度的数值计算。这为处理更大范围的数值提供了可能,使我们能够在JavaScript中进行各种复杂的数值计算。无论是手动实现算法还是使用现有的库,都能帮助我们在JavaScript中实现高精度计算,处理更大范围的数值。在上述代码中,我们将大数表示为字符串,逐位相加,并处理进位。这样,我们可以避免JavaScript的数值限制,从而实现了高精度的加法运算。_js 用什么类型运算大数据和精度要求高的数据

bbp公式求圆周率、python_【并行计算】六种方法计算圆周率-程序员宅基地

文章浏览阅读2.7k次。计算π的历史圆周率π可能是科学界内外最广为人知的自然常数了。早在公元5世纪时,南朝宋数学家祖冲之用割圆法将圆周率计算到小数点后7位数字。大约同一时间,印度的数学家也将圆周率计算到了小数点后5位。历史上首个π精确无穷级数公式(即莱布尼茨公式)直到约1000年后才由印度数学家发现。20世纪以来,随着计算机技术的快速发展,π的精度也在极速提高。截至2019年,π的十进制精度已高达1013位。虽然几乎所有..._chudnovsky算法

苹果快捷键怎么调出来_原来还有这么好用的CAD快捷键,文末附赠快捷键鼠标垫!留言走起...-程序员宅基地

文章浏览阅读141次。▼相信大家都看过一些大神做CAD,那个图纸真是做的又快又好看!当然大神们其实也就基础好一点,把快捷键记得过目不忘,所以接下来小编就教大家一个非常Skr的方法,保证你对这些快捷键过目不忘,文末更有免费鼠标垫领取,千万别错过哦!这个方法就是建立我们的思维导图了,文字看了可能会忘记,但是通过导图的方式,就会变成思维图形,更加符合我们大脑的思考习惯,就可以牢牢记住这些快捷键啦:▼例如我们看到下面的就是绘图..._苹果cad快捷键

随便推点

【中级软考】软件设计-考试介绍_软件设计师 以考代评 考完就是中级职称-程序员宅基地

文章浏览阅读457次。软件设计中级软考基本内容,通过一下几点进行介绍:1、软考好处2、软件设计证书模版3、流程4、考点分布5、考试形式_软件设计师 以考代评 考完就是中级职称

linux7配网卡,CentOS 7 配置网卡-程序员宅基地

文章浏览阅读60次。VM安装了一个Linux系统CentOS,但是安装后发现ping www.baidu.com 报错 。查了一下发现需要配置网卡。1.首先需要进入目录 /etc/sysconfig/network-scripts这里我的centos的 iso版本是:CentOS-7-x86_64-DVD-1708.iso。进入目录之后可以看到有个ifcfg-ens33的文件。我们需要对这个文件做些修改。2.vi i..._wsl2 centos7 网卡配置

Android 通过蓝牙采集音频_android 蓝牙麦克风采集mic音频 无声-程序员宅基地

文章浏览阅读8.8k次。通过蓝牙的麦克风进行录音MainActivity.javapackage com.example.bluetothrecord;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.In_android 蓝牙麦克风采集mic音频 无声

Accessing static Data and Functions in Legacy C_setyearanddayofyear-程序员宅基地

文章浏览阅读1.1k次。http://www.renaissancesoftware.net/blog/archives/430http://www.renaissancesoftware.net/blog/archives/450It’s a new year; last year was a leap year; so the quadrennial reports of leap y_setyearanddayofyear

vue把字符串分割成等长的若干字符串,根据特定字符分割字符串_vue 分割字符串-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏20次。把字符串分割成等长的若干字符串,根据特定字符分割字符串_vue 分割字符串

朴素贝叶斯分类器的例子_朴素贝叶斯分类器 例子-程序员宅基地

文章浏览阅读1.1k次。一、病人分类的例子让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难。某个医院早上收了六个门诊病人,如下表。  症状  职业   疾病  打喷嚏 护士   感冒   打喷嚏 农夫   过敏   头痛  建筑工人 脑震荡   头痛  建筑工人 感冒   打喷嚏 教师   感冒   头痛  教师   脑震荡现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?根据贝叶斯..._朴素贝叶斯分类器 例子