人脸表情识别 (3) 环境配置+模型训练代码

近来大家对这个项目比较关注,也有好些人催我继续更新这个系列,因为博主前段时间一直在准备推免的事情,后来也一直在刷题,所以真的没有时间写,现在趁着这个暑假的小尾巴,更新一波,能写到哪里也不一定,但是我会确保每一步都不会让你走弯路的,也谢谢大家的支持喽。

上一篇写到数据增强,数据增强应该算是数据预处理的一部分,而数据预处理对于模型的训练的重要性,相必大家也都清楚,从我自己的经验来说,进行完数据增强之后可以提高比较大的识别率,特别是那些训练样本数量较少的类别,提升更加明显。做好数据增强,就可以训练模型了,当然前提是已经配置好了运行的环境。

配置这个运行的环境真的不容易,最好是装双系统或者就在Ubuntu系统上运行,千万千万别想用虚拟机,太慢了,我给大家列一个环境的清单吧,大家自己配置一下,或者可以使用我在这个系列第一篇文章中推荐的易学智能GPU云平台,能省很多事,也不算太贵,看需求啦。

如果自己配置的话,清单如下:

安装Ubuntu16.04系统(建议双系统,教程我的博客也有,当然看别人的也行)

在Ubuntu16.04系统上安装python3.6.5环境(好像可以通过安装anaconda3安装?我有点忘了,见谅)

安装tensorflow框架,keras框架,CUDA框架,显卡驱动,opencv框架等等,版本千万要注意!我也不好直接给出版本,因为这个和你本机的硬件有关,尤其这个CUDA框架,用于调用GPU进行并行计算的,如果没有使用GPU进行计算,那效率真的会低得可怜的。

博主我配置这个环境配了两天左右呢,大家也要多点耐心呀,哈哈哈哈哈哈。

别希望能使用CPU跑!你等不到结果出来的那一天的。为了说服各位,我特意试了试在windows下的效率,每个epoch四分多钟,要训练40个epoch,具体多久我就不去算了哈。

代码如下:

from keras.preprocessing import image
import keras
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import BatchNormalization
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import regularizers
import matplotlib.pyplot as plt
import os,shutil
from matplotlib import pyplot as plt
from keras.models import load_model
import numpy as np

train_dir=r'E:\BaiduNetdiskDownload\fer2013\fer2013_dataAug\train'
val_dir=r'E:\BaiduNetdiskDownload\fer2013\fer2013_dataAug\val'
test_dir=r'E:\BaiduNetdiskDownload\fer2013\fer2013_dataAug\test'

train_datagen=ImageDataGenerator()
test_datagen=ImageDataGenerator()

train_generator=train_datagen.flow_from_directory(
    train_dir,
    target_size=(48,48),
    batch_size=128,
    class_mode='categorical'
)
validation_generator=test_datagen.flow_from_directory(
    val_dir,
    target_size=(48,48),
    batch_size=128,
    class_mode='categorical'
)

test_generator=test_datagen.flow_from_directory(
    test_dir,
    target_size=(48,48),
    batch_size=128,
    class_mode='categorical'
)

#kernel_regularizer=regularizers.l2(0.01),
model = Sequential()
model.add(Conv2D(64, kernel_size=(5, 5), strides=(1, 1),
                 activation='relu',
                 padding='same',input_shape=(48,48,3)))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(BatchNormalization())
