CASME II: An Improved Spontaneo
本篇论文主要是从事于微表情研究,来自于傅小兰团队,傅小兰研究组(即视觉与计算认知实验室)从事认知心理学的基础研究以及人机交互中的心理与行为等应用研究。目前的研究兴趣主要集中在情绪领域,包括宏表情和微表情的识别和检测,以及可以应用于谎言识别的线索等;想要具体了解他们团队可以访问该链接:http://fu.psych.ac.cn/cn/index.php
论文题目:CASME II: An Improved Spontaneous Micro-ExpressionDatabase and the Baseline Evaluation
本次论文主要贡献:(一)更加好的微表情数据集;(二)提供比较有参考价值识别方法
parts论文分为两部分:
-
第一部分,介绍了CASME II的开发过程,包括引发微表情的方法以及如何为数据库选择样本。
-
第二部分,使用来自三个正交平面(LBP-TOP)的LocalBinary模式评估特征,并使用支持向量机(SVM)进行分类,评估该数据库。
该 CASME II 数据集有五大特征:
(1)该数据集是自发的和动态的微表达;
(2)具有较高的时间分辨率(200 fps)和较高的面部分辨率(280*340像素);
(3)微表达标签基于FACS研究手册和Yan等人的探寻得到的;
(4)录视频时具有适当的照明,面部上的高光区域减少,没有多余的噪声;
(5)不同分类微表情数据量不均等,由于实验采集难度高。
1. 数据库选择样本(Sample selection and category labeling)
主要分为下面四个部分:
(1)去掉不相关的面部动作
(2)预先有微表情的候选人,在相关面部情感动作变化时间低于1s,有这种表现的候选人被定为微表情候选者。
(3)选取微表情样本,标准:整个表情视频段要低于500ms或者整个视频的起始时间到peak表情这段时间要低于250ms
视频段部分展示(4)动作单元(AU)和表情标签
根据相应动作单元来评定表情动作单元(AU)类似于这种:
image.png
2. 提取特征方法:LBP-TOP
LBP算子定义为在 3 ∗ 3 的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于等于中心像素值,则该像素点的位置被标记为1,否则为0。这样, 3 ∗ 3 邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理信息。需要注意的是,LBP值是按照顺时针方向组成的二进制数。
随着LBP的改进和优化,衍生出许多其它的算子:
(1)圆形LBP算子:
圆形LBP算子
基本的 LBP算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala等对 LBP算子进行了改进,将 3×3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的 LBP算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子;(2)LBP旋转不变模式
LBP旋转不变模式
从 LBP 的定义可以看出,LBP 算子是灰度不变的,但却不是旋转不变的。图像的旋转就会得到不同的 LBP值。Maenpaa等人又将 LBP算子进行了扩展,提出了具有旋转不变性的 LBP算子,即不断旋转圆形邻域得到一系列初始定义的 LBP值,取其最小值作为该邻域的 LBP值。(3)LBP等价模式
LBP等价模式
一个LBP算子可以产生不同的二进制模式,对于半径为R的圆形区域内含有P个采样点的LBP算子将会产生P2种模式。很显然,随着邻域集内采样点数的增加,二进制模式的种类是急剧增加的。例如:5×5邻域内20个采样点,有220=1,048,576种二进制模式。如此多的二值模式无论对于纹理的提取还是对于纹理的识别、分类及信息的存取都是不利的。同时,过多的模式种类对于纹理的表达是不利的。例如,将LBP算子用于纹理分类或人脸识别时,常采用LBP模式的统计直方图来表达图像的信息,而较多的模式种类将使得数据量过大,且直方图过于稀疏。因此,需要对原始的LBP模式进行降维,使得数据量减少的情况下能最好的代表图像的信息。
python实现LBP特征点计算
import cv2
import numpy as np
def olbp(src):
dst = np.zeros(src.shape,dtype=src.dtype)
for i in range(1,src.shape[0]-1):
for j in range(1,src.shape[1]-1):
pass
center = src[i][j]
code = 0;
code |= (src[i-1][j-1] >= center) << 7;
code |= (src[i-1][j ] >= center) << 6;
code |= (src[i-1][j+1] >= center) << 5;
code |= (src[i ][j+1] >= center) << 4;
code |= (src[i+1][j+1] >= center) << 3;
code |= (src[i+1][j ] >= center) << 2;
code |= (src[i+1][j-1] >= center) << 1;
code |= (src[i ][j-1] >= center) << 0;
dst[i-1][j-1]= code;
return dst
lena = cv2.imread('2.jpg')
cv2.namedWindow('lena')
cv2.imshow('lena', lena)
#cv2.waitKey(0)
gray = cv2.cvtColor(lena,cv2.COLOR_RGB2GRAY)
x = olbp(gray)
cv2.namedWindow('olbp')
cv2.imshow('olbp', x)
cv2.waitKey(0)
LBP图片展示:
原图 特征点图LBP可以有效地处理光照变化,在纹理分析,纹理识别方面被广泛应用。但是LBP 只能处理单张的二维图像,对于视频或者图像序列,如何用LBP来提取特征,捕捉视频序列的运动信息呢。就需要引出我们的LBP-TOP.
LBP-TOP 是 LBP 从二维空间到三维空间的拓展,LBP-TOP 的全称为: local binary patterns from three orthogonal planes, 这里的three orthogonal planes 指的就是三个正交平面,我们知道,单张的图像只有X, Y两个方向,而一个视频或者图像序列除了X,Y 方向之外,还有一个沿着时间轴 T 的方向, 而 X-Y, X-T 和 Y-T 三个方向是相互正交的。可以看看如下的图:
LBP-TOP feature与LBP 相比,LBP-TOP 不仅考虑了 X-Y 平面的纹理信息,还考虑了 X-T, Y-T的纹理信息,而X-T,Y-T 的纹理信息,记录着重要的动态纹理。X-Y,X-T,Y-T的纹理信息,也就三张直方图,最后将这三张图连接到一起就是最终示意图。
LBP-TOP featureSVM被用作分类器。 为了这基线评估,我们选择了5种微表达类别–幸福,惊喜,厌恶,压抑等–用于训练和
测试。 考虑样本中五个样本分布不均类,则采用留一法交叉验证(Leave One out CV)。 其中X-Y,Y-T,X-T对应的值为1,1,4效果最好,其准确率达到63.41%。
四种交叉验证方法:
- Holdout Method | 留出法
在机器学习任务中,拿到数据后,我们首先会将原始数据集分为三部分:训练集、验证集和测试集。
Holdout Method
训练集用于训练模型,验证集用于模型的参数选择配置,测试集对于模型来说是未知数据,用于评估模型的泛化能力。
K-Fold CV
- K-Fold CV | K-折交叉验证
k 一般取 10,数据量小的时候,k 可以设大一点,这样训练集占整体比例就比较大,不过同时训练的模型个数也增多。数据量大的时候,k 可以设小一点。
Leave One out CV | 留一法
Leave One out CV顾名思义,每次只使用一个作为测试集,剩下的全部作为训练集,这种方法得出的结果与训练整个测试集的期望值最为接近,但是成本过于庞大。
Bootstrap Methods
- Bootstrap Methods
通过自助采样法,即在含有 m 个样本的数据集中,进行 m 次有放回地随机抽样,组成的新数据集作为训练集。这种方法,有的样本会被多次采样,也会有一次都没有被选择过的样本,原数据集中大概有 36.8% 的样本不会出现在新组数据集中,这些没有被选择过的数据作为验证集。
作者:不会停的蜗牛
链接:https://www.jianshu.com/p/5b793f9b6481
来源:简书
未完待续......