第一步:准备数据
fer2013公开数据,原数据有七种表情,即表情("angry", "disgust", "scared", "happy", "sad", "surprised", "neutral")做为训练和识别
第二步:搭建模型
本文选择XCEPTION,为了兼顾速度,在实际应用的时候,对网络进行剪纸,具体可以参考代码,其网络结构如下:
由于是七分类问题,直接套用网络肯定是不行,因此会在全连接部分做手脚,参考代码如下:
x = Conv2D(num_classes, (3, 3),
#kernel_regularizer=regularization,
padding='same')(x)
x = GlobalAveragePooling2D()(x)
output = Activation('softmax',name='predictions')(x)
model = Model(img_input, output)
return model
另外,本文也结合通道注意力机制进行对比,参考代码如下:
def se_block(input_feature, ratio=8):
channel_axis = 1 if K.image_data_format() == "channels_first" else -1
channel = input_feature._keras_shape[channel_axis]
se_feature = GlobalAveragePooling2D()(input_feature)
se_feature = Reshape((1, 1, channel))(se_feature) # 第一步:压缩(Squeeze), reshape成1✖️1✖️C
# assert se_feature._keras_shape[1:] == (1,1,channel)
# 第二步:激励(Excitation),
# 由两个全连接层组成,其中SERatio是一个缩放参数,这个参数的目的是为了减少通道个数从而降低计算量。
# 第一个全连接层有(C/radio)个神经元,输入为1×1×C,输出1×1×(C/radio)。
# 第二个全连接层有C个神经元,输入为1×1×(C/radio),输出为1×1×C。
se_feature = Dense(channel // ratio,
activation='relu',
kernel_initializer='he_normal',
use_bias=True,
bias_initializer='zeros')(se_feature)
# assert se_feature._keras_shape[1:] == (1, 1, channel // ratio)
se_feature = Dense(channel,
activation='sigmoid',
kernel_initializer='he_normal',
use_bias=True,
bias_initializer='zeros')(se_feature)
# assert se_feature._keras_shape[1:] == (1, 1, channel)
"""
# 因为keras默认为channels_last,没修改不需要加这段
if K.image_data_format() == 'channels_first':
se_feature = Permute((3, 1, 2))(se_feature)
"""
se_feature = multiply([input_feature, se_feature])
return se_feature
第三步:训练代码
1)损失函数为:交叉熵损失函数
2)从头训练代码:
# 构建模型
#model = mini_XCEPTION(input_shape, num_classes)
model = mini_XCEPTION_SE(input_shape, num_classes)
model.compile(optimizer='adam', # 优化器采用adam
loss='categorical_crossentropy', # 多分类的对数损失函数
metrics=['accuracy'])
model.summary()
第四步:统计训练过程
第五步:搭建GUI界面
第六步:整个工程的内容
有训练代码和训练好的模型以及训练过程,提供数据,提供GUI界面代码,主要使用方法可以参考里面的“文档说明_必看.docx”
代码的下载路径(新窗口打开链接):基于keras框架深度学习的七种表情识别系统源码(结合注意力机制模块)
视频演示:
基于keras框架深度学习神经网络七种表情识别系统源码(结合注意力机制模块)_哔哩哔哩_bilibili
有问题可以私信或者留言,有问必答