Report for FER

Jian Tang

Abstract

我们使用卷积神经网络(CNN)实现了baby的面部表情识别(FER)。

工程代码: https://github.com/JianTang2000/FER2013

数据上,我们获取了开源FER数据集FER2013[1],besides我们使用爬虫获取了baby相关的人脸图片,进行了手工分类标注以形成一个全新的baby FER数据集。

模型上,我们首先复现了Luan[2]的工作,即参考Kuo[3]在CVPR 2018上的工作并实现一个轻量的CNN网络,在FER2013上进行训练并得到了 54% 的平均分类准确率(avg acc on valSet);然后我们将模型应用在baby FER数据集并得到avg acc 65%;我们将网络直接应用在baby FER数据集并进行训练,得到的新的avg acc为XXXX%;我们更改了模型的结构以更好的适应三通道,大分辨率的baby FER数据集,最后我们得到的avg acc是XXXX%。(数据没存,有时间再跑一次)

Data

FER2013

FER2013数据集是一个开源的,带标签的,划分好Train/Val的,含7类表情的,含多种族多性别多年龄段的人脸表情灰度图集,且通过对图片的观察我们发现图片存在带水印,卡通图,标签不准确等可能影响分类精度的问题。具体的表情类别和图片数量如下

FER2013 TrainSet数据类别和数量

class anger has img number: 3995
class disgust has img number: 436
class fear has img number: 4097
class happy has img number: 7215
class neutral has img number: 4965
class sad has img number: 4830
class surprised has img number: 3171

FER2013 ValSet数据类别和数量

class anger has img number: 491
class disgust has img number: 55
class fear has img number: 528
class happy has img number: 879
class neutral has img number: 626
class sad has img number: 594
class surprised has img number: 416

baby FER数据集

工作1。数据集的构建。首先我们爬取了baby的多种表情的图片;考虑到人工圈出人脸框是高人工消耗的,于是接着我们使用了Opencv的CascadeClassifier+Haar分类器[4]对人脸框进行自动寻找并裁剪;然后我们手工对裁剪后的人脸进行了分类标注,考虑到研究并不需要过多的表情类别,这里我们仅分了happy,peace,sad三类,同时,为了提高分类准确率,我们去掉了表情难以区分,带水印,灰度图,分辨率过小的图片;最后我们对数据进行2/8划分以得到TrainSet/ValSet。

最终的baby FER数据集是一个自建的,带标签的,划分好Train/Val的,含3类表情的,含多种族多性别的,年龄段均为baby的人脸表情非灰度图集。

其中valSet数量如下:

====> class happy has img number: 97
====> class peace has img number: 148
====> class sad has img number: 256

CNN Model

Luan给出了如下图1和图2的模型结构。具体的,因为FER2013只包含7类表情,为了适配模型的8类输出,Luan在FER数据集读入内存的时候增加了一列全0的虚拟数据,并给这类虚拟数据一个标签。

图1 CNN模型结构

图1 CNN模型具体参数

工作2。考虑到Luan使用TensorFlow 2.3.1 Keras[5]实现网络结构,我们对keras的修改不算熟悉,且我们后期要对结构进行一些修改,于是我们选择使用pytorch[6]复现Luan的工作,但我们将模型输出改成7类,且并没有增加虚拟类数据,且加上了卷积层的padding,最后的模型输出结果如下

我们的输出和Luan的工作略有差别,我们在TrainSet的平均准确率达到了90%+,但在ValSet只达到了50%+,低于Luan的69%,我们猜测这可能是因为其增加的第八个虚拟类别导致的。

工作3。我们将模型应用在baby FER数据集,模型输出包括7种表情,但baby FER数据集的金标签只有3类,所以我们进行了一个映射。具体的,我们将模型输出进行映射,即将happy映射到happy,neutral映射到peace,其他映射到sad。我们得到的准确率如下:

acc for 3 classes (happy peace sad):
0.6804
0.723
0.6094
avg acc:
0.6567

工作4。我们更改了模型的结构以更好的适应baby FER数据集,具体的,我们将单通道的灰度图改成3通道图片然后送入模型,调大了模型的输入,从48*48调整为96*96,增加了conv的padding,最后我们得到的模型表现如下:  (数据没保存,有空再做一次)

工程代码除了github,也可以在下面链接找到

链接:https://pan.baidu.com/s/10WxYg-0fdEkuXwgaMtOUbw

提取码:932n

[1] Challenges in Representation Learning: A report on three machine learning contests." I Goodfellow, D Erhan, PL Carrier, A Courville, M Mirza, B Hamner, W Cukierski, Y Tang, DH Lee, Y Zhou, C Ramaiah, F Feng, R Li, X Wang, D Athanasakis, J Shawe-Taylor, M Milakov, J Park, R Ionescu,M Popescu, C Grozea, J Bergstra, J Xie, L Romaszko, B Xu, Z Chuang, and Y. Bengio. arXiv 2013.

[2] https://github.com/luanshiyinyang/FacialExpressionRecognition

[3] Kuo C M, Lai S H, Sarkis M. A compact deep learning model for robust facial expression recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition workshops. 2018: 2121-2129.

[4] Soo S. Object detection using Haar-cascade Classifier[J]. Institute of Computer Science, University of Tartu, 2014, 2(3): 1-12.

