【蜂口 | 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

智能推荐

latex h t b p是什么意思_latex htpb-程序员宅基地

文章浏览阅读1.4w次,点赞9次,收藏17次。常用选项[htbp]是浮动格式:『h』当前位置。将图形放置在正文文本中给出该图形环境的地方。如果本页所剩的页面不够,这一参数将不起作用。『t』顶部。将图形放置在页面的顶部。『b』底部。将图形放置在页面的底部。『p』浮动页。将图形放置在一只允许有浮动对象的页面上。在table或者figure 后加 [!htb] 是系统忽略“美学”标准,把表格和图片插入到你的代码中,是动的,但是不加感叹号,它就是按顺序选择h(此处),t(上方),b(下方),所以为了让图片随着你的代码移动,最好加一个[!htb]_latex htpb

【转载】linux下的usb抓包方法-程序员宅基地

文章浏览阅读67次。1 linux下的usb抓包方法1、配置内核使能usb monitor:make menuconfigDevice Drivers --> USB Support --> USB Monitor --> Sel..._linux安装tcpdump 查看usb

计算机组成pc em ir,计算机组成 课程设计报告.doc-程序员宅基地

文章浏览阅读164次。计算机组成 课程设计报告计算机组成原理课程设计报告姓 名:班 级:学 号:指导老师:2016年 6月31日目 录第一章 背景知识与课设任务概述11.1课设目的11.2课设任务11.2111.2211.2321.2421.252第二章 课设内容32.1指令的执行流程32.1.132.1.242.1.352.2存储器62.2.162.3运算器72.3.172.4硬件系统组成122.4..._计算机组成课程设计报告

python青果教务系统抢课_名额不够,技术来凑,利用Python实现教务系统强制性抢课...-程序员宅基地

文章浏览阅读1.3k次。最近一学期一次的抢课大戏又来了,几家欢乐几家愁。O(∩_∩)O哈哈~(l我每次一选就过了hah,我还是有欧的时候滴)。看着他们盯着教务系统就着急,何况我们那教务系统,不想说什么。emmm 想周围的朋友,正好下午利用扩容前一段时间写了个小脚本帮助朋友抢课。(当然抢到了啦,^_^)私信小编001即可获取大量Python学习资料,名额有限因为时间不够,来不及仔细琢磨,我第一想法就是直接提交选课的数据包(..._青果教务系统抢课

windows 加 switchyomega + burp 抓https包-程序员宅基地

文章浏览阅读4.6k次。很简单,下载证书后导入到受信任根目录证书下载,直接在代理状态浏览器访问burp点击CA就可以下载了 设置该证书全部信任,,switchyomega 设置如下即可 就可以抓https的包了 ...

用C语言写循环赛日程表,循环赛的方法与编排-程序员宅基地

文章浏览阅读1k次。一、循环赛的种类与特点(一)循环赛的种类循环赛又称循环法。是指参赛队(或个人,下同)之间,都要互相轮流比赛,最后按照各参赛队在全部比赛中的胜负场数、得分多少排定名次的比赛方法。它在对抗性项目比赛中经常被采用。循环赛包括单循环、双循环或分组循环三种。单循环是所有参赛队(人)相互轮赛一次;双循环是所有参赛队(人)相互轮赛二次;分组循环是参赛队(人)较多时,采用种子法,把强队(人)分散在各组,先进行小组..._c语言循环赛互打一场比赛 甲队两胜

随便推点

507页XX市应急管理局智慧矿山煤矿数字化矿山技术解决方案_18万字应急管理局智慧矿山煤矿数字化矿山技术解决方案word-程序员宅基地

文章浏览阅读542次。只有在单系统自动化的基础上,通过高速网络接入各单系统,充分数据融合,建立合理的联动机制才能完成从单系统自动化到综合自动化的转变,该部分的转变从投入的资金和实现的容易度相对来讲可实现性和可控性都比较容易,但是从综合自动化向数字化矿山发展,涉及的面比较广,必须由多方共同来推进,一般涉及到“综合自动化”、“空间数字化”及“管理信息化”三大方面,三者缺一不可,通过三者的有机融合,再通过合适的平台例如三维可视化平台进行展示,同时通过科学合理的管理制度和流程加以应用才是真正意义上有血有肉的数字化矿山。_18万字应急管理局智慧矿山煤矿数字化矿山技术解决方案word

Tomcat官网地址-程序员宅基地

文章浏览阅读1.4w次,点赞8次,收藏7次。Tomcat官网地址_tomcat官网

汇编指令长度计算_汇编指令占多少字节-程序员宅基地

文章浏览阅读5.1k次,点赞11次,收藏58次。指令长度与寻址方式有关系,规律或原则如下:一、没有操作数的指令,指令长度为1字节。如es:ds:cbwxlat等。二、操作数只涉及寄存器的指令,指令长度为2字节。如mov al,[si]mov ax,[bx+si]mov ds,ax等。三、操作数涉及内存地址的指令,指令长度为3字节。如mov al,[bx+1]mov ax,[bx+si+3]lea di,[1234]mov [2345],ax等。四、操作数涉及立即数的指令,指令长度为:寄存器类型+2。8位寄存器,寄存器_汇编指令占多少字节

二、RSA加密_ctf rsa 多个n和多个c-程序员宅基地

文章浏览阅读3.4k次。CTF中的RSA及攻击方法笔记1 数论基础1.1 模运算规则2 RSA相关题目2.1 已知 n,e,c 求 m2.2 已知 p,q,e 求 d2.3 已知dp,dq,c,p,q 求m2.4 仅已知c,c特别大 【c = m^e mod n】2.5 已知n1,n2,c1,c2,n 求 m2.6 已知n1,n2,e,c2 求m2.7 已知e,d,N 求p,q1 数论基础参考链接:https://www.freebuf.com/articles/web/257835.html1.1 模运算规则模运算与基_ctf rsa 多个n和多个c

mysql中把bigint类型转换为时间格式,与hive中unix_timestamp、FROM_UNIXTIME两个函数之间的区别_bigint转日期-程序员宅基地

文章浏览阅读2w次,点赞4次,收藏15次。数据库中时间类型是这样的,13位bigInt类型的数据select date_format(FROM_UNIXTIME(列名/1000),'%Y%m%d') from xx表原理就是把13位的时间格式/1000等于时间戳,使用FROM_UNIXTIME把时间戳转换成具体的日期ps:将时间转换为时间戳select unix_timestamp('2018-08-30..._bigint转日期

exit status 5: �ܾ����ʡ� exit status 1: ���_exit status 5: exit status 1:-程序员宅基地

文章浏览阅读1.1k次。使用nvm切换node版本出现上述乱码时。使用管理员模式打开CMD就可以解决了~_exit status 5: exit status 1:

推荐文章

热门文章

相关标签