人脸表情识别 (1) 下载fer2013数据集和数据的处理
最近做了有关人脸表情识别的实验,还是挺有意思的,所以想在博客上记录这个过程,既是给自己做个记录,也想把这个过程分享给大家,如果能对你有一些帮助我会感到挺开心的,模型,数据集之类的我都会陆续上传,有需要的可以自己获取。
先说在之后的文章会用到的东西,Ubuntu 16.04环境,Python 3.6.5,Keras框架,tensorflow框架,OpenCV,像一些Python中做科学计算的包比如numpy和画图的包matplotlib也都是需要的,当然也不要被吓到了,这些东西基本没什么难的,按照我的博客应该不需要对上述东西有太深的了解。
接下来,我会完整记录整个过程,从数据的获取,数据的处理,数据的增广,模型的建立,模型的训练,到数据的分析。我的模型目前在fer2013数据集的测试数据上的预测精度为62%左右,这个为单个模型的预测精度,组合模型的预测精度能够达到68%,和kaggle竞赛上的第一名的精度比较接近,他是71%。
我的CPU是i5-4200H,GPU是英伟达的gtx950M,训练一个完整的模型大概需要一个多小时,时间上还可以接受,如果你没有很好的硬件平台的话,也可以使用云平台,我自己现在在用的是易学智能的GPU云平台,大公司的云平台太贵了真的用不起,如果你也想用易学智能的云平台的话可以点击我的推广链接,易学智能-GPU云|GPU资源租赁|技术培训|人工智能技术分享 - 易学开发平台|易学在线课堂|易学智能论坛,我的推广码是 4fINaqRVmpzokbEx,你点这个推广链接注册就直接送你10个币,能用一个GTX 1080Ti显卡跑俩小时,或者用GTX 1050Ti运行5个小时,足够你试用了,如果你充钱的话,每充100就送你10个币,当然我也能得到5个币,具体还是看你需求了,没需要就不用注册了,我也真不差这五个币。
接下来我会介绍如何获取到这个数据集,也会介绍如何把数据集中的数据变为我们的程序容易使用的数据形式,这篇博客就是个开胃菜,精彩的还在后面呢。
想要获取到数据集有很多方法,首先你可以去kaggle上获取,https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data,只要注册一个账号就能进行下载,但是我嫌麻烦,所以我不是这样下载的,我是通过别人分享的百度云链接下载的https://pan.baidu.com/s/1qaEnso8INU1it5TJvxphzg?pwd=r8si 。下载完数据你会发现这是一个csv文件,名字叫fer2013.csv,现在,我们需要把数据转化为程序比较方便利用的形式。首先,训练集,验证集和测试集要分开了。使用一下这段代码即可,路径什么的自己修改一下。处理结束后,我们就有了train.csv,val.csv和test.csv这三个文件,接着就是把这三个文件转化为图片,并且每个类型的图片需要在它自己的文件夹中。
# -*- coding: utf-8 -*-
import csv
import osdatabase_path = r'F:\Datasets\fer2013'
datasets_path = r'.\datasets'
csv_file = os.path.join(database_path, 'fer2013.csv')
train_csv = os.path.join(datasets_path, 'train.csv')
val_csv = os.path.join(datasets_path, 'val.csv')
test_csv = os.path.join(datasets_path, 'test.csv')with open(csv_file) as f:csvr = csv.reader(f)header = next(csvr)rows = [row for row in csvr]trn = [row[:-1] for row in rows if row[-1] == 'Training']csv.writer(open(train_csv, 'w+'), lineterminator='\n').writerows([header[:-1]] + trn)print(len(trn))val = [row[:-1] for row in rows if row[-1] == 'PublicTest']csv.writer(open(val_csv, 'w+'), lineterminator='\n').writerows([header[:-1]] + val)print(len(val))tst = [row[:-1] for row in rows if row[-1] == 'PrivateTest']csv.writer(open(test_csv, 'w+'), lineterminator='\n').writerows([header[:-1]] + tst)print(len(tst))
使用以下代码即可完成将这三个csv文件都转化为图片, 同样,路径什么的需要你自己改,这个我帮不了你。
# -*- coding: utf-8 -*-
import csv
import os
from PIL import Image
import numpy as npdatasets_path = r'.\datasets'
train_csv = os.path.join(datasets_path, 'train.csv')
val_csv = os.path.join(datasets_path, 'val.csv')
test_csv = os.path.join(datasets_path, 'test.csv')train_set = os.path.join(datasets_path, 'train')
val_set = os.path.join(datasets_path, 'val')
test_set = os.path.join(datasets_path, 'test')for save_path, csv_file in [(train_set, train_csv), (val_set, val_csv), (test_set, test_csv)]:if not os.path.exists(save_path):os.makedirs(save_path)num = 1with open(csv_file) as f:csvr = csv.reader(f)header = next(csvr)for i, (label, pixel) in enumerate(csvr):pixel = np.asarray([float(p) for p in pixel.split()]).reshape(48, 48)subfolder = os.path.join(save_path, label)if not os.path.exists(subfolder):os.makedirs(subfolder)im = Image.fromarray(pixel).convert('L')image_name = os.path.join(subfolder, '{:05d}.jpg'.format(i))print(image_name)im.save(image_name)
处理结束后我们又多了三个文件夹,分别叫train,val和test,每个文件夹中又有七个文件夹,分别为0-6,对应它的7个类别,一共有28709张训练图片。0对应anger,1对应disgust,2对应fear,3对应happy,4对应sad,5对应surprised,6对应normal。每个类别的训练数据量差别比较大,我做了一张柱状图作为对比。能够很明显地看出,类别1的disgust情绪数量只有436张训练图片,和其他类别相比真是少的可怜。我还做了一个模型对各情绪的预测精度对比柱状图。这两幅图一对比就能很明显地看出,某一情绪的预测精度和训练集中这个情绪的图片数量呈现正相关关系,最明显的还是disgust情绪,训练集中数据量最少,预测精度同时也是最低的,仅为0.33左右,所以当前首要的任务是把数据量搞均匀了,没有一个比较合理的训练数据是不可能得到一个性能良好的模型的,数据增强我会放在下一节详细讲述。这一节的内容就到这。
人脸表情识别 (1) 下载fer2013数据集和数据的处理相关推荐
- 人脸表情识别 实战项目
一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Time of completion:2022.12.12 La ...
- 人脸表情识别系统(VGG_16和Xception模型)配置GPU加速,Fer2013数据集和CK+数据集,tensorboard
编译器 python3.8 开发平台 Pycharm PyQT5 系统界面 (可视化开发工具designer ) 模型训练基于深度学习tensorflow框架 opencv haar cascade ...
- Fer2013 数据集人脸表情识别 详细代码
Fer2013 数据集人脸表情识别 详细代码 本文将从数据集.模型训练.模型实践应用(AI模型落地场景实际应用)几个部分完整讲解基于Fer2013 数据集的人脸表情识别项目, 最终项目实现效果: 通过 ...
- 数据科学竞赛-人脸表情识别
人脸表情识别 简介 这是科赛网曾今的一次计算机视觉类的分类赛,属于一个视觉基础任务.关于人脸表情识别,Kaggle等平台也举办过相关的比赛,难度并不算大,但是对技巧的要求比较高.本文详述该比赛的主要步 ...
- 深度学习项目-人脸表情识别
人脸表情识别 简介 使用卷积神经网络构建整个系统,在尝试了Gabor.LBP等传统人脸特征提取方式基础上,深度模型效果显著.在FER2013.JAFFE和CK+三个表情识别数据集上进行模型评估. 环境 ...
- 毕业设计-人脸表情识别系统、人工智能
人脸表情识别系统 1. 前言 在这个人工智能成为超级大热门的时代,人脸表情识别已成为其中的一项研究热点,而卷积神经网络.深度信念网络和多层感知器等相关算法在人脸面部表情识别领域的运用最为广泛.面部的表 ...
- 人脸表情识别和情绪分类 | Python+TensorFlow(框架)+Keras+PyQt5
人脸表情识别 | Python+Keras+PyQt5 参考学习文章: Keras|基于深度学习的人脸表情识别系统 PyQt5+QtDesigner编写摄像头界面程序(一)--pyqt5.qtdesi ...
- 人脸表情识别系统介绍——上篇(python实现,含UI界面及完整代码)
人脸表情识别介绍与演示视频 博客及代码详细介绍:https://www.bilibili.com/video/BV18C4y1H7mH/(欢迎关注博主B站视频) 摘要:这篇博文介绍基于深度卷积神经网络 ...
- 一文掌握基于深度学习的人脸表情识别开发(基于PaddlePaddle)
目录 一.概述 1.1 表情分类 1.2 表情识别方法 1.2.1 人工特征方法 1.2.2 神经网络方法 1.3 本文实现 二.环境准备 2.1 安装PaddlePaddle 2.2 安装Paddl ...
最新文章
- 非计算机专业毕业论文用游戏,计算机专业大学生毕业论文
- 成为顶级CIO ,应该怎么做?
- Oracle 定时器
- 微信公众平台如何启用开发模式
- java配置文件放置到jar外_java相关:Spring Boot 把配置文件和日志文件放到jar外部...
- 会议交流 | CAAI BDSC2021大会专题七:社会计算与开放知识图谱
- java读取文件指定位置_java从文件指定位置开始读取文件流
- [转载] 消息中间件学习总结(8)——RocketMQ之RocketMQ捐赠给Apache那些鲜为人知的故事
- 二层交换机的安全方案与实施
- msvcr80.dll 问题
- vue音乐播放器笔记
- Windows Core Audio APIs(一)介绍
- Android获取手机序列号
- C/java 实现爱心
- G1D17-研究方向rce45-49不快乐就去敲敲代码
- long long类型上限_32位long最大值
- Navicat Premium 15 完全卸载
- SpringBoot 定时器的三种方式
- [HNOI2010] 平面图判定
- android一些入门基础信息了解(2015年5月18日)