[5] Ketkar N. Introduction to keras[M]//Deep learning with Python. Apress, Berkeley, CA, 2017: 97-111.

[6] Paszke A, Gross S, Massa F, et al. Pytorch: An imperative style, high-performance deep learning library[J]. arXiv preprint arXiv:1912.01703, 2019.

基于CNN的表情识别(FER)pytorch实现相关推荐

  1. 作业6:基于CNN的XO识别 深度学习 手搓卷积代码

    目录 一.实现卷积 池化 激活 代码 1.numpy版本 生成图像 卷积核生成 卷积操作 池化操作 最大池化 平均池化 激活操作 2.pytorch版本(利用pytorch框架) 2.1相关函数 2. ...

  2. NNDL 作业6:基于CNN的XO识别

    实现卷积-池化-激活 Numpy版本:手工实现 卷积-池化-激活 自定义卷积算子.池化算子实现,源码如下: import numpy as npx = np.array([[-1, -1, -1, - ...

  3. 毕业设计:基于CNN做人脸识别

    基于CNN做人脸识别 首先,我是考虑,这系统在Windows下做还是在Linux.Ubuntu下做比较好? 然后,我都检测过,Windows下可以用python.anaconda写代码都可以.当然,和 ...

  4. 【深度学习】基于caffe的表情识别(二):数据集介绍及处理

    <基于caffe的表情识别>系列文章索引:http://blog.csdn.net/pangyunsheng/article/details/79434263 一.数据集介绍 在本实验中我 ...

  5. 深度学习项目,使用python进行表情识别,pytorch应用

    文章目录 前言 一.深度学习是什么? 二.数据的预处理 1.数据分类 2.代码 三.构建模型与训练 1.模型与代码 2.使用方法 四.实时识别 总结 前言 这个项目是以前课设用到的功能之一,参考了其他 ...

  6. 基于cnn的人脸识别_鬼都藏不住,人脸识别新突破!就算遮住半张脸也能100%被识别...

    转自:新智元 如涉版权请加编辑微信iwish89联系 哲学园鸣谢 新智元报道 来源:sciencedirect 编辑:金磊,元子 [新智元导读]众所周知,人脸识别在摄像头无法捕捉到完整面部图像的情况下 ...

  7. 基于CNN实现CIFAR100识别-tensorflow2.0实现

    CIFAR100与mnist数据集一样,但是复杂一些,基于CNN对CIFAR100实现的原理与对mnist的操作大同小异,程序所采用的CNN网络为13层的VGG网络. 经过网络处理过程如下所示: 代码 ...

  8. 基于python的表情识别_python 实现表情识别

    表情识别 表情识别支持7种表情类型,生气.厌恶.恐惧.开心.难过.惊喜.平静等. 实现思路 使用opencv识别图片中的脸,在使用keras进行表情识别. 效果预览 实现代码 与<>相似, ...

  9. 关于matlab表情包,基于matlab人脸表情识别

    [实例简介] LBP+LPQ特征提取,调用摄像头实时采集人脸,可识别开心.惊讶.平静.生气四种表情,主函数main,可直接运行 [实例截图] [核心代码] 表情识别(1) `-- 表情识别 |-- D ...

最新文章

  1. 这个德国山寨工厂靠抄袭干到240亿,让硅谷恨之入骨
  2. [数据库] Navicat for MySQL事件Event实现数据每日定期操作
  3. 《小狗钱钱》:理财首先应该有一种强烈的意识
  4. 排序陷阱 List.Sort Linq.OrderBy
  5. Windows API(非MFC)编程加载位图
  6. 你写的 Python 代码总是不规范?用它!
  7. 5G iPhone SE即将试产 搭载A15仿生芯片采用4.7英寸屏幕
  8. 不能算是读后感的读后感
  9. WIN和LIN环境下对拍程序
  10. 【MYSQL快速入门】常用函数:文本函数
  11. 实现拍照_成电最强拍照地点合集,以及帮你实现它们的拍照师傅
  12. Python 06 编码
  13. Java项目(一):家庭收支记账软件
  14. 为什么要学编写通达信指标公式
  15. 机器人唱歌bgm_变形金刚5所有背景乐插曲盘点 长老机器人弹钢琴BGM是什么歌
  16. JavaScript “佛祖保佑 永无bug”
  17. 谈谈c语言中delay的用法
  18. Python的前奏:excel常用功能简介,数据透视表,切片器
  19. Android分享文件到qq没反应,Android 微信,qq分享文件
  20. 虚幻4地形怎么增加层_虚幻周报20200114 | 新春快乐!

热门文章

  1. Pyecharts一文速学-绘制桑基图详解+Python代码
  2. Python利用selenium简单的爬取网易云歌曲排行榜
  3. 不同架构cpu上的c语言编译器,关于c ++:检测CPU架构的编译时
  4. origin图例修改框框
  5. html用户名标签,HTML常用标签
  6. 白鹭引擎开发微信小游戏: API 调用教程文档
  7. golang中的iota
  8. RobotFramework学习笔记二:遇到Frame框架
  9. 本周大新闻|苹果MR已进行Pre-EVT测试,Quest 2涨价100美元
  10. Android加载web页时有的手机会弹出手机自带的浏览器解决方法