基于深度学习的年龄预测
2023-03-22王乾琛
王乾琛
(江西理工大学 电气工程与自动化学院,江西 赣州 341000)
0 引 言
随着人工智能的飞速发展以及机器视觉的出现,通过处理生活中出现的各种图像,就能够完成对生物的识别以及对各类数据的采集;结合机器视觉和机器学习,通过处理人脸图片信息可以实现年龄的识别和预测。
由于机器学习存在误差问题,无法细致地学习数据深层次的具体特征。在1976年由马顿和萨尔乔首次提出深度学习一词,他们指出深度学习就是学者对于学习资料要更加偏向于意向性的领悟,是通过模仿人类的视觉神经网络系统,分层次地逐步对数据信息进行理解和学习;通过学习数据各个层次的特征加深对数据本身内容的理解,以便对于新的数据进行更为深入和全面的预测。
1987年由Alexander Waibel等提出了第一个卷积神经网络(TDNN),在之后的时间里卷积神经网络不断地发展成为深度学习的代表性模型之一,它在提取和识别图片特征方面有着显著的优势,因此基于深度学习中的卷积神经网络模型来实现年龄的识别与预测是现在的主流研究方向[1]。人类年龄预测的实现带来了很多的便利,它可以被应用于各类的人机交互系统,使得对个人身份的识别更加有效快捷,随之而来的年龄预测APP软件也会受到很多女性群体的喜爱。
1 深度学习相关理论
1.1 深度学习及其应用语言
深度学习作为机器学习的分支,是解决复杂问题的一个有效方法,它是通过人工神经网络的概念去完成给定的任务,而不是通过特定的规则去完成任务,所以不需要明确的编程,而正是这种模糊的控制却可以准确地完成任务,相较于传统的机器学习优势更加突出[2]。
深度学习领域主要使用的是Python语言,它具有三大特点:具有高效的高级数据结构,是面向对象的编程,是一种解释性语言。因此,Python语言有着很大的应用范围,它也因为有庞大的标准库,适用于各种源码,故也是深度学习所使用的最佳语言。
1.2 构建深度学习基本模型的方法
构建深度学习的基本模型一般分为以下五大步骤:(1)对于将要解决的问题进行抽象化的理解;(2)要着重挑选数据集,这里采用的数据集是开放数据集—飞浆AI studio中的名为archive(3)和train的两个数据集,这两个人脸年龄数据集较为小众,但多数人口为亚洲人,并且不同年龄阶段的人脸区分较为仔细和严格[3];(3)对数据集的预处理和特征值的提取;(4)对于模型的训练;(5)对于模型的评估。
2 卷积神经网络算法
2.1 卷积神经网络结构
卷积神经网络(CNN)通常包含以下四层:卷积层、线性整流层、池化层和全连接层。其中卷积层是卷积神经网络最为核心的部分,它主要完成对图像的特征提取;之后卷积层输出结果,通过线性整流层进行非线性映射;池化层负责降采样;最后全连接层将局部特征结合起来变成全局特征,用来计算每一类的得分,给出预测准确率[4]。
本次实验主要使用的卷积神经网络模型是由卷积层、最大池化层以及激活层相互协调配合实现的,具体结构如图1所示。
图1 卷积神经网络结构
首先输入将要卷积的图片对象,紧接着就进入输入层,然后开始尺度变换和比例缩放。在完成这些准备工作后就会进入卷积层,并加入激活函数;卷积结束后开始第一次池化,这里采用最大池化法,紧接着再进行一次卷积池化操作。通过反复的卷积、激活以及最大池化操作,能够完成对图片特征的真实、细致提取。之后通过Flatten层将多维输入一维化并进入全连接层,再通过Softmax函数完成对提取特征信息的0-1概率生成,就会出现最终的年龄预测准确率结果[5]。
2.2 卷积层与池化层功能
卷积神经网络(CNN)的核心在于卷积,卷积以不同的参数来描述不同的抽象程度,使之更接近于原始图像的特征抽象,它的具体公式如公式(1)所示。
一般来说,CNN模型在卷积层完成任务后就会进入池化层,池化层即为降采样,它会获得一个区域内的典型特征,这样做的目的是为输入进行抽象的描述,对特征进行降维,抽象的最大价值就是提取输入的显著特征而忽略细节特征[6]。对于池化层比较传统的两大池化法为最大值池化法和平均值池化法,其中最大值池化法的应用较为普遍,它能够有效地减小卷积层所带来的均值偏差,比较适应纹理特征;而平均池化法对于纹理、平滑和边缘的特征容易丢失,但却可以有效地避免噪声[7]。
3 年龄预测实验及结果分析
3.1 实验所需环境及库
Pycharm作为一款优秀的集成开发环境(IDE),它具有代码的自动补全功能,适宜新手学习和编写Python语言。而提起Pycharm就必须提起它所配套使用的Anaconda,Anaconda是开源的Python发行版本,它包含了Python180多个科学包[8]。因此,Pycharm与Anaconda的结合给Python语言创造了一个良好的编译环境。
本次实验共需五大软件包,分别为tensor flow、pyqt5、pillow、opencv-python以及 matplotlib,其中 pyqt5、pillow和opencv-python主要用于图像处理以及图形化界面的设计,matplotlib则是为了绘制图表做准备;而其中最为关键的就是tensor flow-gpu-2.3.0,它是一个强大的面向数据流的开源软件库,是许多深度学习框架中的一种,而深度学习框架是深度学习领域中一个非常大的库,它的里面涵盖了基础的网络,这样就在很大程度上方便了程序的编写,同时应用显卡来运行程序可以极大地提升程序的运行效率[9]。
3.2 实验过程及效果
本次实验过程主要分为四个步骤,首先是对人脸数据集进行划分,将人脸数据集“1-3”“4-6”“7-9”“10-12”“13-15”“16-18”“19-25”“26-35”“36-45”“46-55”“56-70”“71-”共12个年龄阶段,按照8:1:1比例分为训练集(train)、验证集(validate)、测试集(test)三部分。其次是对年龄预测模型进行训练,其中主要是对CNN模型进行训练,使其验证集成功率达到90%以上。对测试模型进行训练的同时生成热力图。最后是搭建年龄预测窗口,并产生效果图,具体如图2所示。
图2 19~25岁人脸图像预测效果
3.3 实验结果分析
对于实验结果,主要是看训练模型的准确率以及其是否能宽泛地应用于一切人脸图像的识别。训练模型的准确率主要经历了三个阶段,分别为CNN验证集准确率从20%到55%再到73%以及最后到93%。最终的实验结果热力图如图3所示。
图3 最终实验结果热力图
图3热力图的每一个小格都代表了一个准确率,横坐标代表预测的标签,纵坐标代表真实标签[10];颜色越深则代表它的准确率越高,因此通过大体的颜色分布可以看出,除19~25岁和26~35岁两个年龄阶段准确率较低外,其他年龄段都达到了90%及以上的准确率。这表明CNN模型对于图像特征差异性的依赖,若图像特征过于相似则无法准确识别,这也是对于人脸图像年龄进行分阶段划分的原因。
另外,对于CNN模型泛化能力的检测,通过使用不参与CNN模型训练的测试集(test)图片进行窗口预测,采用验证测试集的12个年龄阶段且每个阶段随机抽出五六张图片的方法,发现准确率仍然为90%左右,这就可以证实CNN模型有很好的泛化能力,不会出现过拟合现象。
4 结 语
本文主要论述了基于深度学习的年龄预测系统的设计,首先对年龄预测背景及现状进行研究,之后对深度学习模型进行构建和分析,对年龄识别问题进行抽象化的分析,这里主要是将其要识别的特征确定为人脸图像。接着就是对于人脸信息进行数据集的收集,再对其特征进行提取,这就要依靠对图片处理与识别有着优良性能的卷积神经网络(CNN),最后对模型进行训练和评估。
对于CNN模型的训练经历了三个阶段,在不断优化数据集以及调试模型程序的情况下最终实现了准确率从20%到55%再到73%以及最终到93%的效果。同时,通过对实验结果的分析可以发现,卷积核的数量增多确实会提高卷积层对特征提取的细致性,从而提高识别的准确率;但是,CNN模型也同样过于依赖卷积核对局部特征的过滤提取,这导致局部特征相似的人脸图片无法有较高的识别准确率;而CNN中的池化层则提高了模型的泛化能力,不至于出现过拟合现象,最终实现基于深度学习的较好的年龄预测效果。