毕业设计 深度学习人脸性别年龄识别系统(源码+论文)

发布时间:2026/5/22 11:39:14

毕业设计 深度学习人脸性别年龄识别系统(源码+论文) 文章目录0 前言1 项目运行效果1 项目课题介绍2 关键技术2.1 卷积神经网络2.2 卷积层2.3 池化层2.4 激活函数2.5 全连接层3 使用tensorflow中keras模块实现卷积神经网络3.1 Keras介绍Keras深度学习模型Keras中重要的预定义对象Keras的网络层构造3.2 数据集处理训练分为年龄、性别性别分为两类性别训练代码年龄分为七个年龄段年龄训练代码3.3 模型验证预测实现效果4 最后0 前言这两年开始毕业设计和毕业答辩的要求和难度不断提升传统的毕设题目缺少创新和亮点往往达不到毕业答辩的要求这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。并且很难找到完整的毕设参考学习资料。为了大家能够顺利以及最少的精力通过毕设学长分享优质毕业设计项目提供大家参考学习今天要分享的是毕业设计 深度学习人脸性别年龄识别系统源码论文学长这里给一个题目综合评分(每项满分5分)难度系数3分工作量3分创新点4分 项目分享:见主页简介1 项目运行效果视频效果毕业设计 深度学习人脸性别年龄识别系统1 项目课题介绍年龄和性别作为人重要的生物特征, 可以应用于多种场景, 如基于年龄的人机交互系统、电子商务中个性营销、刑事案件侦察中的年龄过滤等。然而基于图像的年龄分类和性别检测在真实场景下受很多因素影响, 如后天的生活工作环境等, 并且人脸图像中的复杂光线环境、姿态、表情以及图片本身的质量等因素都会给识别造成困难。学长这次设计的项目 基于深度学习卷积神经网络利用Tensorflow和Keras等工具实现图像年龄和性别检测。2 关键技术2.1 卷积神经网络受到人类大脑神经突触结构相互连接的模式启发神经网络作为人工智能领域的重要组成部分通过分布式的方法处理信息可以解决复杂的非线性问题从构造方面来看主要包括输入层、隐藏层、输出层三大组成结构。每一个节点被称为一个神经元存在着对应的权重参数部分神经元存在偏置当输入数据进入后对于经过的神经元都会进行类似于yw*xb的线性函数的计算其中为该位置神经元的权值b则为偏置函数。通过每一层神经元的逻辑运算将结果输入至最后一层的激活函数最后得到输出output。2.2 卷积层卷积核相当于一个滑动窗口示意图中x大小的卷积核依次划过x大小的输入数据中的对应区域并与卷积核滑过区域做矩阵点乘将所得结果依次填入对应位置即可得到右侧x尺寸的卷积特征图例如划到右上角x所圈区域时将进行xxxxxxxxxx的计算操作并将得到的数值填充到卷积特征的右上角。2.3 池化层池化操作又称为降采样提取网络主要特征可以在达到空间不变性的效果同时有效地减少网络参数因而简化网络计算复杂度防止过拟合现象的出现。在实际操作中经常使用最大池化或平均池化两种方式如下图所示。虽然池化操作可以有效的降低参数数量但过度池化也会导致一些图片细节的丢失因此在搭建网络时要根据实际情况来调整池化操作。2.4 激活函数激活函数大致分为两种在卷积神经网络的发展前期使用较为传统的饱和激活函数主要包括sigmoid函数、tanh函数等随着神经网络的发展研宄者们发现了饱和激活函数的弱点并针对其存在的潜在问题研宄了非饱和激活函数其主要含有ReLU函数及其函数变体2.5 全连接层在整个网络结构中起到“分类器”的作用经过前面卷积层、池化层、激活函数层之后网络己经对输入图片的原始数据进行特征提取并将其映射到隐藏特征空间全连接层将负责将学习到的特征从隐藏特征空间映射到样本标记空间一般包括提取到的特征在图片上的位置信息以及特征所属类别概率等。将隐藏特征空间的信息具象化也是图像处理当中的重要一环。3 使用tensorflow中keras模块实现卷积神经网络这里使用一个简单的demo作为原理讲解实际工程要比demo复杂classCNN(tf.keras.Model):def__init__(self):super().__init__()self.conv1tf.keras.layers.Conv2D(filters32,# 卷积层神经元卷积核数目kernel_size[5,5],# 感受野大小paddingsame,# padding策略vaild 或 sameactivationtf.nn.relu# 激活函数)self.pool1tf.keras.layers.MaxPool2D(pool_size[2,2],strides2)self.conv2tf.keras.layers.Conv2D(filters64,kernel_size[5,5],paddingsame,activationtf.nn.relu)self.pool2tf.keras.layers.MaxPool2D(pool_size[2,2],strides2)self.flattentf.keras.layers.Reshape(target_shape(7*7*64,))self.dense1tf.keras.layers.Dense(units1024,activationtf.nn.relu)self.dense2tf.keras.layers.Dense(units10)defcall(self,inputs):xself.conv1(inputs)# [batch_size, 28, 28, 32]xself.pool1(x)# [batch_size, 14, 14, 32]xself.conv2(x)# [batch_size, 14, 14, 64]xself.pool2(x)# [batch_size, 7, 7, 64]xself.flatten(x)# [batch_size, 7 * 7 * 64]xself.dense1(x)# [batch_size, 1024]xself.dense2(x)# [batch_size, 10]outputtf.nn.softmax(x)returnoutput3.1 Keras介绍keras是一个专门用于深度学习的开发软件。它的编程语言采用的为现在最流行的python语言集成封装了CNTKTensorflow或者Theano深度学习框架为计算机后台进行深度建模具有易于学习高效编程的功能数据的运算处理支持GPU和CPU真正实现了二者的无缝切换。正是keras有如此特殊功能所以它的优点有如下几个方面Keras深度学习模型Keras深度学习模型可以分为两种一种是序列模型一种是通用模型。它们的区别在于其拥有不同的网络拓扑结构。序列模型是通用模型的一个范例通常情况下应用比较广。每层之间的连接方式都是线性的且在相邻的两层之间可以添加任意可用元素构建神经网络。通用模型是为了适用于复杂模型而设计的所以常用于复杂的神经网络中。在使用过程中应用接口模型的要素和结构通常需要用函数化来定义。其定义的大致过程首先是输入层的定义然后是其他各层及要素的定义最后到输出层并将这个定义过程作为一个模型进行运行和调试。Keras中重要的预定义对象Keras预定义了很多对象目的就是构造其网络结构正是有了这么多的预定义对象才让Keras使用起来非常方便易用。研究中用的最多要数正则化、激活函数及初始化对象了。正则化是在建模时防止过度拟合的最常用且效果最有效的手段之一。在神经网络中采用的手段有权重参数、偏置项以及激活函数其分别对应的代码是kernel_regularizier、bias_regularizier以及activity_regularizier。激活函数在网络定义中的选取十分重要。为了方便Keras预定义了丰富的激活函数以此是适应不同的网络结构。使用激活对象的方式有两种一个是单独定义一个激活函数层二是通利用前置层的激活选项定义激活函数。初始化对象是随机给定网络层激活函数kernel_initializer or bias_initializer的开始值。权重初始化值好与坏直接影响模型的训练时间的长短。Keras的网络层构造在Keras框架中不同的网络层(Layer)定义了神经网络的具体结构。在实际网络构建中常见的用Core Layer、Convolution Layer、Pooling Layer、Emberdding Layer等。3.2 数据集处理训练该项目将采集的照片分为男女两个性别‘0-9’, ‘10-19’, ‘20-29’, ‘30-39’, ‘40-49’, ‘50-59’, ‘60’七个年龄段分别把性别和年龄段的图片分别提取出来并保存到性别和年龄段两个文件夹下构造如下图分为年龄、性别性别分为两类性别训练代码# ----------------------------------------------------------------------------------------------------------------------# 导入一些第三方包# ----------------------------------------------------------------------------------------------------------------------importtensorflowastffromnetsimportnet EPOCHS40BATCH_SIZE32image_height128image_width128model_dir./models/age.h5train_dir./data/age/train/test_dir./data/age/test/defget_datasets():train_datagentf.keras.preprocessing.image.ImageDataGenerator(rescale1.0/255.0)train_generatortrain_datagen.flow_from_directory(train_dir,target_size(image_height,image_width),color_modergb,batch_sizeBATCH_SIZE,shuffleTrue,class_modecategorical)test_datagentf.keras.preprocessing.image.ImageDataGenerator(rescale1.0/255.0)test_generatortest_datagen.flow_from_directory(test_dir,target_size(image_height,image_width),color_modergb,batch_sizeBATCH_SIZE,shuffleTrue,class_modecategorical)train_numtrain_generator.samples test_numtest_generator.samplesreturntrain_generator,test_generator,train_num,test_num# ----------------------------------------------------------------------------------------------------------------------# 网络的初始化 --- net.CNN(num_classes7)# model.compile --- 对神经网络训练参数是设置 --- tf.keras.losses.categorical_crossentropy --- 损失函数交叉熵# tf.keras.optimizers.Adam(learning_rate0.001) --- 优化器的选择以及学习率的设置# metrics[accuracy] --- List of metrics to be evaluated by the model during training and testing# return model --- 返回初始化之后的模型# ----------------------------------------------------------------------------------------------------------------------defget_model():modelnet.CNN(num_classes7)model.compile(losstf.keras.losses.categorical_crossentropy,optimizertf.keras.optimizers.Adam(lr0.001),metrics[accuracy])returnmodelif__name____main__:train_generator,test_generator,train_num,test_numget_datasets()modelget_model()model.summary()tensorboardtf.keras.callbacks.TensorBoard(log_dir./log/age/)callback_list[tensorboard]model.fit_generator(train_generator,epochsEPOCHS,steps_per_epochtrain_num//BATCH_SIZE,validation_datatest_generator,validation_stepstest_num//BATCH_SIZE,callbackscallback_list)model.save(model_dir)# ----------------------------------------------------------------------------------------------------------------------年龄分为七个年龄段年龄训练代码# ----------------------------------------------------------------------------------------------------------------------# 导入一些第三方包# ----------------------------------------------------------------------------------------------------------------------importtensorflowastffromnetsimportnet EPOCHS20BATCH_SIZE32image_height128image_width128model_dir./models/gender.h5train_dir./data/gender/train/test_dir./data/gender/test/defget_datasets():train_datagentf.keras.preprocessing.image.ImageDataGenerator(rescale1.0/255.0)train_generatortrain_datagen.flow_from_directory(train_dir,target_size(image_height,image_width),color_modergb,batch_sizeBATCH_SIZE,shuffleTrue,class_modecategorical)test_datagentf.keras.preprocessing.image.ImageDataGenerator(rescale1.0/255.0)test_generatortest_datagen.flow_from_directory(test_dir,target_size(image_height,image_width),color_modergb,batch_sizeBATCH_SIZE,shuffleTrue,class_modecategorical)train_numtrain_generator.samples test_numtest_generator.samplesreturntrain_generator,test_generator,train_num,test_numdefget_model():modelnet.CNN(num_classes2)model.compile(losstf.keras.losses.categorical_crossentropy,optimizertf.keras.optimizers.Adam(lr0.001),metrics[accuracy])returnmodelif__name____main__:train_generator,test_generator,train_num,test_numget_datasets()modelget_model()model.summary()tensorboardtf.keras.callbacks.TensorBoard(log_dir./log/gender/)callback_list[tensorboard]model.fit_generator(train_generator,epochsEPOCHS,steps_per_epochtrain_num//BATCH_SIZE,validation_datatest_generator,validation_stepstest_num//BATCH_SIZE,callbackscallback_list)model.save(model_dir)# ----------------------------------------------------------------------------------------------------------------------3.3 模型验证预测实现效果篇幅有限更多详细设计见设计论文4 最后项目包含内容完整详细设计论文 项目分享:见主页简介

相关新闻