• Stars
    star
    434
  • Rank 99,627 (Top 2 %)
  • Language
    Python
  • License
    GNU General Publi...
  • Created over 5 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

人脸识别之表情识别项目相关源码

人脸表情识别

更新日志

v0.1

基于TensorFlow1.x的人脸表情识别项目。

v0.2

2020.8.22,重构了整个仓库代码,改用Tensorflow2中的keras api实现整个系统。考虑到很多反映jupyter notebook写的train使用起来不太方便,这里改成了py脚本实现。

v0.3

2020.12.18,根据反馈,修改了Jaffe的优化器设置。

v0.4

2021.10.31,增加了人脸检测器blazeface。

简介

使用卷积神经网络构建整个系统,在尝试了Gabor、LBP等传统人脸特征提取方式基础上,深度模型效果显著。在FER2013、JAFFE和CK+三个表情识别数据集上进行模型评估。

环境部署

基于Python3和Keras2(TensorFlow后端),具体依赖安装如下(推荐使用conda虚拟环境)。

git clone https://github.com/luanshiyinyang/FacialExpressionRecognition.git
cd FacialExpressionRecognition
conda create -n FER python=3.6 -y
conda activate FER
conda install cudatoolkit=10.1 -y
conda install cudnn=7.6.5 -y
pip install -r requirements.txt

如果你是Linux用户,直接执行根目录下的env.sh即可一键配置环境,执行命令为bash env.sh

数据准备

数据集和预训练模型均已经上传到百度网盘,链接给出,提取密码为2pmd。下载后将model.zip移动到根目录下的models文件夹下并解压得到一个*.h5的模型参数文件,将data.zip移动到根目录下的dataset文件夹下并解压得到包含多个数据集压缩文件,均解压即可得到包含图像的数据集(其中rar后缀的为原始jaffe数据集,这里建议使用我处理好的)。

项目说明

传统方法

  • 数据预处理
    • 图片降噪
    • 人脸检测(HAAR分类器检测(opencv))
  • 特征工程
    • 人脸特征提取
      • LBP
      • Gabor
  • 分类器
    • SVM

深度方法

  • 人脸检测
    • HAAR分类器
    • MTCNN(效果更好)
  • 卷积神经网络
    • 用于特征提取+分类

网络设计

使用经典的卷积神经网络,模型的构建主要参考2018年CVPR几篇论文以及谷歌的Going Deeper设计如下网络结构,输入层后加入(1,1)卷积层增加非线性表示且模型层次较浅,参数较少(大量参数集中在全连接层)。

模型训练

主要在FER2013、JAFFE、CK+上进行训练,JAFFE给出的是半身图因此做了人脸检测。最后在FER2013上Pub Test和Pri Test均达到67%左右准确率(该数据集爬虫采集存在标签错误、水印、动画图片等问题),JAFFE和CK+5折交叉验证均达到99%左右准确率(这两个数据集为实验室采集,较为准确标准)。

执行下面的命令将在指定的数据集(fer2013或jaffe或ck+)上按照指定的batch_size训练指定的轮次。训练会生成对应的可视化训练过程,下图为在三个数据集上训练过程的共同绘图。

python src/train.py --dataset fer2013 --epochs 300 --batch_size 32

模型应用

与传统方法相比,卷积神经网络表现更好,使用该模型构建识别系统,提供GUI界面和摄像头实时检测(摄像必须保证补光足够)。预测时对一张图片进行水平翻转、偏转15度、平移等增广得到多个概率分布,将这些概率分布加权求和得到最后的概率分布,此时概率最大的作为标签(也就是使用了推理数据增强)。

GUI界面

注意,GUI界面预测只显示最可能是人脸的那个脸表情,但是对所有检测到的人脸都会框定预测结果并在图片上标记,标记后的图片在output目录下。

执行下面的命令即可打开GUI程序,该程序依赖PyQT设计,在一个测试图片(来源于网络)上进行测试效果如下图。

python src/gui.py

上图的GUI反馈的同时,会对图片上每个人脸进行检测并表情识别,处理后如下图。

实时检测

实时检测基于Opencv进行设计,旨在用摄像头对实时视频流进行预测,同时考虑到有些人的反馈,当没有摄像头想通过视频进行测试则修改命令行参数即可。

