人工智能|计算机视觉——微表情识别(Micro expression recognition)的研究现状

一、简述

微表情是一种特殊的面部表情,与普通的表情相比,微表情主要有以下特点:

  1. 持续时间短,通常只有1/25s~1/3s;
  2. 动作强度低,难以察觉;
  3. 在无意识状态下产生,通常难以掩饰或伪装;
  4. 对微表情的分析通常需要在视频中,而普通表情在图像中就可以分析。

由于微表情在无意识状态下自发产生,难以掩饰或伪装,通常与真实情感直接相关,所以微表情在情感分析中较为可靠,应用前景广阔;另一方面,由于人为识别微表情比较困难,训练难度大且成功率不高,因此需要计算机进行微表情自动识别。

目前微表情识别的工作难点主要有两方面:

  1. 微表情的持续时间短、动作强度低,特征难以提取,因此需要进行合适的数据预处理与特征提取;
  2. 由于微表情的数据采集与鉴定存在困难,现有的微表情数据集较少,这使得深度学习在微表情识别中的应用存在困难。

现有的的微表情识别方法通常基于传统机器学习,设计一种手工特征(Handcrafted Feature)来提取微表情片段中的特征,依照数据预处理——特征提取——特征分类的框架进行微表情分类。随着近年来深度学习在计算机视觉中的发展,使用深度学习方法进行微表情识别的尝试也逐渐增多。

下面我将从数据集、数据预处理、传统方法、深度方法四个角度来简单介绍微表情识别工作。

二、数据集

CASME II数据集包含247条微表情视频片段(在我实际使用的版本中包含255条),使用200FPS的高速摄像机进行拍摄,视频片段的面部分辨率可以达到约280*340像素。CASME II数据集将微表情分为5类进行标注,分别是快乐(Happiness)、恶心(Disgust)、惊讶(Surprise)、压抑(Repression)、其他(Others);除此之外,CASME II数据集中还标注了微表情活动的起点(Onset)、峰值点(Apex)与结束(Offset),其中Apex对于微表情识别有所帮助;除了对情感进行标注外,CASME II数据集还标注了每个微表情的AU(面部活动单元),AU可以作为对微表情进行分类的依据。

  • 对于CASME II数据集的详细介绍可以参照下文:

CASME II: An Improved Spontaneous Micro-Expression Database and the Baseline Evaluation​journals.plos.org/plosone/article?id=10.1371/journal.pone.0086041​编辑

除此之外,目前比较常用的微表情数据集还有SMIC与比较新的SAMM等。对于不同的微表情数据集,主要的区别在于帧率、分辨率与标注方式。

三、数据预处理

在提取微表情的特征前,通常要对微表情视频片段进行数据预处理,首先就是人脸预处理,包括裁剪人脸等;随后,还要进行其他数据预处理,以便于特征的提取。

  • 常使用的数据预处理包括使用TIM算法进行时域图像插值、使用EVM算法进行动作放大。

1.人脸预处理

裁剪人脸时,比较经典的方法是使用ASM或其他算法提取人脸特征点,以左眼的位置以及双眼间的距离作为基准,控制人脸裁剪的位置与范围;

由于微表情数据集中的数据采集自多名受试者,而不同受试者的面部特征分布有所不同,因此为了减少不同受试者之间面部的差异,可以基于面部特征点对所有片段进行面部配准(face register),效果如下图所示:

(a)标准面部 (b)面部配准前的图像 (c)面部配准后的图像

简单来说,face register首先选择一张脸作为标准人脸图像,提取其特征点;对于每个视频片段,提取视频片段中第一帧的面部特征点,并计算一个映射函数(此处使用LWM算法),将这帧图像的特征点映射到标准图像的特征点上;最后,将此映射作用在视频中的所有帧上。这种方法可以使所有视频片段中的人脸特征点位置相同,从而减少不同人脸的差异。

  • 使用python的dlib库识别人脸特征点,进行face register,经过实验发现register可以提高模型在10-fold验证时的效果,但降低了模型在LOSO验证时的效果。由于dlib对于人脸特征点的识别并不是那么准,因此上述现象也可能是由dlib的误差导致。

