摘 要
随着科学技术的不断发展,深度学习已经在不同的领域为人类提供更好地服务。因此,本论文将科学技术与生活联系起来,实现基于深度学习的口红识别器。通过了解现阶段深度学习的研究现状,以及对卷积神经网络的分析,应用了目标检测算法作为本系统的核心算法,使用了Vue.js作为框架,结合MySQL数据库,实现了该系统的开发。
关键词: 口红识别;深度学习;目标检测;Vue.js
Abstract
Deep learning in different aspects to provide high-quality services for human beings, under the development of science and technology. Therefore, this thesis connects science and technology with life, and implements a lipstick recognizer based on deep learning. Application of target detection algorithm as the core algorithm of the system, and Vue.js is used as the framework. By understanding the current state of deep learning research and analysis of convolutional neural networks, combined with the MySQL database, the system is developed.
Key words: Lipstick recognition;Deep Learning;Target Detection;Vue.js
目 录
1.1 课题背景和意义 2
1.2 研究现状 3
1.2.1人工智能国内外研究情况 3
1.2.2深度学习研究现状 4
1.3章节安排 5
第二章 论文相关原理以及技术介绍 6
2.1 卷积神经网络 6
2.1.1卷积神经网络概述 6
2.1.2 卷积神经网络结构 6
2.1.3 轻量化卷积神经模型 11
2.3 系统核心模块原理 12
2.3.1人脸检测模块 13
2.3.2面部特征标记模块 17
2.3.3颜色对比 17
2.4 Face-api模型介绍 18
2.5MVVM框架开发模式 20
2.5.1前后端分离 20
2.5.2MVVM框架及其优势 20
2.6 Vue.js前端开发框架 21
2.7 后端技术 21
2.7.1 Node.js 21
2.7.2 Express框架 22
2.8 MySQL数据库 22
2.9 本章小结 22
第三章 系统需求分析与数据库设计 23
3.1系统需求概述 23
3.2功能需求分析 23
3.3数据库设计 25
3.3.1数据建模 25
3.3.2数据表结构 25
3.4本章小结 26
第四章 系统的设计与实现 27
4.1系统的总体设计 27
4.2系统功能模块设计与实现 27
4.3本章小结 31
第五章 系统测试 32
5.1测试流程 32
5.2测试用例 32
5.3测试小结 32
5.4本章小结 33
第六章 总结与展望 34
4.1总结 34
4.2展望 34
参 考 文 献 36
致 谢 37
第一章 绪论
1.1 课题背景和意义
人工智能是当今社会上的热话题与重点研究对象,国家更是出台了各种政策促进人工智能的发展。人工智能的目的是将机器“拟人化”,协助人类解决各项事宜。如今,人工智能应用于许多行业与领域当中,各类关于人工智能的研究也层出不穷,深度学习的提出更是让人工智能这个领域有了质的飞跃。在时代的大环境下,我们已然进入人工智能时代[1]。
在人工智能日新月异发展的同时,我国的经济也稳步提升,经济的良性发展促进消费水平的提升。在这个契机下,彩妆口红行业迎来了行业的春天。在口红需求提升的大环境下,口红也变成了送礼的最佳选择,但是,口红色号千千万,选对了牌子才成功了一半。在红色能被分为:姨妈红、梅子红、豆沙红等等的彩妆界,色号的分辨真的让人眼花缭乱。
因此,本课题结合了生活与科技,将人工智能与口红有机结合起来,使得人工智能进一步贴近人们的日常生活。
1.2 研究现状
1.2.1人工智能国内外研究情况
“人工智能”由John Mccarthy等人在一次研讨会上提出。简单来说,人工智能将过去只有人能做的事情交给计算机去做,这样的好处是提高效率,同时使得所做的事情误差更小。从1956年到现在60多年来,人工智能经历了几次起起伏伏。首先在人工智能被提出之后,由于对新兴学科的向往,许多国家投入资金对该学科进行研究,但事情的发展却不如人愿。在二十世纪七十年代初期,下棋程序无法战胜更高级别的冠军、机器翻译闹出笑话、机器无法证明数学函数等这一连串的失败,使得人工智能走向低谷。但科学家们没有气馁,而是对过去的主要技术和战略进行总结并做出改进,提出了新的发展重心和方向。由于有了新的重点,人工智能又迎来了新的发展期。在二十世纪八十年代交互问题与扩展问题又成为了人工智能的拦路虎,但顽强的人工智能学者们并没有被打倒,而是总结反思,为人工智能的发展提供了更多的方法。
自从人工智能兴起以来,世界各国都纷纷在“研究人工智能”这条道路上奔跑,许多欧美国家已然发展成为“人工智能强国”。我们国家对于人工智能的研究起步较晚,但也在不断地尝试和努力中,随着国家经济的发展,对人工智能的投入越大也越重视,从自动驾驶汽车到无人驾驶飞行器[2],并且在越来越多的领域投入研究人工智能,使得人工智能使得其发展与应用空间巨大,并且也越来越融入到日常生活中。人工智能[3]未来的前进方向也在各种研究中日渐明确。人工智能如同一颗璀璨的明星,在21世纪这个科技超高速发展的时代中闪耀着它的光芒,并且在时代的注明下继续加速前进。
1.2.2深度学习研究现状
在当今人工智能的领域中,不得不提的热门概念就是深度学习。它在2006年被Hinton等人提出,在2016年一则轰动科研界的事件使得深度学习风头一时无两,这个事件就是世界围棋冠军李世石被Google研发的下棋机器人AlphaGo打败。因此深度学习这一概念得到了重视,同时也迎来了研究的热潮。
人类是通过人脑不断学习事物的[4],深度学习正是利用了这一点,模拟人脑神经网络的构造,在计算机里建造出神经网络。我们如果将机器[5]比喻为一个人,那么深度学习便是这个机器的“脑子”,可以帮助计算机对输入的数据进行分析与学习,使得计算机有了类似于人类的学习能力。深度学习的算法是通过提取物体的特征,不断地认识物体,训练的数据对训练的结果有着一定的影响,一般大的训练数据会得到比小的训练数据更好的训练结果。
在21世纪这个互联网飞速发展、信息传播快速的大数据时代,有了数据作为依托,深度学习在图像识别、自然语言处理等方面都得到了很好地应用。随着对深度学习不断深入的研究[6],各种具有复杂层次结构与独特神经处理单元的神经网络不断出现,提高了训练的效率与结果。深度学习是人工智能的主要训练方式[7],随着深度学习研究的不断深入,人工智能技术也会得到很好的提升,使其更好地应用于生产生活中。本篇论文采用的神经网络是卷积神经网络,以下分别介绍这4种模型:
(1)AlexNet[8]
Alex Krizhevsky提出这个拥有5层卷积和3层全连接层的模型——AlexNet模型,使得神经网络的研究达到了一个不小的高潮。它的出现带来的提升是:①使用多个GPU并行训练网络使得训练时间减少并且提升了网络识别的准确率。②激活函数的改变降低了网络学习的难度,使得模型更容易得到有效的训练。③采用扩大数据集与dropout随机删除一定的神经元来缓解过度拟合的问题。
(2)VGGNet[9]
VGGNet模型是由牛津大学的视觉几何组提出。VGG的卷积层深度高达19层,主要增加了卷积神经网络中的深度。但VGG模型具体的卷积运算与AlexNet模型类似,因此被称为增强版的AlexNet。值得一提的是,VGG采用了小尺度的卷积核,降低了参数量,提高了计算速度。同时因为其内部结构比较简洁明了,容易迁徙,因此直到现在,VGG网络还经常被用来提出特征。
(3)GoogLeNet[10]
在卷积神经网络中,加深模型的深度、宽度与训练数据固然能使模型达到更好的学习效果,但这些要素的增加必然会带来过量的参数影响效率,所以GoogLeNet提出了一个全新的深度CNN框架——Inception,这个有点像金字塔的框架在宽度上使用了1、3、5三种尺寸的卷积核,有效地节省了运算时间以及减少网络中很多参数的数量。
(4)ResNet[11]
ResNet(残差网络)是由何凯明及其团队提出,由于VGG与GooLeNet都是使用增加卷积神经网络的深度与宽度来提高模型的学习能力,但是模型的层次加深又会使得正确率降低,为了解决这个问题,作者提出了一个深度残差网络的结构Residual。
1.3章节安排
本文一共分为六个章节,每个章节有着不同的内容,具体如下:
第1章介绍了基于深度学习的口红识别器的研究背景和意义,阐述了人工智能与深度学习的研究现状以及卷积神经网络的四种模型。
第2章介绍了本系统所采用的相关原理以及技术点,分别有本卷积神经网络及其网络结构、轻量型卷积神经网络、系统核心模块的原理、系统采用的api及框架。
第3章对该系统进行需求分析与数据库的设计。
第4章先是对该系统的总体设计进行介绍,再分模块对系统的功能进行设计与实现。
第5章测试该系统的各个功能板块,并做出总结。
第6章总结本论文的研究内容,并对该系统仍有进步空间的地方做出展望。
第二章 论文相关原理以及技术介绍
2.1 卷积神经网络
2.1.1卷积神经网络概述
人体的很多功能拥有着许多奥秘,因此许多科技的创新与发展也会利用这些“奥秘”的原理。卷积神经网络正是根据人类视觉奥秘的原理,采用多层神经网络构建了卷积神经网络。卷积神经网络在图像处理方面有着积极的效果,它能在较低层开始识别图像的特征,随着层数的增加能提取到越多的特征,最终在顶层做出分类。随着技术的不断发展,卷积神经网络还应用于数字信号处理、自然语言处理等中,取得了良好的成效。
神经网络的发展从20世纪40年代开始。在该年代,不少模型与理论为神经网络奠定了基础,神经网络的研究有了实质性进展。随后在50年代,一系列神经网络的成果开始涌现,例如感知机、Adaline等。而好景不长,一些在当时无法解决的问题使得神经网络开始沉寂,直到BP算法的提出才让神经网络迎来了新的春天随着时代背景的改变,计算能力与日增强以及大数据的涌现,神经网络迎来了高潮时期。
在时代的大背景下,神经网络已然成为了宠儿,成为了各国各科研人员的重点研究对象,在神经网络中不得不提的便是卷积神经网络,因此卷积神经网络在技术层面也是不断更新,各路大神纷纷提出更优越的CNN网络,不断增加网络的深度与复杂度从性能方面带来提升。各大公司也纷纷斥巨资进行研发,由此看来,卷积神经网络已成为热门课题。
2.1.2 卷积神经网络结构
卷积神经网络是一种监督式的多层神经网络,卷积层是其中最为重要的结构。卷积神经在图像处理时,输入的图像是一个三维矩阵,从输入层开始就通过卷积、池化等操作将特征信息逐层获取和抽象,不同的层级分工合作,各有着自己的任务与操作,直到在最后一层将输入的图像进行分类,可将此层看作一个分类器。卷积神经网络的结构如图2-1所示。将图片输入之后众多的操作层提取原始数据中的特征,即进行特征学习,最后通过softmax输出分类结果。
图2-1 卷积神经网络结构图
⑴输入层
图片在输入层输入,相当于在卷积神经网络中输入一个三维矩阵。随后该矩阵经过层层的特征提取,直至全连接层,最后获得分类结果。
⑵卷积层
卷积神经网络中不能没有卷积层。卷积层是一个:输入的图像为矩阵X,与参数矩阵W进行相乘求和的过程。其中W就是卷积核,通常被称为过滤器(filter)。卷积核的尺度不同提取的特征也不相同,在卷积神经网络中为了提取更多的图像特征,会把采用多种卷积核一起运算。卷积层的基本原理如下,如图2-2(a)所示,输入一个5×5的图像,选择了一个步长为1、3×3的矩阵为卷积核,卷积核从左上角开始从左到右、从上到下滑动,每滑动一次就进行一次卷积操作,滑动的距离由卷积核的步长决定,图像中的参数与卷积核的参数逐位相乘后得到一次卷积操作的结果,即:1×1+1×0+1×1+0×1+1×1+1×0+0×1+0×0+1×1=4,卷积结果如图2-2(b)左上角所示。由此,我们可以看作有一个滑动窗口,以从左往右从上到下的顺序并且以步长为单位进行卷积操作,卷积过程如图2-2(b)所示,最终会得到一个3×3大小矩阵,如图2-2(b)右下角所示。该矩阵将会输入到下一层中进行操作,环环相扣。
(a)输入一个5×5的图像,选择了一个步长为1、3×3的矩阵为卷积核
)
(b)卷积操作的过程及结果
图2-2 卷积操作
⑶池化层
池化层(Pooling),可以在图片质量不被影响的情况下减少参数、压缩图片,通过降采样的方式,使得数据维度降低,很好地避免了过拟合。一般池化层会选择性地参杂在卷积层之间。取一个过滤器将输入的图像划分为跟过滤器大小相同的矩阵,每个子区域选取最大值作为结果为最大池化,若选择平均值作为结果则为均值池化。池化层不会改变三维矩阵的深度,并且池化层里的参数是人为设置初始化地,所以与之前卷积层里的卷积核不同。
列举两个实例以便更好地理解最大池化与均值池化的原理,如图2-3的图(a)与(b)分别为进行的操作为:最大池化与进行均值池化。其中池化核是步长为2的2×2的矩阵。可以看到,经过池化后更能保留特征的主要信息,节省资源,加快速度。
(a)利用2×2的池化核,并且以2为步长,对特征进行最大池化
(b)利用2×2的池化核,并且以2为步长,对特征进行均值池化
图2-3 最大池化与均值池化
⑷激活函数
神经网络中进行线性操作,无法很好地发挥神经网络的潜能。为了提升神经网络的能力,增加其多样性,选择加入激活函数作为其非线性因素,摆脱只能进行线性映射、输出线性组合的困境。以下介绍三种激活函数
①Sigmoid函数(S型生长曲线函数)
Sigmoid函数可以将连续的值转换为0和1的输出,因此可以用来做二分类。
它的数学形式如公式2-1
(2-1)
Sigmoid函数的几何图像如下图2-4所示:
图2-4 Sigmoid的几何图像
Sigmoid函数有着易于求导的优点,但是也有不少如下缺点:
⒈在反向传播时,需要求误差梯度,但在该求导过程中会出现除法,增大了运算量。
⒉深层网络的训练无法完成,因其容易在反向传播时出现导数逐渐趋于零或者变为零的情况,该情况称之为梯度“消失”。
②Tanh函数(双曲正切函数)
它的数学形式如公式2-2
(2-2)
Tanh函数的几何图像及其导数如图2-5所示:
图2-5 Tanh函数的几何图像与导数
在特征相差明显时Tanh函数会得到更好地提取效果,并且可以提高BP训练的效率,所以两者相比,Tanh函数会比Sigmoid函数更胜一筹。但是Tanh函数也同样在反向传播时,需要求误差梯度,但在该求导过程中会出现除法,增大了运算量的缺点,并且在反向传播时候有可能比Sigmoid函数更快出现梯度“消失”的现象,因此也较为不稳定。
③Relu函数(线性整流函数)
它的数学形式如公式2-3
(2-3)
Relu函数的几何图像及其导数如图2-6所示
图2-6Relu函数的几何图像及其导数
Relu函数比起前面两种激活函数,有着显著的优点
⒈缓解了梯度“消失”的问题。
⒉计算速度于Sigmod函数和Tanh函数相比快很多。
⒊网络训练速度得到提高。
⑸全连接层
输入图像的在经过卷积神经网络前面几层的特征提取之后,特征被高度提取,此时进入全连接层进行分类工作。
2.1.3 轻量化卷积神经模型
卷积神经网络的性能需求随着其在计算机视觉中的广泛应用不断提高,于是各路大神纷纷提出性能更强的CNN网络以满足需求,网络的性能在神经模型深度的不断增加下得到了高度提升,但此时效率问题也开始产生,模型的存储空间[12]与进行预测的问题是影响效率的关键问题。在21世纪,手机是人类生活的一大需求。如何使得卷积神经网络与手机结合起来,更好地应用于人类生活呢?那么既然想到了这个需求,就必然会有解决办法,于是轻量化卷积神经网络模型诞生了,它的主要设计思想在于更高效的网络计算方式(主要针对卷积方式),使得在不损失网络性能的情况下减少参数。以下介绍3个近年来的轻量化模型:
(1)SqueezeNet
SqueeNet通过使用卷积核(1×1矩阵)对特征图片进行个数压缩的方式,从量上面对网络参数进行减少,使其轻便。SqueeNet与AlexNet的性能相近,却比AlexNet能减少50倍的网络参数。SqueeNet的网络结构设计思想与VGG类似,堆叠的使用卷积操作。
(2)MobileNet
由Google团队提出的MobileNet从它的命名就能联想到它的应用场所是手机。该模型减少参数数量与提升运算速度的方法是通过采用名为depth-wise separable convolution 的卷积方式。这种卷积方式也是这个模型的精髓,它能使得卷积的计算量减少8-9倍。简单介绍下此种卷积方式,便是将卷积分为两步:第一步的每个卷积的通道只能被一个卷积核卷积,
这一步名为逐通道的卷积;第二步的主要工作就是通过将上一步得到的特征图串联,使得输出的每一个特征图都有着输入层特征图的信息,这一步名为Pointwise convolution。
(3)ShuffleNet[13]
ShuffleNet也采用了depth-wise separable convolution 卷积方式。但并非与MobileNet完全一致,为了解决该卷积方式带来的“信息流通不畅”的问题,将该卷积方式的第二步Pointwise convolution换为 channel shuffle,成功地解决了问题。
2.3 系统核心模块原理
本系统的核心模块为:人脸检测模块、面部特征点标记模块、颜色对比模块,具体如图2-7。
图2-7 系统核心模块
其中,人脸检测模块的主要功能是在图片中识别出人脸,并定位出人脸所在的位置以确保后续工作顺利进行。面部特征标记模块涵盖了人脸五官68个特征点的信息,可以由此得到唇部的特征点信息并标记出唇部并获取嘴唇的颜色。颜色对比模块的功能主要为将获取到的唇部颜色和口红的色号进行匹配,选择相近的颜色值。
2.3.1人脸检测模块
人脸检测模块往大方向去看便是深度学习中的目标检测。识别一张图片中存在什么物体,该物体在哪个位置,就是目标检测。标检测中能检测出来的物体取决于我们的需要,由此可知,人脸检测便是目标检测中所需要检测的物体为人脸。于是,人脸检测主要完成了两个工作:一是判断所给的图片中是否含有人脸区域;二是如果图片中存在人脸,则需要将人脸的位置预测出来。举个例子,如苹果公司旗下苹果手机的人脸解锁功能还有中国各大高校带有人脸识别的出入校门系统,都需要先检测出脸部才能进行识别,在各大高校的进出校门系统中可以看到,屏幕上会出现出校门者的脸随后对该人脸进行对焦,这一步便可以概括人脸检测。
人脸检测最开始是由人工提取特征,将这些人工特征训练成一个检测器,进行人脸识别。而随时时代的进步,科技的发展,如今的人脸检测使用的是深度学习的卷积神经网络,衍生出了:Faster R-CNN算法、SSD算法等多种算法。这些算法不仅可以应用人脸检测,同样也可以应用到目标检测。下面将介绍Faster R-CNN算法与SSD算法。
⑴Faster R-CNN算法
在2014年由于R-CNN(Region proposal+CNN)框架提出之后,目标检测算法迅速地发展起来。在选择性搜索的策略下接着相继提出了两种相应的目标检测算法,但是由于选择性搜索是一个影响网络性能的缓慢的并且耗费时间的过程,因此,在2015年这种更优化的目标检测算法Faster R-CNN被卲少仁等人提出。Faster R-CNN可分为四个内容,分别为Conv layers、Region Proposal Networks、Roi Pooling、Classification,如下图2-8所示。
图2-8 Faster R-CNN基本结构
①卷积层(Conv layers)
Conv layers负责提取图像中的特征图,是一种CNN网络目标检测方法。Input进去的图片尺寸若为MN,在经过该层时,若采用VGG16计算图片的特征图,会使得特征图像的尺寸固定变为(M/16)(N/16)。
②RPN层(Region Proposal Networks)
主要作用是生成目标候选区域。目标检测算法的瓶颈是检测速度,在精度一路发展的同时,检测速度却没有得到理想的提升,无法很好地进行实时检测。为了使检测速度达到理想水平,Faster R-CNN使用了RPN生成检测框架而不是采用之前传统的Seletive search方法和滑动窗口方法,达到了提升检测速度这一目的。RPN网络的具体结构如图2-9所示。
图2-9 RPN网络的具体结构
可以看到首先有一个3*3的卷积层,并且输入与输出的尺寸保持一致。这个过程分为两条线走,一条线利用softmax进行分类得到proposal;另一条线利用计算边框回归偏移量得到proposal。最后将两者结合得到目标候选区域(proposals),
目标定位的目的得以实现。
③Roi Pooling层(Roi Pooling)
负责收集proposals(目标候选区)和feature map(输入的特征图),并将这两者结合起来计算出目标区域特征图,随后进行目标类别的判断,在全连接层进行此判断。
④分类器(Classification)
分类器用于最后的分类与最终精准的定位。通过结合前面几层得到的信息去分类出相应的物体、定位出最终的位置。
⑵SSD算法
SSD算法是基于改进YOLO算法基础上提出的方法,在目标检测人物的精度与实时性方面达到了新的高度。它利用YOLO基于回归模式的算法,加快了检测的速度;同时也利用了基于区域的概念(类似Faster R-CNN算法中的anchors机制),保证了精准的窗口预测性能。可以说它解决了YOLO算法与Faster R-CNN算法的不足并将两个算法的创新优势结合起来使用。由此,SSD算法可以适应多种尺寸目标的训练和检测任务。它的基本框架如图2-10所示。SSD的核心设计理念可以总结为以下三点:第一,采用多尺度特征图用于检测;第二,采用卷积进行检测;第三,设置默认框。下面将分别介绍这三个核心设计理念。
图2-10 SSD基本框架
①采用多尺度特征图用于检测
在卷积层后面直接连接上一层全连接层进行检测框输出的有YOLO算法与Faster R-CNN算法,然而只依赖最后一层特征层的图像特征信息输出目标位置信息实在太过单薄。而SSD算法在基础网络之后又添加了六层卷积层进行多尺度特征图检测,这改善了YOLO算法因只利用最后一层进行目标检测所以不能很好检测小目标物体的问题。SSD算法使用不同深度的卷积层的特征信息来预测不同大小的目标。如图2-11所示,8x8的特征图可以划分更多的单元,但它每个单元的先验框尺度比较小,可以检测相对较大的目标。
图2-11 示例
②采用卷积进行检测
简单来说,就是若有特征图的形状为m×n×p,只需要采用小卷积核3×3×p进行检测去获得检测的结果,使得算法更加快速高效。
③设置默认框
默认框(default box)的设置降低了一定的网路训练难度,它是一个事先设定好
的有着大小不同尺寸的边框,相当于为预测的边界框提供基准,因为后续的预测边界框都不会超过默认框。等待检测的图像中每个网格都会生成尺度与大小不同的默认框,图像中的目标对象基本涵盖在这些默认框中。如图2-12(a)所示,狗对象和猫对象的默认框都适合它们的体型大小。在每一特征层的网格上,都会先设计好默认框的长宽比与大小再进行训练,默认框的生成原理如图2-12所示
图2–12 生成默认框
2.3.2面部特征标记模块
检测出人脸位置之后,仍无法满足本系统的要求,所以需要进行面部特征标记(Landmark Detection)。面部特征标记是指精确的定位出图像中面部若干个特征点的过程,人脸的形态(shape) 就可以通过特征点进行描述。这些特征点是进一步工作的基石,在本文中,将利用这些特征点确定出唇部的位置进而继续下一步的工作,而在大环境中,这些特征点是人脸识别与人脸检测的重要衔接,也是美化人脸、表情识别等一系列人脸属性分析的核心。本文所用的模型中的landmark包含68个点如图2-13所示,每几个点构成脸部的一个器官,如61-67是嘴内轮廓(紫)。最终脸部的五官由这68个点标出,描述出该人脸的形态。
图2-13 landmark的68个点
2.3.3颜色对比
本项目采用欧几里得度量(euclidean metric)予以计算嘴唇的颜色和口红的色号。在多维空间中,欧几里得度量就想当于定义了点到原点的距离或者两点之间的距离,由此可知在二维和三维空间中其实就是计算两点之间的实际距离。在本次项目中,RBG作为颜色的三个维度,因此需代入三维空间的公式,公式如3-1所示
(3-1)
需要进行比对的是口红色号库中的颜色与识别出的人脸唇部的颜色即识别出的20个特征点。因此需要将两者转换为RBG模式再代入欧几里德距离公式进行计算,得到差值最小的一款口红色号将作为最终结果返回。
2.4 Face-api模型介绍
由前文可知,实现此系统有三个核心步骤,人脸检测、面部标记以及口红颜色对比。其中人脸检测介绍了两个算法,Faster R-CNN算法与SSD算法,由发展历程以及算法原理可知,SSD算法具有更强的检测能力以及更快的检测速度,为本实验的首选算法,再者,为了使得实验更加高效与便捷,本实验将采用Face-api进行应用。Face-api是一个人脸识别框架,它构建在TensorFlow.js核心库之上,通过采用不同的神经网络对人脸样本进行训练,得到人脸识别模型。在深度学习中,构建模型主要是有三个流程:第一,构建神经网络;第二,输入数据集进行训练,得到模型;第三,对获得的模型进行优化后输出。但是Face-api已经实现了上述三个流程,并封装成了方便调用的简易api,意味着我们并不需要去寻找数据集、对数据集进行处理,随后构建神经网络,调整损失函数参数并训练模型,而是可以直接方便地使用人脸识别技术。face-api利用不同的神经网络模型对人脸数据进行训练,得到了不同的模型,如图2-14所示。在本系统中需要用到的模型是ssdMobilenetv1模型和faceLandmark68Net模型。以下分别介绍这两个模型
图2-14 face-api提供的模型
⑴ ssdMobilenetv1模型
ssdMobilenetv1模型是Face-api中最准确的人脸检测器,它基本上是基于MobileNetV1的卷积神经网络且在顶层增加了盒预测层提高模型的识别能力,具有良好的检测效果。在本系统中利用它来识别输入图片的人脸以及人脸位置。
⑵ faceLandmark68Net模型
模型通过68个特征点标记了人脸的五官位置。借助FaceLandmarks68.positions获得Array(68)的数组,这些数组元素便是68个特征点。具体的点位的分布如下图2-15所示,
图2-15 68个特征点分布图
FaceLandmarks68还提供了一些方法用于获取五官的点位信息,在本系统中利用FaceLandmarks68.getMouth()方法获取唇部的20个特征点,为后续的口号色号对比阶段做准备。
2.5MVVM框架开发模式
2.5.1前后端分离
随着前端领域技术的不断更新与快速发展,前后端分离的开发方式被越来越多开发人员选择。前后端分离是:前端只负责页面开发与渲染,后端只负责后台逻辑与接口编写,各司其职。其中一个典型的例子就是SPA(单页面应用)。比如QQ音乐的网页版就是单页面应用,它的主要特征就是不需要重新加载整个页面去刷新,而是可以局部刷新网页。因此加载速度变快,从而优化用户体验;再者,节省了开发与维护的成本。
从职责来划分,前后端分离之后各自的职责为:
⑴前端主要负责:页面逻辑、页面渲染、UI交互、用户体验
⑵后端主要负责:服务层开发、处理数据、提供接口
前后端分离的优点
⑴前后端可并行开发。各司其职,分工明确,提高工作效率。减少了前后端代码耦合、混杂,提高了开发的灵活性。
⑵局部性能提升。实现页面加载快速,提升用户体验
⑶降低维护成本。
2.5.2MVVM框架及其优势
MVVM的全称是Model-View-ViewModel,可以看作MVC模式(模型层-视图层-控制层)的升级版。MVVM架构可以分为三层,如图2-16所示,分别是模型层(model)、视图层(view)、视图模型层(view model)。Model层代表数据结构,在这一层中对数据进行操作与修改,一个功能或者一个业务对应一个model;view层代表视图,主要指用户可以看到并操作的界面,把数据模型转化为UI是它的责任;view model层是MVVM框架的核心,自动把model层和view层连接起来进行交互,多个view也可对应一个model,让数据变得容易使用和管理。
图2-16 MVVM架构示意图
2.6 Vue.js前端开发框架
随着时间的发展,前端需要承担的业务压力越来越大,也出现了更多复杂的业务需求。前端框架也不断涌现,其中尤雨溪的vue.js框架、谷歌的Angular、Facebook的React称为前端三大框架。本系统采用的是遵循前面介绍的MVVM模式的前端框架——vue.js框架。
Vue.js是一个渐进式的JavaScript框架,灵活轻便对新手友好,主要注重视图层,方便与其他现有项目、第三方库整合,提高开发效率。
2.7 后端技术
2.7.1 Node.js
Node.js是一个基于JavaScript的开源、高性能的运行环境,被广泛应用于服务器端和网络应用中[14]。以前浏览器就是JavaScript的代码解析器,因此JavaScript只能在浏览器上运行,而现在有了node.js的JavaScript不仅能在服务器上运行,还可以实现文件处理、网络通信等功能。
Node.js有着其特有的优点,第一,可以简便编写高性能Web服务;第二,node.js采用异步非阻塞的方式,使得其不同于Java、PHP等多线程处理请求不同,在并发量上有着更好地表现。
2.7.2 Express框架
Express是一个基于Node.js平台的Web应用框架,它使得服务器开发更加便捷高效的原因是:通过封装中间件机制以及API。它使用方便,可以快速进行开发,生成Express框架的基础模板只需要一行命令,可以减少代码量;并且拥有灵活的扩展机制,有着详细的API文档以及简单、直观的API接口。
2.8 MySQL数据库
MySQL是一个开放源码的关系型数据库管理系统。深受开发者的欢迎,因为MySQL有着它自己的优点,如下:
⑴速度快。精简少用或不必要的功能,以及高速优化类库等技术层面上的优化,使得其速度快。
⑵开放性。开源数据库;以及不受限制免费使用。
⑶易用性。MySQL操作简单容易上手,可以高效地完成任务。。
2.9 本章小结
本章首先是介绍了在深度学习中常用于图像处理的卷积神经网络,并详细介绍了其网络结构,以及轻量化的卷积神经模型;其次,本系统划分了三个核心模块,分别介绍了这三个模块所用的原理;随后介绍了本系统所用的api以及所用的模型;然后再介绍了MVVM模式引出前后端分离的好处以及本系统所用的前端系统,基于MVVM模式的vue.js;最后介绍了后端所用的技术以及本系统所用的数据库。
第三章 系统需求分析与数据库设计
3.1系统需求概述
随着人工智能的兴起,将人工智能与人类生活需要连接起来,可以让人工智能更好地服务于人类。本系统真是基于此进行研发,结合生活需要,以口红色号作为切入点,制作一款口红识别器,此款口红识别器的作用在于:对女生而言,看剧再也不用辛苦地去扒女主角的口红色号了,只需要截出一张图就可以轻松识别口红色号。对于男生而言,再也不用担心给女朋友买口红会踩雷了。随着国家经济的发展,化妆品行业的盛行,此款系统具有一定的市场价值,并且可以满足用户的一定需求。
3.2功能需求分析
口红色号识别系统主要流程:1、登录系统界面。2、输入需要识别的图片。3、程序后台检测图片人脸位置,标记出唇部并提取出颜色与色库进行对比,并得出结果。4、返回结果。
软件使用人主要为广大群众。以下是口红色号识别系统用例图,如图3-1所示
图3-1 系统用例图
下面对这些用例进行分析:
表3-1 登录用例
用例名称:用户登录
简要说明:
用户进入口红识别系统的第一步流程。
基本事件流:
1.用户进入登录页面;
2.输入用户名以及用户密码;
3. 点击登录按钮;
4. 进入主页面;
5. 用例终止。
表3-2 口红识别用例
用例名称:口红识别
简要说明:
用户进入系统之后的主要内容
基本事件流:
1.用户登录成功之后进入该页面;
2.点击输入图片按钮上传图片;
3. 进行口红色号识别;
4. 返回口红色号;
5. 用例终止。
表3-3 注册用例
用例名称:用户注册
简要说明:
用户进入可进入该页面进行注册
基本事件流:
1.用户点击注册按钮;
2.进入注册页面;
3. 填写个人信息;
4. 点击确定;
5. 用例终止。
3.3数据库设计
本系统采用MySQL数据库,因其体积小且相较于其他大型数据库易于操作并且速度快。根据系统的需要合理规划数据库,使得系统可以稳定高效地运行。
3.3.1数据建模
根据系统需要,用户注册时会输入用户的基本信息,具体包括:用户名、账户名、密码、邮箱、电话、身份证号码、生日以及性别。具体的描述如图3-2所示:
图3-2 用户信息E-R图
3.3.2数据表结构
本系统主要有一个数据表user,用来存储用户的信息。uer表对应的数据字典如图3-3所示:
图3-3 user表数据字典
3.4本章小结
本章对该系统进行了需求分析,并且简要地相应的功能进行了说明,同时阐述了系统的数据库物理表结构,为后续系统的实现做好准备。
第四章 系统的设计与实现
4.1系统的总体设计
本系统遵循便捷、易于使用的原则,使得用户不需要特别的专业技能就可以使用。将系统分为三个功能模块,分别是登录模块、识别模块、注册模块,再根据这三个模块再进行设计,层次分解、自顶向下完成整个系统的设计。
本系统的整体设计图如下图4-1所示
图4-1 系统整体设计图
用户的使用步骤如下:
1、在系统内注册账户
2、登录系统
3、上传需要进行口红色号识别的图片
4、等待识别结果返回
4.2系统功能模块设计与实现
根据上文所分的三个功能模块进行设计
⑴登录模块:
用户进入系统主页面,会有一个登录框,用户需准确填写账号、密码以及验证码才能登录系统。用户只有在登录之后才能使用后续内容。登录功能的简略页面设计图如下图4-2所示
图4-2 登录页面设计图
登录模块具体的页面实现如下图4-3所示:
图4-3 登录页面实现图
⑵识别模块
用户成功登录之后进入口红识别模块,在该模块,用户需点击“图片上传”按钮对图片进行上传,随后等待结果的返回。识别功能模块的简略页面设计图如下图4-4所示:
图4-4 识别页面设计图
识别模块具体的页面实现如下图4-5所示:
图4-5 识别页面实现图
⑶注册模块
用户想登录该系统必须先进行注册,在注册页面填写注册信息之后方可得到一个账户,在登陆页面可以进行登录,注册功能模块的简略设计图如下图4-6所示:
图4-6 注册页面设计图
注册模块具体的页面实现如下图4-7所示:
图4-7 注册页面实现图
4.3本章小结
本章从系统的总体设计开始引入,随后将系统的功能分解成三个模块进行设计,并画出了粗略的系统设计图,最后对系统进行实现
第五章 系统测试
5.1测试流程
系统测试是开发系统的最后一步,也是极其重要的一步,它是对整个系统的最终审查,是检测该系统是否合格的关键。在测试这一环节可以发现一些系统的漏洞并且及时改正,对整个系统而言十分重要。在本次测试中,需要测试的模块有登录模块、识别模块与注册模块。主要的内容是检测这三个模块里的功能能否正确实现,具体流程如下
⑴搭建好测试环境,对三个模块分别进行测试
⑵记录下测试用例的缺陷并解决
⑶完成测试
5.2测试用例
表5-1 口红识别用例
需求功能名称 测试用例名称 执行说明 执行情况 是否通过
浏览器页面启动 浏览器页面启动测试 测试开发环境是否存在问题;页面是否能正常打开。 良好 是
用户登录 登录测试 测试用户打开页面之后能否进行用户登录,跳转主页面是否流畅;能否登录成功。 良好 是
口红识别 口红识别测试 测试是否能正常识别口红色号并给予反馈。 良好 是
用户注册 注册测试 测试用户是否能够顺利注册。 良好 是
5.3测试小结
本次测试是为了对基于深度学习的口红识别器的系统进行质量检测。除了检验质量是否合格之外,也为了从中可以发现在开发过程中没有发现的问题从而更好地对系统进行优化。
本次测试针对各个模块和功能进行了反复测试,发现该系统的整体性能尚可,并且容易上手易于操作,测试结果基本达到了期望。但是在细节方面以及前端美化方面还是存在不足。在问题发现之后及时对本系统进行改进。
5.4本章小结
本章主要是对本系统进行测试,通过测试检验系统的质量并从中发现系统的不足给予改进。
第六章 总结与展望
4.1总结
从论文启动至今,历时几个月,从最开始的迷茫,到后来一点一点的经验累积,并且在老师、同学的帮助下,最终顺利完成了毕业论文各个环节的工作。
本项目最开始的思想是结合当下热门的技术与实际生活联系起来为人们的生活提供便利。人工智能是当下的热点,各种人工智能的应用也层出不穷,全世界各个国家都在致力于发展人工智能。而之所以会想要做口红色号识别,是因为在我国国民经济不断发展下,化妆品行业也越来越盛行,口红的销量首当其冲;并且在日常生活看剧或者看图片中,有时候总会看到有人在评论下方求口红色号,我就在想,如果有一款自动识别口红色号的系统,或许就能为生活提供更大的便利。
在互联网技术的高速发展的大环境下,人工智能的兴起为人们的生活提供了极大的便利,并广泛应用于各种实时场景,是现代生活必不可少的应用技术。随着近几年机器训练瓶颈的突破以及深度学习理论高速发展,本系统采用的目标检测算法也得到了越来越深入的研究,各种检测算法如春笋般孕育而出,主要发展为端到端的单步检测器和基于区域的目标检测器,各种算法的速度和精确度都得到了显著的提升。
总的来说,本文主要研究工作如下
⑴介绍卷积神经网络,着重介绍卷积神经网络的结构,为后续研究工作的展开做准备。
⑵介绍了目标检测算法的创新与发展,并对其主流算法进行了介绍。
⑶对face-api做了介绍,该api为深度学习的应用带来了极大的便利
⑷使用人脸检测、面部特征提取以及颜色对比作为核心实现了深度学习的应用,实现了口红识别系统
4.2展望
本文虽然根据深度学习的特点完成了系统的应用,但还是存在着不少的问题,仍需要更进一步的钻研和发展。
⑴口红颜色库还有待完善
⑵照片模型识别的准确度还有提升空间
⑶设计手机APP,在手机端上实现口红识别器
参 考 文 献
[1] 胡国华,袁树杰.人工智能研究现状与展望[J].淮南师范学院学报,2006(03):22-24.
[2] 胡国华,袁树杰.人工智能研究现状与展望[J].淮南师范学院学报,2006(03):22-24
[3] Deep learning. Yann LeCun,Yoshua Bengio,Geoffrey Hinton. Nature . 2015
[4] 王菲斐.深度学习研究现状分析[J].电子技术与软件工程,2018(10):152-153.
[5] 深度学习研究综述[J]. 尹宝才,王文通,王立春. 北京工业大学学报. 2015(01).
[6] Ng, A., Kian, K. and Younes, B., Sequence Models, Deep learning. Coursera and deeplearning.ai.2018
[7] Jaehyun Kim,Heesu Kim,Subin Huh,Jinho Lee,Kiyoung Choi. Deep neural networks with weighted spikes[J]. Neurocomputing,2018.
[8] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C].Advances in neural information processing systems. 2012: 1097-1105.
[9] Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014.
[10] Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]. Cvpr, 2015.
[11] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C].Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
[12] Howard A G, Zhu M, Chen B, et al. Mobilenets: Efficient convolutional neural networks for mobile vision applications[J]. arXiv preprint arXiv:1704.04861, 2017.
[13] Zhang X, Zhou X, Lin M, et al. Shufflenet: An extremely efficient convolutional neural network for mobile devices[J]. arXiv preprint arXiv:1707.01083, 2017.
[14] 王金龙,宋斌,丁锐.Node.js:一种新的Web应用构建技术[J].现代电子技术,2015,38(06):70-73.
致 谢
时间如白驹过隙,一转眼,我在广东东软学院已经度过了四年。仿佛昨天还在憧憬着大学生活的展开,今天却已然来到了大学最后一个任务关口。
历时几个月的时间,从论文题目的构思到项目的实现,到最后完成论文的编写。在这个过程中,我遇到了许许多多的困难,但最终我克服了它们,顺利地完成了毕业设计,以及毕业论文的编写。在这篇论文的设计、撰写过程中,都离不开一个需要感谢的人,那便是我的毕业论文指导导师冼敏仪老师。在学习过程中,老师给了我许多的指导,从论文的框架到详细修改,并且提出了许多宝贵的建议。每当我遇到困难的时候,老师会及时地给予我方向、思路,并且给予我鼓励,使我重拾信心继续前进。
感谢我的同学朋友们,对我的论文提供了帮助以及切实可行的建议,并且感谢这四年来一起创造的美好回忆。同时也要感谢本文参考文献中的各位学者们,感谢这些学者们的研究成果,我从中受到了诸多启发。
感谢我的母校,提供了良好的学习和生活平台,使我大学四年过得丰富多彩。不仅学习到了许多专业知识,提高了我的学习能力和生活能力,同时也结识了许多良师益友。
感谢我的父亲与母亲,是你们一直以来对我包容与支持使我拥有信心,是你们的爱和鼓励使我勇敢向前。
最后,感谢各位审阅论文与参与答辩的教授专家们,恳请各位批评指正。