使用下面的命令会打开摄像头进行实时检测(ESC键退出),若要指定视频进行进行检测,则使用下面的第二个命令。

python src/recognition_camera.py
python src/recognition_camera.py --source 1 --video_path 视频绝对路径或者相对于该项目的根目录的相对路径

下图是动态演示的在Youtube上某个视频上的识别结果。

More Repositories

1

awesome-multiple-object-tracking

Resources for Multiple Object Tracking (MOT)
1,027
star
2

DataMining

Data Analysis and Mining(数据分析与挖掘)
Python
223
star
3

PlotNeuralNet

包含PlotNeuralNet绘制神经网络结构图的教程源码
TeX
98
star
4

DataMiningProject

包含一些比较常见的数据挖掘竞赛或者项目的源码
96
star
5

Stacking

机器学习集成模型之Stacking各类模型及工具源码
Python
60
star
6

GNN

Tutorial about Graph Convolutional Network(GCN)
Python
55
star
7

MSCNN

Tensorflow2(Keras)复现论文"Multi-scale Convolution Neural Networks for Crowd Counting"实现人群密度估计
Python
27
star
8

Tutorial

Tutorial about machine learning and deep learning framework.
25
star
9

MachineLearning

机器学习
Python
22
star
10

DeepSORT

基于DeepSORT算法实现端到端的行人多目标跟踪。
Python
21
star
11

Colorization

Keras复现论文"Colorful Image Colorization"
Python
15
star
12

Algorithm

算法原理讲解及Python实现
Python
10
star
13

ChineseOCR

端到端的中文场景文字识别。
Python
10
star
14

PaperReadings

包括机器学习、深度学习、计算机视觉等领域前沿论文的解读。
9
star
15

DeepLearningProject

深度学习实战项目(图像识别、语音识别、文本处理等)
Jupyter Notebook
9
star
16

Memo

安卓备忘录
Java
9
star
17

YOLO

YOLO目标检测算法的介绍。
8
star
18

FairMOT

a realtime tracking by FairMOT
Python
7
star
19

MLP

Numpy手写BP神经网络,对比Dropout、Batch Normalization等训练技巧的效果。
Python
7
star
20

DyReLU

implementation of dyrelu in ResNet50
Python
7
star
21

DeepLearning

深度学习神经网络构建源码。
Jupyter Notebook
6
star
22

NMS

Python实现NMS(非极大值抑制)对边界框进行过滤。
Python
5
star
23

Spider

一些爬虫实战脚本
Python
5
star
24

luanshiyinyang.github.io

个人博客的主题及内容源码仓库(Hexo+Matery),欢迎fork后创建自己的博客网站,注意源码为hexo分支。
HTML
5
star
25

Competitions

数据科学竞赛项目源码,具体见不同分支。
4
star
26

LCNotes

LeetCode Notes
Python
4
star
27

Models

the implementation of classical network
Jupyter Notebook
4
star
28

SentimentAnalysis

逻辑回归、支持向量机、神经网络在文本情感分析任务中的表现,基于IMDB数据集。
Python
4
star
29

Attentions

classific attention modules in computer vision
Python
3
star
30

ML

机器学习讲义
Python
3
star
31

TesTool

基于PyTest+Requests+Allure+Jenkins的接口自动化测试框架。
Python
3
star
32

LeetCode

LeetCode刷题源码(Contest分支含历次周赛代码及题解)
Python
3
star
33

Caltech101

基于Caltech101,使用TensorFlow2.0训练并测试VGG16、ResNet50和DenseNet121的效果。
Python
2
star
34

NLP

自然语言处理传统方法源码、课程cs224n源码、常用工具包源码
Python
2
star
35

Boosting

机器学习集成模型之Boosting各类模型及工具源码
Jupyter Notebook
2
star
36

PythonScripts

一些有趣的python实战脚本。
1
star
37

VAE

Numpy实现VAE生成MNIST数据集
Python
1
star
38

AndroidDemo

含有常见的安卓第三方控件和框架的使用测试项目
Java
1
star
39

luanshiyinyang

1
star
40

AutoEncoder

实现自编码器并在几个常见手写集(MNIST、USPS、Semeion)上验证效果。
Jupyter Notebook
1
star