情感计算——人脸表情识别CNN实现

表情识别CNN实现

目 录

  • 任务简介
  • 解决思路
  • 数据集介绍
  • 模型设计
  • 代码实现
  • 结果分析

任务简介

人脸表情识别(facialexpression recognition, FER)是计算机视觉领域中 图像分类 的一个应用场景,相较于目标检测、实例分割、行为识别、轨迹跟踪等难度较大的计算机视觉任务,图像分类只需要让计算机『看出』图片里的物体类别,更为基础但极为重要。表情是我们在日常交流中非常重要的表达方式之一,在无法获取说话人语气的情况下,表情就成为了理解语言含义不可或缺的一部分。FER是一门交叉学科,涉及到计算机视觉、人机交互、生理学、心理学、模式识别等研究领域。

解决思路

FER同样为图像分类任务的一种,考虑使用最简单的DNN网络,但要避免像素级别的学习,将学习的目标放在 特征级别 ,因此选择卷积神经网络(Convolution Neural Network),CNN 其实可以看作 DNN 的一种特殊形式。
它跟传统 DNN 标志性的区别在于两点,Convolution Kernel 以及 Pooling。

数据集介绍

  • 积极情绪 positive 3690个
  • 消极情绪 negative 3593个

网络公开数据集,下附示例


情感计算——人脸表情识别CNN实现_第1张图片


情感计算——人脸表情识别CNN实现_第2张图片


模型构建

卑微学生党选择使用 paddlepaddle 深度学习框架(为了白piao V100)

代码实现

'''
网络结构
原图输入为32*32尺寸
计算卷积后输出图尺寸的方法:
输入图片大小 W×W,Filter大小 F×F,步长 S,padding的像素数 P
于是 out_put = (W − F + 2P )/S+1

'''
class MyCNN(fluid.dygraph.Layer):
    def __init__(self):
        super(MyCNN, self).__init__()
        #Conv2D (in_channels, out_channels, kernel_size)
        self.conv1 = Conv2D(1, 6, 5)
        self.pool1 = Pool2D(pool_size=2, pool_type='max', pool_stride=2)
        self.conv2 = Conv2D(6, 16, 5)
        self.pool2 = Pool2D(pool_size=2, pool_type='max', pool_stride=2)

        self.conv3 = Conv2D(16, 120, 5)
        self.fc1 = Linear(120, 64, act='relu')
        self.fc2 = Linear(64, 2, act='softmax')

    def forward(self, input):
        x = self.conv1(input)
        x = self.pool1(x)
        x = self.conv2(x)
        x = self.pool2(x)
        x = self.conv3(x)
        x = fluid.layers.reshape(x, [x.shape[0], -1])
        x = self.fc1(x)
        y = self.fc2(x)
        return y
        
#训练参数配置
train_parameters = {
    "input_size": [1, 32, 32],                           #输入图片的shape
    "class_dim": -1,                                     #分类数
    "src_path":"data/data38279/face_data.zip",          #原始数据集路径
    "target_path":"data/dataset",        #要解压的路径
    "train_list_path": "./train_data.txt",              #train_data.txt路径
    "eval_list_path": "./val_data.txt",                  #eval_data.txt路径
    "label_dict":{},                                    #标签字典
    "readme_path": "data/readme.json",   #readme.json路径
    "num_epochs": 10,                                  #训练轮数 num_epochs=500时精度高
    "train_batch_size": [16,32,64,128],                     #训练时每个批次的大小
    "learning_strategy": {                              #优化函数相关的配置
        "lr": 0.0005                                    #超参数学习率
    } 
}

参考文档地址:

https://aistudio.baidu.com/aistudio/projectdetail/3245781

你可能感兴趣的:(cnn,计算机视觉,深度学习)