机器学习课程个人期末报告——基于SVM的人脸表情识别
问题描述
根据面部表情显示的情绪对人物图像进行分类。
数据集
有 35887 张人脸灰度图像的数据,每张图像分辨率48*48,像素点数据存放在csv文件中,图像的表情由数字0~6表示(0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral)。
2.1、HOG特征
方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。
2.2、HOG特征提取过程
1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);
2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;
3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。
4)将图像划分成小cells;
5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的特征向量;
6)将每几个cell组成一个block,一个block内所有cell的特征向量组合起来便得到该block的HOG特征向量。
根据面部表情显示的情绪对人物图像进行分类。
数据集
有 35887 张人脸灰度图像的数据,每张图像分辨率48*48,像素点数据存放在csv文件中,图像的表情由数字0~6表示(0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral)。
少量数据的可视化处理:
将csv文件中pixels列48*48的数值恢复成图片
解决思路:
1、安装开源的人脸识别库。
2、提取数据的Dlib特征及HOG特征。
3、进行SVM算法的训练并对测试集进行算法测试,评估效果。
1、安装部分库
安装Dlib。
Dlib是一个跨平台的C++公共库,包含了许多机器学习常用的算法,人脸检测与特征点定位算法;同时支持大量的数值算法如矩阵、大整数、随机数运算等等。
安装OpenCV。
OpenCV全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。
安装其他辅助库。
pip install Numpy #支持高阶大量的维度数组与矩阵运算
pip install argparse #参数处理库
pip install sklearn #基于python的机器学习库
pip install scikit-image #图像处理包,它将图片作为数组进行处理
pip install pandas #基于Numpy构建的,有数值标签,具有索引。
2.1、HOG特征
方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。
2.2、HOG特征提取过程
1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);
2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;
3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。
4)将图像划分成小cells;
5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的特征向量;
6)将每几个cell组成一个block,一个block内所有cell的特征向量组合起来便得到该block的HOG特征向量。
7)将图像image内的所有block的HOG特征向量串联起来就可以得到该image的HOG特征向量了。这个就是最终的可供分类使用的特征向量了。
2.3、Dlib特征提取
Dlib会提取图像的特征点。
注:图片来自网络
但本项目中,图片较小,像素点很少,Dlib的特征提取效果较差。
3、算法运行结果
总结及分析
由于图片像素点相对较少,相邻像素差距较大,面部特征无法充分展示,给特征提取造成了很大困难。
由于图片数量较多,提取特征耗时较长。