跟着别人的博客跑了遍流程,准确率0.61,不算很好,但是也是大概跑个流程,感觉开心的表情识别较好,感觉调参这块还是得自己多实践。
数据集
采用的数据集是fer2013人脸表情数据集。fer2013,即Kaggle facial expression recognition challenge dataset,是目前较大的人脸表情识别公开数据库。
该数据库共包含35887张人脸图片,其中训练集28709张、验证集3589张、测试集3589张。数据库中的图片均为灰度图片,大小为48*48像素,样本被分为0=anger(生气)、1=disgust(厌恶)、2=fear(恐惧)、3=happy(开心)、4=sad(伤心)、5=surprised(惊讶)、6=normal(中性)七类,各种类型分布基本均匀。
数据分布(训练集):angry:3995 、disgust:436 、fear:4097 、happy:7215 、sad:4830 、surprise:3171 、normal:4965
下载数据集:https://pan.baidu.com/s/1i6p40jb
1)准备labels.txt文件,表示分类序号于分类对应关系
在data目录下创建一个空白文档,取名为labels.txt,并输入下面内容:
2)准备train.txt,标明训练图片路径及其对应分类,路径和分类序号直接用空格分隔1
2
3
4
5
6
7ls train/0 | sed "s:^:0/:" | sed "s:$: 0:" >> train.txt
ls train/1 | sed "s:^:1/:" | sed "s:$: 1:" >> train.txt
ls train/2 | sed "s:^:2/:" | sed "s:$: 2:" >> train.txt
ls train/3 | sed "s:^:3/:" | sed "s:$: 3:" >> train.txt
ls train/4 | sed "s:^:4/:" | sed "s:$: 4:" >> train.txt
ls train/5 | sed "s:^:5/:" | sed "s:$: 5:" >> train.txt
ls train/6 | sed "s:^:6/:" | sed "s:$: 6:" >> train.txt
3)准备val.txt,标明验证图片路径及其对应分类
1 | ls val/0 | sed "s:^:0/:" | sed "s:$: 0:" >> val.txt |
4)生成lmdb文件
5)计算均值文件
搭建网络结构
type:网络中每一层的类型。我们的网络首先是一个Data层,然后紧跟3个卷积层和3个池化层,最后是3个全连接层
kernel_size:卷积核的尺寸
kernel_num:卷积核的个数
stride:步长,即卷积核每次移动的长度
pad:扩充边缘,使得图像经过卷积之后得到的特征图象不会改变尺寸
output:经过该层处理后,输出结果的维度
dropout:减少过拟合
编写 train_val.prototxt
1 | name: "FacialNet" |
编写solver.prototxt
1 | net: "/home/dlnu/faceR/train_val.prototxt" |
训练
1 | caffe train --solver=~/faceR/solver.prototxt |
编写deploy.prototxt
1 | name: "FacialNet" |
编写python程序,测试模型
1 | #coding=utf-8 |
参考链接:
https://blog.csdn.net/pangyunsheng/article/details/79481447