model.add(Dropout(0.4))
model.add(Conv2D(128, kernel_size=(5, 5), strides=(1, 1),
                 activation='relu',
                 padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(BatchNormalization())
model.add(Dropout(0.4))
model.add(Conv2D(256, kernel_size=(5, 5), strides=(1, 1),
                 padding='same',
                 activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2),strides=(2,2)))
model.add(Flatten())
model.add(Dropout(0.3))
model.add(Dense(2048, activation='relu'))
model.add(Dropout(0.4))
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.4))
model.add(Dense(512, activation='relu'))
model.add(Dense(7, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.rmsprop(lr=0.0001),  #need to train a lot of epochs
              metrics=['accuracy'])

history=model.fit_generator(
    train_generator,
    steps_per_epoch=650,
    epochs=40,
    validation_data=validation_generator,
    validation_steps=32
)

model.save('myModel_DataGenerator_myfile_Three.h5')

acc=history.history['acc']
val_acc=history.history['val_acc']
loss=history.history['loss']
val_loss=history.history['val_loss']

epochs=range(1,len(acc)+1)
plt.figure("acc")
plt.plot(epochs,acc,'r-',label='Training acc')
plt.plot(epochs,val_acc,'b',label='validation acc')
plt.title('The comparision of train_acc and val_acc')
plt.legend()
plt.show()

plt.figure("loss")
plt.plot(epochs,loss,'r-',label='Training loss')
plt.plot(epochs,val_loss,'b',label='validation loss')
plt.title('The comparision of train_loss and val_loss')
plt.legend()
plt.show()

 

train_dir,val_dir,test_dir分别是数据增强后的训练集合数据,验证集数据和测试集数据的文件路径,数据都应该为图片,验证集数据和测试集数据无需数据增强。这个数据集合我有处理完的版本,直接可以拿来使用,有需要的留下邮箱我看到消息会给你发送资源的,请注意查收。压缩包长这样,解压后里边三个文件夹,意思应该也不需要我多解释,train文件夹,val文件夹,test文件夹里边都是有七个子文件夹,按照序号0-6顺序分类,代码会根据图片所属的文件夹自动判定类别的,是keras框架所提供的功能,大家不用深入研究。

训练完模型会对模型进行绘制一个学习曲线和损失函数曲线,同时还会利用keras框架,对当前训练好的模型进行保存,所使用的语句为model.save('myModel_DataGenerator_myfile_Three.h5'),默认在当前脚本的文件夹下,保存好的模型可以在下次使用的时候直接调用,无需再次训练。

 

 

 

  • 19
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 45
    评论
### 回答1: 实时人脸表情识别是一种基于人工智能和计算机视觉的技术,结合Python编程语言进行毕业设计的主题。该项目旨在实现对人脸表情的实时识别和分类,通过分析和判断人脸表情的变化,进而实现情感识别和情感分析。 首先,为了实现实时人脸表情识别,我们需要采集一组包含不同表情的人脸图像数据集。此数据集可以通过网络资源、开源数据集或自己采集得到。接下来,我们使用Python中的图像处理库OpenCV来获取实时视频流,并使用面部检测算法定位和提取视频流中的人脸。 然后,我们需要使用深度学习方法来训练一个人脸表情分类器。可以使用所采集到的人脸图像数据集,使用Python中的深度学习框架如TensorFlow或PyTorch来构建一个卷积神经网络(CNN模型。该模型将接受人脸图像作为输入,经过多个卷积层和池化层进行特征提取,并使用全连接层进行分类预测。 在训练好的模型基础上,我们可以将其应用于实时人脸表情识别。通过将每一帧的人脸图像传入该模型,可以获取到实时的人脸表情分类结果。可以根据分类结果,判断人脸表情是开心、生气、惊讶等不同的情绪。 最后,为了更好地展示实时人脸表情识别的效果,我们可以将识别结果通过图像或视频的方式展示出来,比如将分类结果添加在人脸图像上方,或者在视频中不同表情时变换特定符号或贴图。 总结来说,实时人脸表情识别的毕业设计将采用Python编程语言,结合图像处理库和深度学习框架,通过建立和训练卷积神经网络模型,实现对实时人脸表情的识别和分类,并将识别结果进行展示。该项目对于理解和实践人工智能、计算机视觉和深度学习等相关领域的知识具有重要意义。 ### 回答2: 实时人脸表情识别是一种使用计算机视觉技术来检测和识别人脸表情的方法。而使用Python语言进行实时人脸表情识别的毕业设计,可以通过以下步骤来完成: 1. 数据集准备:首先需要准备一个包含多种表情的人脸图像数据集。可以使用公开的人脸表情数据集,如FER2013、CK+等,或者自己构建数据集。 2. 数据预处理:对数据集进行预处理,包括将图像进行裁剪和缩放,使其符合模型输入的要求。还可以使用数据增强技术来扩充数据集,以提高模型的泛化能力。 3. 特征提取:利用深度学习模型,如卷积神经网络(CNN),来提取人脸图像的特征。可以使用已经预训练好的CNN模型,如VGGNet、ResNet等,也可以根据具体需求自己搭建模型。 4. 模型训练:使用提取到的特征作为输入,利用训练集进行模型训练。可以使用Python的深度学习库,如TensorflowKeras等,来搭建和训练模型。在训练过程中,可以使用交叉验证等技术来评估模型的性能。 5. 模型验证:使用测试集对训练好的模型进行验证,评估其在实时人脸表情识别任务上的性能。可以计算模型的准确率、召回率等评价指标,或者通过混淆矩阵来分析不同表情类别的识别结果。 6. 实时表情识别:将训练好的模型应用到实时视频流中,进行人脸表情的实时识别。可以使用Python的图像处理和视频处理库来实现这一步骤,如OpenCV、Dlib等。通过实时检测人脸区域,并对每个人脸区域进行表情分类。 7. 界面设计和优化:将实时人脸表情识别算法与用户界面结合,可以使用Python的GUI库,如Tkinter等,设计一个友好的界面,使用户可以方便地进行实时人脸表情的测试和观察。 通过以上步骤的实现,我们可以完成一个基于Python的实时人脸表情识别系统。该系统可以用于情感分析、人机交互等领域,具有一定的实际应用价值。 ### 回答3: 实时人脸表情识别是一种通过使用Python编程语言开发的技术,用于实时检测和识别人脸表情。它可以分析人脸上的特征,并根据这些特征识别出人脸表情的种类,例如开心、悲伤、惊讶等。 实时人脸表情识别的毕业设计主要包括以下几个步骤: 1. 数据集准备:首先,需要准备一份包含人脸表情样本的数据集。可以通过收集照片、视频或者使用现有的数据集来构建。 2. 数据预处理:对数据进行预处理是非常重要的一步。可以使用Python图像处理库如OpenCV对图像进行裁剪、缩放和灰度化等处理,以提升后续的算法准确度。 3. 特征提取:接下来,使用Python中常用的机器学习库,如Scikit-learn或Tensorflow等,进行特征提取。可以使用基于人脸的特征提取算法,例如局部二值模式(Local Binary Patterns,LBP)或主成分分析(Principal Component Analysis,PCA),来提取人脸表情的特征。 4. 训练模型:使用已经提取的特征,建立分类器模型。可以使用各种机器学习算法,例如支持向量机(Support Vector Machine,SVM)或卷积神经网络(Convolutional Neural Network,CNN),对数据集进行训练,以使模型能够准确地识别人脸表情。 5. 实时检测和识别:最后,使用摄像头采集实时视频流,并对每一帧图像进行处理和分析,以实现人脸表情的实时检测和识别。可以使用Python库如Dlib或OpenCV中的人脸检测器和分类器,对视频流中的人脸进行定位和分类。 总结来说,实时人脸表情识别的毕业设计将通过预处理、特征提取、模型训练和实时检测等步骤,利用Python编程语言实现对人脸表情的实时检测和识别。这项技术可以应用于许多领域,例如情感分析、人机交互等,具有广泛的应用前景。
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值