2.时域图像插值(TIM算法)

由于微表情持续时间较短,我们希望有一种方法能在保持微表情特征的同时,延长微表情的持续时间,这样有利于特征的稳定提取,因此我们需要对视频片段进行时域上的插值,增加微表情片段所包含的图像数,相当于变相延长了微表情的持续时间。

由于在现实世界中,人的表情是连续变化的,但是在摄像机拍摄的视频中所包含的图像帧是不连续的。我们可以将现实世界中的连续表情变化视为图像空间上的一条连续曲线,曲线的每一个点都代表着人脸在一个瞬间时的表情,而摄像机拍摄的视频则可以视为在这条连续曲线上进行采样。只要能找到这条曲线,并在曲线上重新进行更加密集的采样,便能用更多的图像表示同一段表情。

时域插值模型(Temporal Interpolation Model,TIM)算法是一种时域上的图像插值算法。该方法首先将视频片段视为一个图(graph),并用图中的节点代表一帧图像,视频中相邻的帧在图中也是相邻的节点,视频中不相邻的帧在图中也不相邻;随后,使用图嵌入(graph embedding)算法将该图嵌入到一个低维的流形中,最后代入图像向量,计算出这条高维的连续曲线。在曲线上重新进行采样,便可以得到插值后的图像序列。

  • TIM算法的细节可以参考下文:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/476897.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析

一、单选题 1、下面代码运行后出现的图像是?( ) import matplotlib.pyplot as plt import numpy as np x np.array([A, B, C, D]) y np.array([30, 25, 15, 35]) plt.bar(x, y) plt.show() A. B. C. D. 正确答案:A 答案…

Spring Aop+自定义注解实践(待完善日志)

