在社交互动中,面部表情在非语言交流中起着至关重要的作用。 心理学家保罗·埃克曼提出,全世界的人都有七种情绪表达方式:快乐、悲伤、惊讶、恐惧、愤怒、厌恶和蔑视。 建立更好的人机交互,例如通过图像检测人类情绪,可能是一项艰巨的任务。
面部表情对于社交互动很重要,并且在非语言人机交互方面发挥着重要作用。本篇文章的目标是创建一个模型,该模型可以使用网络摄像头等普通设备识别和分类一个人当前的情绪。
数据集
使用的数据集是从 Kaggle 的 2013 年面部情感识别挑战赛中收集的,连接在文章最后。
数据由人脸的 48x48 像素灰度图像组成。并且已经经过了自动对齐,也就是说在每张图像中占据大致相同的空间,并且基本上都是居中的。
我们的任务是根据面部表情中显示的情绪将每张脸分为七类之一(0=愤怒,1=厌恶,2=恐惧,3=快乐,4=悲伤,5=惊讶,6=中性) . 训练集包含 28,709 个示例,公共测试集包含 3,589 个示例。
数据预处理
对数据集进行基本数据分析后,我们可以看到数据存在类别不平衡问题,其中一类“厌恶”的图像数量很少,而其他情绪的图像数量更多。
为了处理这个类不平衡问题,根据它们在原始数据集中的出现情况,为每个类添加了单独的权重。然后通过执行基本图像操作和深度学习方法(如 ImageDataGenerator)来增强图像数据,该方法通过实时数据增强生成批量图像数据。
Haar 级联是一种使用 Viola 和 Jones 提出的边缘或线检测特征的算法。在这里使用 Haar 级联分类器用于在我们的图像数据集中执行人脸检测。
基线模型
支持向量机
SVM 是一种监督学习算法,用于解决数据集上的分类、回归和异常值检测问题。它通过创建一个分离数据点的超平面来实现。我们支持向量机是通过将给定数据以 3:1 的比例拆分为训练和测试数据,然后将超参数 C 的值设置为 1000,将 gamma 设置为 0.01(由 GridSearchCV 发现)来实现的,核函数使用径向基函数或 RBF。我们将模型拟合到训练数据上,然后在测试数据上测试模型。准确度约为 46%。
随机森林
随机森林是一种监督学习算法,可用于分类和回归问题。它使用称为估计器的决策树进行预测,并结合它们的结果来获得其结果。这里我们使用了 250 个估计器,最大特征和最小样本叶分别设置为 0.5 和 3。使用大小 48x48 的图像,所有这些像素值都用作我们模型的输入。在训练数据上拟合随机森林后,预测测试数据的类别,准确率为 45.62%。
我们将它们两个作为基线模型,对比使用卷积神经网络的性能。
卷积神经网络
在深度学习中,卷积神经网络(CNN 或 ConvNet)是最常用于分析视觉图像的一类人工神经网络。
CNN 主要用于分析视觉图像。基本上,CNN 使用卷积的数学概念,该概念显示了一个函数在另一个函数上进行卷积时如何改变另一个函数的形状。CNN是一个由每一层神经元组成的多层网络。当一个图像被输入到一个层时,它会通过卷积操作将结果输出给其他层。第一个卷积层通常提取基本特征,例如水平或对角边缘,随着我们在层中进一步向下移动,这些特征变得更加复杂,我们也可以识别人脸。池化层减少了卷积特征的空间大小,以减少计算量。激活层负责添加激活函数。激活函数有助于决定在每一层上激活哪些神经元。最常用的激活函数之一是 ReLu,因为它不会同时激活所有神经元。
这里使用模型实现由 26 层组成,包括 2 个全连接层和卷积、池化、ReLu、BN、Dropout 和激活层。
我们使用 GridSearchCV,搜索优化器和学习率的最佳组合,看看哪个给了我们最好的准确性。在使用 SGD(随机梯度下降)作为优化器时,学习率为 0.01、0.001 和 0.0001,准确率分别为 48%、45.5% 和 49%。然后对于 Adam优化器,在相同的学习率下,获得了大约 55.05%、57.60% 和 61.34% 的准确率。最后得出的最佳优化器和学习率是 Adam 和 0.001。这里使用的 epoch 数是 20。这是具有上述参数的损失图和精度图。
当我们将Adam优化器和学习率0.0001的CNN模型与SVM和Random Forest这两个基线进行比较时,其准确率分别为45.62%和46%,准确率为61.34%。
通过上图对比看到,我们只使用了简单的CNN就能够将准确率提升15%,这说明CNN相比传统的机器学习模型优势还是很大的。
但是准确率61%还偏低,我们还有许多的工作可以做,如果你对这个表情识别的数据集感兴趣,请看在kaggle上查看更加高效的解决方案
作者:Devansh Shukla
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。