通过Python实现人工智能


By 团队成员——明二公子
#摘要
随着时代信息化,信息变的越来越重要。为了能更好地、更多地获取信息我们的人脸信息识别系统也孕育而生。我们首先通过爬虫获取所需图片,再对图片进行处理建立数据集,之后利用卷积神经网络(Convolutional Neural Networks, CNN)进行训练,展示环节也可通过摄像头实时判别。其准确率一般可达95%以上,对一些对人类来说难以分辨的样本,也有一定准确率。
关键词:信息、爬虫、卷积神经网络

#选题的目的及意义
人脸是比较方便识别和获取的信息。通过警方的人脸数据库我们可以知道一个人所有的相关信息。但是商业行为以及一些研究分析中没有这样的库,但我们仍需要在他人隐私不被侵犯以及合法的情况下和获取一些信息方便我们做判断。比如实体店生意下降,但商场人熙熙攘攘如何更有效率的辨别出我们的目标客户,更有针对的宣传,或那些人需要额外关注,比如老年人,或行径可疑的人。我们都希望能通过我们的项目提供技术基础。此外,次项目还可以帮助改进现有模型,如R Vera-Rodriguez[1]等人的研究中发现不同性别因素会影响现有人脸识别模型中如DCNNs的准确率。我们希望我们的研究在这方面也能有所贡献。

1#国内外研究现状
这个方向与思考并不是全新的方向,Ranjian等人在2017年以及提出了一个关于HyperFace的概念[2],用DCNNs提取图片人物和其他信息,包括地点、性别等。国内也有人做过相关工作如基于人脸性别判断的方法和年龄估计的研究方
法[3],实践方面刘尚旺等人在基于深层可分卷积神经网络(MTCNN)甚至探讨了实时的人脸表情和性别识别[4]。国内外研究都试图从图像甚至实时的图像上获取更多信息。当然以我们能力暂时还做不到这些深度,所以我们从系统的一小部分入手,先通过图像获取人物脸部然后再判断其性别。

2#实验设计
  • 2.1爬虫
为了自己建立数据集,首先需要获取图片,为了方便批量获取图片通过爬虫是最好的方法。我们选择爬取百度图片,搜索词为“男性/女性的脸部”,之后设置User—Agent,爬取图片,将图片分类保存至指定目录重命名,共爬取女性图5296张,男性图2022张。爬取过程中也设置了合理程序睡眠时间,错误输出保证用户友好性和维护的方便。
  • 2.2图片的处理
爬取的图片自然不能直接运用我们需要对其进行处理,在我们这一步工作中我们需要的人脸这一块来做训练因此我们先获取人脸。人脸获取我们用现有方法haarcascade_frontalface_alt.xml[5]这是个OpenCV训练好的正面人脸检测级联分类器,它对人脸的检测较为严格,光线,角度等都会影响它的工作,这么严格的检测可以帮助我们建立更好的数据集。此外此检测方法在灰度图下拥有更高的效率。所以这一步我们做的是将所有图片转化为灰度图,可通过cv2.cvtColour实现。将所有找到的脸再分别存到指定目录下,构成训练集。之后图像处理成128*128大小来为下一步训练做准备,标签只有两种男性和女性用0和1表示训练时看他们来自哪个文件夹即可。
  • 2.3卷积神经网络
卷积神经网络是Yann LeCun,Wei Zhang等人在1987年-1989年提出的概念。其特殊结构有:
卷积层(Convolutional layer),卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
线性整流层(Rectified Linear Units layer, ReLU layer),这一层神经的活性化函数(Activation function)使用线性整流(Rectified Linear Units, ReLU)f(x)=max(0,x)f(x)=max(0,x)。
池化层(Pooling layer),通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。
全连接层( Fully-Connected layer), 把所有局部特征结合变成全局特征,用来计算最后每一类的得分。
同样我们按照这个结构构造卷积神经网络输入为128*128大小的面部图片,进行2层卷积filter大小32。池化采用MaxPooling每一层最后调用函数Dropout()来防止过度拟合,最后接全连接层softMax作为激活函数,且每次打印模型概况,实现上sklearn库、keras库提供了许多现有函数,因此不过太过于深入了解其内部数学原理,也能实现。
下图为各层概述:


  • 2.4展示结果
首先是对图片进行识别,我们在训练过后,对准备好的测试样本进行测试,测试结果很好,识别成功率很高;我们还进行实时的图片处理工作,也就是用opencv库中的模块对系统的摄像头进行调用,实时采集人脸数据,进行处理识别。

3#实验环境
实验数据由我们自行收集处理,来源为百度图片和Wiki的数据集。
程序编写我们用Python实验,作为编写人工智能的主流语言其有方便、有较多现有资源的特点。Python为3.6版本。除默认库外我们用了urllib、re、socket用于爬虫。cv2、sklearn、keras用于深度学习。matplotlib.pyplot用于画图。
在Linux和Windows10系统均试验过,且成功。

5#运行结果、实验结论

经过25组450次的训练最终能在测试集上达到接近95%的准确率。样本输出如下图所示。

实验结论:本系统能完成对一人脸图判断其男女,且具有较高的准确率。

参考文献:
[1]Vera-Rodriguez, R., Blazquez, M., Morales, A., Gonzalez-Sosa, E., Neves, J.C. and Proenca, H., 2019. FaceGenderID: Exploiting Gender Information in DCNNs Face Recognition Systems. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshops (pp. 0-0).
[2]Ranjan, R., Patel, V. M., & Chellappa, R. (2017). Hyperface: A deep multi-task learning framework for face detection, landmark localization, pose estimation, and gender recognition. IEEE Transactions on Pattern Analysis and Machine Intelligence, 41(1), 121-135.
[3]方晟. 基于人脸特征的性别判断和年龄估计方法研究[D].浙江大学,2015.
[4]刘尚旺,刘承伟,张爱丽.基于深度可分卷积神经网络的实时人脸表情和性别识别[J/OL].计算机应用:1-8[2019-12-06].
[5]https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_alt.xml
By 团队成员——明二公子
本博客所有文章如无特别注明均为原创。作者:渊龙Sec团队复制或转载请以超链接形式注明转自 渊龙Sec安全团队博客
原文地址《通过Python实现人工智能
分享到:更多

相关推荐

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)