【DL项目】基于卷积神经网络实现人脸表情识别

xiaoxiao2021-02-28  40

更新时间:2018-07-05

前言

项目是好久之前做的,现在可能类似的demo也有很多了,已知忘记发博客和上传GitHub了,刚传上去,地址:https://github.com/roguesir/DL-ML-project/tree/master/Expression-Recognition

结构设计

采用fer2013人脸表情数据集,使用裁剪和旋转变换进行数据增强,处理后的数据量达到105000张,大小为48x48的黑白图片。 基本结构如下:

训练结果

模型准确率(%)model-basic90.11model-899.27model-1399.80model-13-conv99.86

部分代码

# -*- coding: utf-8 -*- from keras.models import Sequential from keras.layers.core import Dense, Dropout, Flatten, Activation from keras.layers.convolutional import Conv2D, MaxPooling2D from keras.preprocessing.image import load_img, img_to_array from keras.utils import np_utils import os import numpy as np def load_dataset(filedir): """ 读取数据 :param filedir: :return: """ image_data_list = [] label = [] train_image_list = os.listdir(filedir + '/train_data') for img in train_image_list: url = os.path.join(filedir + '/train_data/' + img) image = load_img(url, grayscale=True, target_size=(48, 48)) #print(image.shape) image_data_list.append(img_to_array(image)) label.append(img.split('.')[0].split("-")[1]) img_data = np.array(image_data_list) img_data = img_data.astype('float32') img_data /= 255 return img_data, label def make_network(): model = Sequential() model.add(Conv2D(32, (3, 3), padding='same', input_shape=(48, 48, 1))) model.add(Activation('relu')) model.add(Conv2D(32, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.5)) model.add(Flatten()) model.add(Dense(128)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(7)) model.add(Activation('softmax')) model.save('./data/model/model-basic.h5') return model if __name__ == '__main__': train_loss = [] train_accuracy = [] train_x, train_y = load_dataset('data') train_y = np_utils.to_categorical(train_y) model = make_network() model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy']) model.fit(train_x, train_y, batch_size=500, epochs=200, verbose=1)
转载请注明原文地址: https://www.6miu.com/read-2596164.html

最新回复(0)