在社交互动中,面部表情在非语言交换中起着至关重要的作用。心理学家保罗·埃克曼提出,全世界的人都有七种情绪表达方式:高兴、悲伤、诧异、恐怖、愤恨、讨厌和藐视。建设更好的人机交互,例如通过图像检测人类情绪,可能是一项艰巨的工作。
面部表情对于社交互动很重要,并且在非语言人机交互方面施展着重要作用。本篇文章的指标是创立一个模型,该模型能够应用网络摄像头等一般设施辨认和分类一个人以后的情绪。
数据集
应用的数据集是从 Kaggle 的 2013 年面部情感辨认挑战赛中收集的,连贯在文章最初。
数据由人脸的 48×48 像素灰度图像组成。并且曾经通过了主动对齐,也就是说在每张图像中占据大致相同的空间,并且基本上都是居中的。
咱们的工作是依据面部表情中显示的情绪将每张脸分为七类之一(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。应用大小 48×48 的图像,所有这些像素值都用作咱们模型的输出。在训练数据上拟合随机森林后,预测测试数据的类别,准确率为 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