一个用于面部表情识别的情感分析的深层神经网络工具包(FER)
Emo的Python项目详细描述
情绪化
emopy是一个python工具包,它具有深度神经网络类,可以根据人脸图像准确预测情绪。
本项目的目标是使面部表情识别(FER)模型更精确、更自由、更开放、更易于使用、更易于集成到不同的项目中。
emopy的开发人员编写了两个您可能会发现有用的指南:
我们的目标是扩大我们的发展社区,我们愿意接受建议和贡献。请与我们联系以进行讨论。
概述
emopy包括几个模块,这些模块被连接在一起以构建一个经过训练的fer预测模型。
fermodel.py
neuralnets.py
dataset.py
数据加载程序.py
csv数据加载程序.py
目录数据加载程序.py
数据发生器.py
fer model.py
模块使用预先训练的模型进行fer预测,使其成为最容易获得训练模型并快速运行的入口点。
每个模块都包含一个类,除了neuralnets.py
,它有一个接口和四个子类。这些子类中的每一个子类都使用带有tensorflow后端的keras框架实现了一个不同的神经网络体系结构,允许您进行实验,看看哪一个最适合您的需要。
emopy文档包含有关类及其交互的详细信息。此外,下面还概述了本项目中包含的不同神经网络。
数据集
使用您自己的数据集或我们在examples/image\u data子目录中提供的小数据集试用系统。我们提供的样本数据集由于体积小,不会产生好的结果,但它们是一个很好的入门方法。
理想情况下,预测在FER研究中看到的各种数据集、照明条件和标准7种情绪标签(快乐、愤怒、恐惧、惊讶、厌恶、悲伤、平静/中性)的子集上表现良好。一些很好的公共数据集示例是扩展的cohn-kanade和ferer+
环境设置
emopy使用python 3.6运行,理论上是在任何与python兼容的操作系统上。我们在osx上使用python 3.6.6测试了emopy。您可以从python网站安装python 3.6.6。
请注意,这不是最新版本的python,但是tensorflow包还不能与python 3.7一起工作,因此emopy不能与python3.7一起运行。
python兼容多种操作系统。如果你想在其他操作系统,请转换这些指令以匹配目标环境。让我们知道您的进展,我们将尽力支持您并分享您的结果。
如果未安装自制程序,请运行以下命令进行安装:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
可视化功能需要图形化。
brew install graphviz
下一步是使用virtualenv建立一个虚拟环境。使用sudo安装virtualenv。
sudo pip install virtualenv
创建并激活虚拟环境。运行:
python3.6 -m venv venv
其中第二个venv
是虚拟环境的名称。要激活,请从同一目录运行:
source venv/bin/activate
现在,终端命令行的前缀应该是(venv)
(要停用虚拟环境,请在命令行中运行deactivate
。当前缀(venv)
消失时,您将知道它已被停用。
安装
来自PYPI
激活虚拟环境后,您可以使用
pip install EmoPy
从源头
克隆目录并在终端中打开。
git clone https://github.com/thoughtworksarts/EmoPy.git
cd EmoPy
使用pip安装其余依赖项。
pip install -r requirements.txt
现在你可以走了!
运行示例
您可以在示例中找到运行每个当前神经网络类的示例代码。您可以将示例目录下载到计算机上您选择的位置,或查找安装中包含的示例目录。
如果选择使用已安装的软件包,则可以从创建的虚拟环境目录开始,键入:
cd lib/python3.6/site-packages/EmoPy/examples
最好从fermodel示例开始。下面是该代码的列表:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
0
上面的代码加载一个预先训练的模型,然后在一个样本图像上预测一种情绪。如您所见,本例中您只需提供一组目标情绪和一个示例图像。
完成安装后,可以通过运行示例脚本从examples文件夹运行此示例。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
1
这个例子做的第一件事是加载并初始化模型。接下来,它打印出每个给定样本图像的情感概率。应该是这样的:
/p>
要训练自己的神经网络,请使用我们的一个FER神经网络类开始。您可以尝试卷积模型。py示例:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2
该示例首先初始化模型。将打印出模型体系结构的摘要。这包括所有神经网络层及其输出形状的列表。我们的模型是使用Keras框架构建的,它提供了这种可视化功能。
在每个样本图像上训练模型时,您将看到模型的训练和验证精度正在更新。由于我们只使用三幅图像进行训练和验证,因此验证精度将非常低。应该是这样的:
神经网络模型的比较
卷积nn卷积神经网络(CNN)目前是考虑使用神经网络进行图像分类,因为神经网络可以提取图像小部分的模式,例如眉毛的曲线。emopy的卷积神经网络是在静止图像上训练的。
时间延迟convnn
延时三维卷积神经网络模型的灵感来自于本文作者:伦敦布鲁内尔大学孟红英博士。它使用时间信息作为训练样本的一部分。它不使用静态图像作为训练样本,而是使用序列中的过去图像作为附加上下文。一个训练样本将包含一系列图像中的n个数,其情感标签将是最新的图像。我们的想法是捕捉面部表情的发展过程,从而达到情绪的顶峰。
cohn-kanade数据库中的面部表情图像序列来自@JIA2014
卷积lstmnn
卷积长短期记忆神经网络是一种卷积和递归神经网络的混合。卷积nns使用核函数或滤波器在图像的较小部分找到模式。经常性神经网络(rns)考虑到以前的训练示例,类似于延时神经网络,用于上下文。该模型既能从图像中提取局部数据,又能利用时间上下文。
时滞模型和该模型在使用时间上下文方面有所不同。前者只从一张脸的视频片段中获取上下文,如上图所示。卷积lstmnn给出了互不相关的静止图像。它查找过去图像样本和当前样本之间的模式差异以及它们的标签。没有必要对同一张脸有一个级数,只需要比较不同的脸即可。
图来自@vangent2016
传输清除nn
性能
目前卷积lstmnn模型在对7种情绪进行分类时表现最好,验证准确率为47.5%。下表显示了该模型和transferlearningnn模型在所有七种标准情绪和三种情绪(恐惧、快乐、中性)的子集上训练时的准确度值。他们W我们从fer+数据集中培训了5000张图片。
<表><广告>这两个模型都是过度拟合的,这意味着训练的准确性远远高于验证的准确性。这意味着模型在识别和分类训练图像中的模式方面做得非常好,但是过于泛化。在预测新图像的情绪时,它们的准确性较低。
如果您想使用我们的神经网络类来实验不同的参数,我们建议您使用floydhub,一个在云中训练和部署深度学习模型的平台。让我们知道你的模特们怎么样了!目标是优化所有ferpython模型的性能和通用性。
指导原则
这些是我们用来指导项目开发和贡献的原则:
永远是。fer应用程序有可能被用于恶意目的。我们希望通过一个倡导诚信、透明和意识的社区来构建emopy,并希望在整个开发过程中灌输这些价值观,同时维护一个可访问的、高质量的工具包。
用户友好性。emopy优先考虑用户体验,通过最小化基本用例的总用户需求,设计为尽可能容易地启动和运行fer预测模型。
最大化性能的实验。FER预测的最佳性能是首要目标。深层神经网络课程旨在轻松修改训练参数、图像预处理选项和特征提取方法,希望在开源社区中的实验将导致高性能的FER预测。
模块化。emopy包含四个基本模块(
fermodel
、neuralnets
、imageprocessor
和featureextractor
),这些模块可以很容易地与最小的限制一起使用。
贡献
-
把它叉起来!
- 创建功能分支:
git checkout-b我的新功能
- 提交更改:
git commit-am'add some feature'
- 推到分支:
git push origin my new feature
- 提交拉取请求:d
这是一个有很大发展空间的新图书馆。查看我们需要帮助解决的公开问题列表!