目录 前言 1.引入依赖 2.SpringAop的用法举例 3. 自定义注解AOP的用法举例 3.1 关于Target注解补充 3.2 关于Retention注解补充 3.3 举例 前言 如果你不太理解aop的知识,请看我写的这篇文章,非常详细: Spring AOP(定义、…

OpenCV双目立体视觉重建

本篇文章主要给出使用opencv sgbm重建三维点云的代码,鉴于自身水平所限,如有错误,欢迎批评指正。 环境:vs2015 ,opencv3.4.6,pcl1.8.0 原始数据使用D455采集,图像已做完立体校正,如下…

【进阶系列】python简单爬虫实例

python有一个很强大的功能就是爬取网页的信息,这里是CNBlogs 网站,我们将以此网站为实例,爬取指定个页面的大标题内容。代码如下: 首先是导入库: # 导入所需的库 import requests # 用于发送HTTP请求 from bs4 impor…

Ease Monitor 会把基础层,中间件层的监控数据和服务的监控数据打通,从总体的视角提供监控分析

1. 产品定位 Ease Monitor 有如下的产品定位: 关注于整体应用的SLA。 主要从为用户服务的 API 来监控整个系统。 关联指标聚合。 把有关联的系统及其指示聚合展示。主要是三层系统数据:基础层、平台中间件层和应用层。 快速故障定位。 对于现有的系统…

Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找

目录 一,数组翻转 二,冒泡排序 三,二分查找(一尺之锤,日取其半,万世不竭) 一,数组翻转 1.概述:数组对称索引位置上的元素互换,最大值数组序号是数组长度减一 创建跳板…

Python中Tushare(金融数据库)入门详解

文章目录 Python中Tushare(金融数据库)入门详解一、引言二、安装与注册1、安装Tushare2、注册与获取Token 三、Tushare基本使用1、设置Token2、获取数据2.1、获取股票基础信息2.2、获取交易日历2.3、获取A股日线行情2.4、获取沪股通和深股通成份股2.5、获…

网络编程(JAVA笔记第三十八期)

p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解 目录 网络编程概念网络编程三要素IPInetAddress类端口号协议 UDP协议UDP通信程序(发送数据)UDP通信程序(发送数据)使用UDP写聊天室项目UDP的通信方式 TCP协议通过TCP协议实现多发多收通…

Bokeh实现大规模数据可视化的最佳实践

目录 引言 一、Bokeh简介 二、安装Bokeh 三、数据准备 四、性能优化 五、创建图表 六、添加交互功能 七、应用案例 八、高级技巧 九、总结 引言 在数据科学领域,数据可视化是一个至关重要的环节。通过可视化,我们可以直观地理解数据的特征和趋势,为数据分析和决策…

IDEA2023 SpringBoot整合MyBatis(三)

一、数据库表 CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,gender ENUM(Male, Female, Other),email VARCHAR(100) UNIQUE,phone_number VARCHAR(20),address VARCHAR(255),date_of_birth DATE,enrollment_date DATE,cours…

PVE的优化与温度监控(二)—无法识别移动硬盘S.M.A.R.T信息的思考并解决

前情提要:空闲2.5英寸机械硬盘,直接放到PVE上测试NAS 使用,通过SATA线的方式让小主机不太美观,并且失去了前期调试的安全性。购入移动硬盘盒,缺点,USB 连接,会失去一些特性。比如本文中遇到的问…

记录下jekins新建个前端部署配置项

1 新建个item 2 输入项目名称,选择个新的工程或 或者搜个已存在的现有模板 3 添加一些描述 4 (可选)配置下构建历史保存情况 5 限制下构建节点和选择gitlab或者github 6 写下git仓库地址、账号密码以及分支 7 选择构建工具node以及版本 8 构建…

文件管理 II(文件的物理结构、存储空间管理)

一、文件的物理结构 文件实际上是一种抽象数据类型,我们要研究它的逻辑结构、物理结构,以及关于它的一系列操作。文件的物理结构就是研究文件的实现,即文件数据在物理存储设备上是如何分布和组织的。同一个问题有两个方面的回答:…

大数据新视界 -- 大数据大厂之 Impala 性能优化:跨数据中心环境下的挑战与对策(上)(27 / 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

利用 GitHub 和 Hexo 搭建个人博客【保姆教程】

利用 GitHub 和 Hexo 搭建个人博客 利用 GitHub 和 Hexo 搭建个人博客一、前言二、准备工作(一)安装 Node.js 和 Git(二)注册 GitHub 账号 三、安装 Hexo(一)创建博客目录(二)安装 H…

ABAP开发-CO的底层表-物料价格分析CKM3

系列文章目录 文章目录 系列文章目录[TOC](文章目录) 前言一、物料分类账与CKM3二、CKM3界面分析三、CKM3的主要功能1、物料价格分析2、成本构成分析3、价格差异分析4、期间状态查看 四、物料分类账与CKM3的关系五、CKM3的底层表及数据支持1、核心数据表2、取数逻辑 总结 前言 …

汽车被追尾了怎么办?

今天开车上班的路上发生了一起4车追尾的交通事故,作为过来人我复盘了下交通追尾的处理过程。简述如下: 发生追尾后打双闪及时放置三角架,提醒后面车这里发生交通事故了 打122交警电话和自行拍下事故现场的远近照片。如果车子损伤严重或事故复…

了解Redis(第一篇)

目录 Redis基础 什么事Redis Redis为什么这么快 除了 Redis,你还知道其他分布式缓存方案吗? 说-下 Redis 和 Memcached 的区别和共同点 为什么要用Redis? 什么是 Redis Module?有什么用? Redis基础 什么事Redis Redis (REmote DIctionary S…

javascrip页面交互

元素的三大系列 offset系列 offset初相识 offset系列属性 作用 element.offsetParent 返回作为该元素带有定位的父级元素,如果父级没有定位,则返回body element.offsetTop 返回元素相对于有定位父元素上方的偏移量 element.offsetLeft 返回元素…

K8S + Jenkins 做CICD

前言 这里会做整体CICD的思路和流程的介绍,会给出核心的Jenkins pipeline脚本,最后会演示一下 实验/实操 结果 由于整体内容较多,所以不打算在这里做每一步的详细演示 - 本文仅作自己的实操记录和日后回顾用 要看保姆式教学的可以划走了&…