深度学习实时表情识别

背景

计算机动画代理和机器人为人机交互带来了新的维度,这使得计算机如何在日常活动中影响我们的社交生活变得至关重要。 面对面的交流是一个以毫秒级的时间尺度运行的实时过程。 这个时间尺度的不确定性是相当大的,这使得人类和机器有必要依赖感官丰富的感知原语,而不是缓慢的符号推理过程。 在这个项目中,我们展示了七种最基本的人类表情的实时面部表情识别:愤怒、厌恶、恐惧、快乐、中立、悲伤、惊讶。

现实问题

从七种基本的人类表情中对图像中的面部表情进行分类。

该模型可用于预测静态图像和实时视频的表达。 但是,在这两种情况下,我们都必须为模型提供图像。 在实时视频的情况下,应该在任何时间帧拍摄图像并将其提供给模型以进行表情预测。 系统使用 HAAR 级联自动检测人脸,然后对其进行裁剪并将图像调整为特定大小,并将其提供给模型进行预测。 该模型将生成对应于七个表达式的七个概率值。 对应表达式的最高概率值将是该图像的预测表达式。

然而,我们在这里的目标是预测人类的表情,但我们已经在人类和动画图像上训练了我们的模型。 因为,我们只有大约 1500 张人体图像,这对于制作一个好的模型来说非常少,所以我们拍摄了大约 9000 张动画图像,并利用这些动画图像来训练模型,最终对人体图像进行表情预测。

为了更好地预测,我们决定将每张图像的大小保持为 350*350。

目标和约束

目标

我们的目标是尽可能快速准确地实时预测人脸的表情。

约束

  1. 延迟:给定图像,系统应该能够立即预测表达并传输结果。因此,存在低延迟要求。
  2. 可解释性:可解释性对于静止图像很重要,但不是实时的。对于静止图像,可以给出预测表达的概率。
  3. 准确性:我们的目标是尽可能准确地预测图像中人脸的表情。测试精度越高,我们的模型在现实世界中的表现就越好。

性能指标

这是一个具有 7 个不同类别的多类别分类问题,因此我们考虑了三个性能指标:

  1. 多类对数损失:我们最终使用了带有交叉熵层的深度学习模型,其中包含七个 softmax 单元,因此我们的目标是减少多类对数损失/交叉熵损失。
  2. 准确度:这告诉我们我们的模型在预测表达式方面的准确度。
  3. 混淆度量:由于我们的问题是多类分类,所以混淆度量将帮助我们知道哪些类比其他类更具优势,或者模型更偏向哪个类。 这让我们对模型的预测结果有了清晰的了解。

数据源

数据类型

我们总共有 10596 张图片。其中1496幅是人体图像,9100幅是动画图像。因此,我们有两种类型的图像。一种是人像,另一种是动画图像。

一些人类图像的例子:

一些动画图像的例子:

我们使用了几乎所有在普通 ML/DL 问题中使用的库,如 pandas、numpy、matplotlib、sklearn 等。但在这里我想强调两个重要的库。

图像初始预处理概述

  1. 我们从一开始就将人和动画图像分开,并将它们存储在七个不同的文件夹中,即:愤怒、厌恶、恐惧、快乐、中立、悲伤、惊喜。
  2. 请记住,每个表达式都有两个文件夹。一种用于人类,另一种用于动画。总共有 14 个文件夹。
  3. 我们为每个表达式制作了单独的数据框。因此,总共将有 14 个数据帧。 7 个数据帧对应于人类图像的 7 个表达式。同样,7个数据帧对应到动画图像的七个表达式。
  4. 然后我们结合了人类的所有数据帧。总共有1496张人体图像。在此之后,我们组合了动画图像的所有数据帧。共有 9100 张动画图像。
  5. 所以,现在我们有两个数据帧,一个用于人类图像,另一个用于动画图像。

训练/测试/分割

对于人类和动画图像,我们已经拆分了我们的数据,使得所有三个数据(即train、CV 和 test)都应该得到均匀分布的类标签图像。

人体图像的分布如下:

动画图像的分布如下:

图像的最终处理

结合人类和动画的训练数据

从 VGG-16 模型创建瓶颈特征(转移学习)

建模和训练

测试结果

测试真实图片

源代码

详情参阅 - 亚图跨际

你可能感兴趣的:(机器学习,表情识别,深度学习)