Py学习  »  机器学习算法

TensorFlow深度学习:CNN做人脸表情识别,准确率达93%

大数据挖掘DT机器学习 • 5 年前 • 730 次点击  


向AI转型的程序员都关注了这个号👇👇👇

大数据挖掘DT机器学习  公众号: datayx



此次分享的项目是利用tensorflow构建一个CNN网络来对fer2013数据集进行训练以实现面部表情识别的小项目。

首先,我们需要现在官网上下载fer2013数据集,将数据集进行解压,会生成一个fer2013.csv文件,我们首先要对这个.csv文件进行简单的处理。

fer2013数据集将表情大致分为7类,fer2013.csv中分别标注了每张图片的标签,特征值和分类。我们首先根据分类将数据集划分为train, test和val。


fer2013数据集 官网

https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data


或者


关注微信公众号datayx 然后回复“表情识别”即可获取本文代码和数据集。



之后,我们需要将根据其特征值将其还原为48*48的灰度图像:


在这之后,我们就可以对数据集构建batch和CNN网络对其进行训练了。



这样通过调用get_batch()这个函数就可以生成相应的batch,这将对我们后边训练数据非常重要。            



将数据的准备工作完成之后,我们接下来来构建本次项目需要使用的CNN网络。本次构建的网络包含2个卷积层,2个池化层,2个全连接层以及1个softmax层,为了训练的方便,还在模型代码中加入了计算损失和准确率以及训练的函数,方便之后直接调用。具体代码如下:



将模型构建好之后,我们就可以直接开始训练了。将训练轮数设置为50000次,学习率设为0.0001,开始训练:


在训练50000轮后,训练的准确率达到了95%左右,验证准确率也到达93%左右,算是一个可以接受的值了。


下面,我们就要来实现从摄像头来识别人脸并对我们做出的表情做出判断。

从摄像头来识别人脸,我们要用到openCV技术以及写好的人脸识别器。人脸识别器有许多种,我们此次选用haarcascade_frontalface_default.xml这个分类器。


使用摄像头截取人像的时候,我们将摄像头此时的一帧图像截取并保存下来。代码如下:



这样调用CatchPICFromVideo()这个函数可以生成瞬时帧的图片,并将其命名为0.jpg。


接着,我们将截下来的图片进行裁剪,使之大小为48*48,并处理为灰阶位图,便于导入网络中进行预测。


这之后我们就能得到一个48*48的灰阶位图。 


关注微信公众号datayx 然后回复“表情识别”即可获取本文代码和数据集。


不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

长按图片,识别二维码,点关注


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/hoWs4ihtE4
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/21117
 
730 次点击