tensorflow机器学习之利用CNN卷积神经网络进行面部表情识别的实例代码

  • 时间:2017-07-06
  • 分类:数据库/系统
  • 2958 人浏览
[导读]本例通过 TensorFlow 构造卷积神经网络,做表情识别的测试。

本例通过 TensorFlow 构造卷积神经网络,做表情识别的测试。

输入数据可以从http://download.csdn.net/user/shinian1987上下载FER-2013 这个数据库, 一共有 35887 张人脸灰度图像的数据,每张分辨率48*48,已经做好了csv文件,每张图片的表情由0~6数字表示,分别代表(0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral)。下载数据后,解压,将文件fer2013.csv放入和程序同一级目录下的'data'文件夹中即可。如果感兴趣可以把每张图像用PIL或者cv2库还原保存在本地,如下所示。


为了计算方便,本例中用其中的 30000张图像做训练,5000张图像做测试集,我们建立一个3个convolution layer 以及 3个 pooling layer 和一个 FC layer 的CNN 来做训练(再添加一级FC应该会更好些)。

CNN网络结构如下所示: 
input -> conv 1 -> pool 1 -> conv 2 -> pool 2 -> conv 3 -> pool 3 -> fc 1 -> out 
input -> 48×48 
conv 1 -> filter size: 3×3, “SAME” padding, output: 48×48 
pool 1 -> filter size: 2×2, output: 24×24 
conv 2 -> filter size: 3×3, “SAME” padding output: 24×24 
pool 2 -> filter size: 2×2, output: 12×12 
conv 3 -> filter size: 3×3, “SAME” padding output: 12×12 
pool 3 -> filter size: 2×2, output: 6×6 
fc 1 -> hidden nodes: 200, output: 1×100 
out -> 1×2

剩下直接上代码,代码很简单,试验环境是python3.6, tensorflow1.2.0,程序已经调通,复制粘贴就可以跑。感谢万水千山先生的无私分享宝贵知识,欢迎大家踩他,http://blog.csdn.net/matrix_space,他使用的是python2和老版本的tensorflow的搭建系统,有些过去有效的函数在新版本的tensorflow需要修改。

程序的算法总流程如下:

1. 先读csv数据

2. 将其中label和图像部分分别获取并保存,设置batch,方便训练网络时喂数据。

3. 构建CNN网络。 

4. 训练,跑起来就可以去睡了,设置了跑100轮,要很长很长时间,电脑比较老,CPU(i5)的四个线程几乎一直满负荷,8G内存占用约5G左右,我的显卡是A卡,GPU还不支持,估计使用N卡同时使用GPU会好很多。

5. 验证。


来源:本文为线上采编,如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除!