【《基于深度学习的室内家具分类算法的设计和实现》16000字(论文)】_第1页
【《基于深度学习的室内家具分类算法的设计和实现》16000字(论文)】_第2页
【《基于深度学习的室内家具分类算法的设计和实现》16000字(论文)】_第3页
【《基于深度学习的室内家具分类算法的设计和实现》16000字(论文)】_第4页
【《基于深度学习的室内家具分类算法的设计和实现》16000字(论文)】_第5页
已阅读5页,还剩40页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录目录基于深度学习的室内家具分类算法的设计和实现摘要计算机技术发展至今已经诞生了许多丰富而又密切联系的相关领域,在这其中,深度学习技术越来越广泛的运用到人们的生活之中。图像识别是深度学习中最为经典的技术之一。用图像识别技术对家用家具进行识别分类,可以提高相关人员的工作效率。本文以基于深度学习的室内家具分类算法的设计和实现为课题,利用深度学习的方法,在卷积神经网络的基础上,设计了适合对家用家具图像进行分类的算法,并实现了家用家具识别和分类的系统。本文详细阐述了卷积神经网络的架构设计和采取设计的相关原因。目前主流且经典的几种卷积神经网络模型都需要提供庞大的计算机资源,在本文的环境下难以达到这个要求。故本文设计的卷积神经网络模型不仅可以在个人用户计算机上进行相关训练,同时在所提供的验证集和测试集上,对家用家具图像识别分类的准确率达到了70%。关键词:计算机技术,深度学习,图像分类识别,家用家具分类,卷积神经网络目录TOC\o"1-3"\h\u第一章绪论 第一章绪论1.1研究背景和研究意义深度学习(DeepLearning)[1]是机器学习中的一部分内容,可以说是逐渐深入的部分内容,在逐渐深入后最终形成的一门科目,即深度学习。深度学习作为机器学习研究的一个分支,也隶属于人工智能领域。深度学习会根据所提供的数据,去学习数据深处的某种特征。这种特征对于我们日常生活中完成某些相关任务有着很大的帮助。而深度学习的目标和人工智能一样,就是让计算机能够向人一样去分辨、处理某些事物,使得人们的日常生活更加方便。深度学习在基于机器学习的基础上,在其中的神经网络的领域内研究的更为深入,然后发展了许多具有特色的研究方向,最为典型的方向便是计算机视觉。所以在这深入研究的领域中,其进行的研究也会变得越来越复杂,虽然复杂,但是相关的技术效果却非常不错。随着大数据时代的到来,深度学习技术逐渐运用到人们的日常生活中,甚至生产制造等工业中。在许多深度学习任务中,它所设计到的技术越来越复杂而又高效。所以,研究深度学习技术可以进一步发展开发,同时又可以进一步契合应用到人们的生活,将计算机视觉技术应用于人们的日常生活以及工作当中,可以极大的满足大部分日常生活的需求。图像分类,是深度学习中计算机视觉任务中的基础任务。顾名思义,就是对图像进行分类操作,但这是由计算机来完成。图像分类其实就是研究如何让计算机更高效而又准确的完成对图像的认知。这在许多视觉领域任务中有着很广泛的应用,为了实现计算机对图像的识别处理,将采用近几年火热而又实用的深度学习技术来完成。在本文中,所采用的方式正是近几年火热的几种卷积神经网络[2]模型。卷积神经网络减少了参数个数,同时能够对图片的区域内的特征进行收集。况且,卷积神经网络的神经元不一定要有着全连接关系。通常,下一层的神经元只会与上一层中一小块区域的神经元相连接,这大大的减少了计算量。可以说,利用卷积神经网络进行图像分类。在今天是非常有价值意义的。1.2国内外研究现状和分析深度学习发展至今,也分为了监督学习、无监督学习、半监督学习、强化学习许多方向,它们适用于不同的领域进行研究。但是深度学习技术有着一个独特的优点,就是随着数据集的不断扩充,其性能也会逐渐提高。而深度学习目前最为广泛使用的技术还是深度神经网络,其中卷积神经网络是深度学习网络中应用最为广泛的,其实这一技术已经很广泛的应用在我们的日常生活中了,只是人们没有察觉到而已。其实,在目前很多的计算机人工智能工程项目中,特别是计算机视觉领域内,卷积神经网络无处不在。这便间接的证实了卷积神经网络在这部分领域内有着非常出色的效果。如今,已经有着很多种非常经典的用于识别图像的卷积神经网络,比如AlexNet[3]、DenseNet[4]和GoogLeNet[5]等。这些卷积神经网络模型,都有着许多共通之处,也有着自身的独特之处。现在本文用以上几种卷积神经网络模型进行对家用家具分类识别的研究,同时在这些模型的基础上,将进行相关参数的调整,以便获取优秀的性能指标,而本文正实现了这一目的。但通常在卷积神经网络的同时,计算机计算资源的消耗是个必须解决的问题。因为这需要庞大的计算机资源。所以本文的主要要求便是进行卷积神经网络模型的调整,在能达到具有优秀的性能指标的同时,能够在普通个人用户计算机上耗费较小的计算机计算资源即节省不必要的开销,也就是所谓的应用轻量化。在实现轻量化的同时也要能够适用于各种极端情况下的应用环境即应用环境多元化,也要有着不错的性能。1.3论文的主要研究内容本文设计了能够识别家用家具图像如床、椅子、沙发、桌子和衣柜的类别的卷积神经网络模型算法,并实现家用家具分类演示系统。本文使用的数据集是cifar-100python的数据集。但是由于cifar-100数据集所含数据不能充分的完善图像识别模型即所含数据集的图片数量不能达标,也就难以让模拟得到充分的训练效果[6]。所以在本文中将会提出并采用已有的增加数据的方式即数据增强,用以增加训练数据集的图片数量,从而让模型能够得到充分的训练,以让相关的性能指标达标。所以本文需要完成的主要工作是研究和设计出应用轻量化、应用场景多元化,相关性能指标的卷积神经网络模型。在设计出合适的卷积神经网络模型算法后,最终搭建出家用家具识别分类系统。1.4论文的结构介绍本文第二章中介绍了近年来火热的几种卷积神经网络模型,其中内容包含了相关技术所涉及到的基础知识内容和几种卷积神经网络模型的基本框架设计。在第三章中说明了本文的相关需求分析,也就是相关的工作内容,包括需要完成的功能和相关要达标的性能指标。在第四章中将会进行讲解如何完成的相关卷积神经网络模型的设计与实现,同时还会进行所采用的相关新的技术讲解。在第五章中展示了家用家具识别分类的演示系统。最后第六章进行了全文总结,并进行了后续的展望介绍。第二章卷积神经网络的介绍2.1卷积神经网络的结构构造卷积神经网络(ConvolutionalNeuralNetwork,CNN),正如其名,就是神经网络和卷积操作的结合。其中神经网络就是由数以千、万技的神经元组合分层形成的网状结构,俗称网络。在网络中又可以分为输入层、输出层和隐藏层,这些大致都和卷积神经网络相同,唯一的不同就是卷积神经网络加入了卷积这个概念。卷积神经网络一般用于图像处理这一方向,因为在这里有着不错的表现。卷积神经网络一般由一个或多个卷积层Conv(ConvolutionalLayer)、池化层Pool(PoolingLayer)和全连接层FC(Fully-ConnectedLayer)组成,同时可以在卷积层中设置相关权重值。在卷积神经网络中,卷积层和池化层是其中的核心模块。卷积神经网络的训练和神经网络大致相同,通过输入值即图片逐渐通过交替而成的卷积层、池化层及相关操作,然后通过全连接层完成一轮训练。之后便反向训练也即反向传播,用于最小化损失函数,以调整相关参数。如此反复迭代训练,以提高网络的识别精度。而卷积神经网络同传统的神经网络的区别在于,卷积神经网络的输入是图像,而传统的神经网络不是。而且,卷积神经网络的神经元连结的相关性不强,即非全连接神经网络。这大大的减少了训练的计算量,实现了图像训练的可行性。这里将主要介绍卷积神经网络中主要的三种类型层,分别为卷积层、池化层、全连接层。卷积层卷积层目的还是提取图像数据矩阵中最为突出的部分。卷积层作为其中不可或缺的一部分,但其实我们不难理解什么是卷积。虽然在卷积层中,它的内部神经元只与上一层中的一小块范围内的神经元有着连接关系,但是其计算所消耗的计算机资源却非常多。卷积层是一组平行的特征图(FeatureMap),它将会按照设定好的滑动规则,在输入图像上滑动,然后经过相关的计算而成,然后将感受野内的信息投影到特征图中。在这其中,设定的规则有卷积核的大小参数、卷积核移动的步幅和填充的方式,这些都是输出特征图的影响因素。其实在卷积层中,其内部就是一堆数据块,在生成这些块内部的数据时,一般选用随机生成的方式。而且这些块一般会堆叠成方块状,及有着总的高度和宽度,同时这个数据块可以生成多个。而卷积层就是利用这些数据块进行相关的计算,然后获得图像的特征。然后这些获得的特征会通过反向传播算法优化处理,最终卷积单元的参数得到更新。池化层池化层,又名降采样层,其内部和卷积层类似,也有着自己的数据块,一般称为池化单元[7],用于降低数据的空间和维度的大小,也就相应的减少了计算量,同时也就相应的减少了计算机所耗费的资源,在一定程度上减缓了过拟合现象。池化层就是将相关大小的神经元转化成一个神经元。与卷积层操作不同的是,在池化的过程中不会进行填充操作,且池化前后图像的深度不会发生改变。但在现在,有的模型会选择不使用池化层[8]。全连接层在卷积神经网络中,全连接层和神经网络的全连接层一样,只是上一层是卷积层或者池化层,而且在全连接层中的神经元是全连接的。2.2卷积神经网络的参数类型2.2.1激活函数的类型激活函数(ActivationFunction)用于激活神经元,将神经元的特征体现出来,即做非线性操作。一般在卷积操作后,使用一些激活函数来增强非线性特征。本文将介绍几种常见的激活函数:ReLU、Sigmoid和Tanh函数。ReLU(RectifiedLinearUnit)函数下式2-1为ReLU激活函数的表达公式: fx=max⁡(0,ReLU激活函数在图像识别这一领域中表现的比其他激活函数更为出色,也有着不错的效果[9],所以在目前ReLU激活函数最为广泛的在卷积神经网络中被使用到。ReLU激活函数激活神经元是不定的,这与人类大脑的神经元有着相类似之处[10]。其实从其具体公式可以看出,ReLU公式很简单,它的函数图也很容易理解,所以它的相关的数学计算过程比起别的激活函数更为简单,那么这样便可以实现我们的应用轻量化的设计目标,因为这可以减少我们计算机计算资源的消耗,也加快了模型的训练速度。其实ReLU也有着不便之处,从其函数图中可以看出,在小于0的区域内,会将这些数变成0。那么这些带有负数值的神经元将会失活,训练便可能难以达标。而一般这种情况,会在数值变动幅度较大的情况下出现,也就是学习率(LearningRate)设置较高。那么也有着相应的解决办法,比如直接调低学习率的参数数值,或者采用动态调整学习率的方法。Sigmoid函数下式2-2为Sigmoid激活函数的表达公式: Sx=11+Sigmoid会有着不错的相关效果。可从公式中画出相关函数图看出,它的整体值的值域在(0,1)中。那么我们便能够想到它的具体实现功能,便是生成概率。但是Sigmoid的函数曲线在靠近0的附件其斜率变化很大,但在这部分以外的区域变化就小了很多,从而会使它的输出值会很难有大变化,而在0的附近变化也会过大,这也就是Sigmoid其中之一的问题。所以相较于ReLU,它在神经网络这一领域中会略逊一筹。Tanh函数下式2-3为Tanh激活函数的表达公式: fx=Tanhx从以上表达式可以看出,Tanh函数和Sigmoid函数的联系如公式(2-4): Tanhx=2sigmoid2Tanh函数与Sigmoid函数大体相似,在其中进行选择使用需要具体问题具体分析。2.2.2卷积层的类型卷积层的类型其实是根据卷积层内部的大小块来决定的,也就是设置它的宽和高以及大小块的个数。这部分参数会直接影响到其在图像数据矩阵中的计算机计算资源的消耗,因为在参数设置过大的情况下,计算便会变得更为复杂。同时这些参数会使图片提取出不同的图像特征。在这之外,卷积层进行移动的步数即步幅,块内的数据也会影响到这些内容。对于步幅大小的设置需要进行合理的分析和调试,而对于块内的数据,只要采取合理的生成随机数的方案,就能达到优秀的性能。2.2.3池化层的类型池化层和卷积层内部类似,也是由内部的大小块决定。他的大小块会在图片数据矩阵中划分相应大小的区域,然后进行相应的操作。一般这种操作也就是池化方式有2种,分别为最大池化(MaximumPooling)和平均池化(AveragePooling)。最大池化就是在这个相应的大小区域内取最大值作为输出;平均池化就是在这个相应大小区域内取和均值最为输出。它与卷积层一样,池化层内部块大小和其步幅也会影响到相关计算机计算资源的消耗。所以合理设计池化层,是个优化模型性能的不错的选择。另外,将会在AlexNet中提出一个新的理念设计,也就是重叠池化。它在某种程度上可以减缓过拟合现象,从而提升模型的性能。具体内容后续会进行讲解。2.3常用的卷积神经网络模型2.3.1AlexNet模型在LeNet提出的几年后,AlexNet横空出世,并获得了相关领域的竞赛奖项。因为该模型在与参与竞赛的其余模型相比,其识别准确率相差较大,所以这对我们日常生活有着很大的帮助,最终该模型成为了那时极为火热的网络模型。AlexNet模型的框架设计图2-1AlexNet的框架设计如图2-1所示,AlexNet的架构设计其实并不复杂。首先是对图片进行预处理的操作,将图片进行剪切,得到大小为224×224的图片,之后用于图像增广,扩展数据集。然后便将增广后的图片作为模型的输入。图中设计的卷积大小块的相关参数如个数、尺寸和步长将不再进行说明,可以直接图中看出。第一层经过卷积处理后进行了第一波图像特征采集。在这之后便使用最大池化和相关技术以减少计算机计算资源的消耗。第二层同样是卷积层核最大池化和局部响应归一化处理。只是调整了卷积大小块的个数、尺寸和步长。第三层、第四层、第五层见图,这三层中未进行池化和局部响应归一化处理。最后的三层则是全连接层,前两层全连接层各包含4096个神经元,最后一层是Softmax全连接层,作为模型的输出,对应着1000分类。AlexNet的特点AlexNet引入了一个新的概念即重叠池化[11]。重叠池化其实就是在一般的池化方式上进行改动,让其步幅小于其大小块的大小,这样就可以减缓过拟合现象。AlexNet又引入了一个新的减少计算机计算资源消耗的的方式,也就是局部响应归一化操作。局部响应归一化操作其实就是为了增加模型的泛化能力。其操作的内容就是给神经元增加了竞争的机制,让神经元相互竞争,增加响应较大的神经元的反馈,减少响应较小的神经元的反馈。在之前小节中,我们曾介绍了ReLU激活函数。在当时,ReLU提出还没多久,所以并未受到广泛的应用。而AlexNet的作者却采取了大胆的行动,决定使用ReLU激活函数。因为他发现ReLU函数的特性很契合卷积神经网络,且因其函数图的特性,会减少计算机计算资源的消耗,以此提升模型的性能指标。正因为深度学习的特性中有着数据集越多性能越强大的特性,所以AlexNet也决定对原图片数据集进行扩充,作者专门对数据集设计了几种数据增强方式,并且这几种方式对AlexNet模型有着很大的提升。和ReLU一样,丢失Dropout也是提出没多久的新概念,新概念都是需要长时间的验证才能运用到实际中,而AlexNet的作者相信了这一技术,使用该技术提升了其模型的健壮性,让AlexNet适用在各种场景中,也相应的缩短了这一技术所需要的验证时间。Dropout的内容会在后续章节中进行介绍。2.3.2DenseNet模型ResNet的提出已经震惊了图像识别领域,但是DenseNet提出后让人们更为吃惊,虽然DenseNet是基于ResNet而进行改变的网络模型,但它摆脱了传统的固定思维。它在各层之间使用了别层的特征,加强了特征的联系,重用了特征。就凭此得到了更好的效果,成为了CVPR2017年的最优秀论文。DenseNet模型的框架设计图2-2DenseNet的具体框架DenseNet承上与ResNet,连接紧密。如上图2-2所示,各层之间都有着联系,且每一层的输入都会跟前面的层相连接。图中的c代表了Channel,意思是在Channel维度上连接,具体使用的函数为Concat。DenseNet的这种特征重用,即多层连接作为输入的操作,减缓了梯度消失现象。在DenseNet中,会连接前面所有层作为输入,如图2-2,见公式(2-5): xl=HlHl(·)特征传递就是将特征传递给其他层。他不是把前面层指向后面的层,在DenseNet中,它是将某层前面的所有层的特征,用Concat函数连接在一起后传递进去。图2-3DenseNet的框架设计如图2-2所示,DenseNet的网络框架其实不难理解,它和AlexNet一样,是基于卷积和池化操作完成的。只是其内部将这些操作设置好后取了个全新的名字。其中先介绍DenseBlock,正如其名,Dense正如其名,意思为密集连接。而Block就说明它将相关操作封装成了一个块,其内部可以包含许多不同的操作,不同操作会造就不同的性能,也即图2-3中不同的版本,本文主要采用DenseNet-201的版本。其内部主要是采用1×1Conv和3×3Conv,详细的内容后面会进行具体的介绍。然后介绍Transition,正如其名,意思为过渡,又从图中可以看出,它总是位于DenseBlock之间。其采用的操作为1×1Conv和2×2AvgPooling,其中AvgPooling的作用是降低特征图的大小。在图2-3中,k代表每个DenseBlock中每层输出的FeatureMap个数,一般都采用较小的k。DenseBlock中的非线性组合函数Hl(·)采用的是BN+ReLU+3×3Conv的结构。其中的1×1Conv的卷积操作,就是所谓的Bottleneck,目的是减少输入的FeatureMap数量,既能降维减少计算量,又能融合各个通道的特征。那么,DenseBlock内部的操作为BN+ReLU+1×1Conv+BN+ReLU+3×3Conv。称为DenseNet-B结构。Transition模块层的结构为BN+ReLU+1×1Conv+2×2AvgPooling,称为DenseNet-C结构。对于既有BottleneckLayer,又有Transition接下来讨论DenseNet的特点及优点。DenseNet的特点及优点在DenseNet中,DenseBlock所采用的是ReLU在前,卷积等在后的顺序。而在一般的模型中通常使用的都是ReLU在后,卷积等操作在前的顺序。作者曾表明,若采用一般的顺序进行设计,性能会变差。DenseNet具有以下几种优点:减缓了梯度消失(Vanishing-Gradient)[13],加强了特征的传递,更有效的利用了特征,一定程度上减少了参数数量。2.3.3GoogLeNet模型GoogLeNet如其名是由谷歌开发的一种全新的模型。一般都会好奇为什么不取名为GoogleNet,而是GoogLeNet。但从中你会发现,其中有着LeNet。因为这是在致敬LeNet。GoogLeNet也曾在相关竞赛中获奖,这也证实了其火热程度。GoogLeNet的框架设计GoogLeNet设计出了一个和DenseNet类似的整合操作的模块,该模块的内部也一样包含着一些卷积和池化的操作,这个模块就是Inception。这个模块会在之后的小节中进行相关的讲解图2-4展示了GoogLeNet的架构设计,其实从图中便可以看初,GoogLeNet模型深度很大,一般来说,模型随着深度的提高,过拟合现象就越突发明显,GoogLeNet也知道这一问题,所以就用到了GoogLeNet设计好的新模块Inception。图2-4GoogLeNet的框架设计GoogLeNet的创新点在上述小节中,我们谈到了GoogLeNet设计了一个新的模块Inception。本小节将会介绍Inceptionv1的模块设计和其特点。Inceptionv1的模块设计如图2-5所示:图2-5Inceptionv1的模块设计在GoogLeNet中,Inception模块内部包含着1×1Conv、3×3Conv、5×5Conv和一个3×3MaxPool。从图中可以看到这些卷积和池化操作的输入都来自于上一层,进行操作之后又连接到一起输出。在2.1节中,我们曾介绍过卷积层的具体作用,在这里它的作用也是用于提取图片数据矩阵的最为突出的部分也就是图像特征。不同大小的卷积层会在不同数据矩阵中提取到不同的图像特征。同时进行池化的并行处理,这些都不难理解。这种全操作进行并行处理的方式,降低了使用的参数数量,也就相应的减少了计算机计算资源的消耗,但是这并不是最优的方式。所以GoogLeNet在Inceptionv1的模块设计上进行了相应的改进。进行改进后的新的Inceptionv1模块如图2-6所示:图2-6改进后的Inception模块设计改进后的Inceptionv1模块其实就是加多了几个1×1Conv的操作。一般来说只是单纯的使用1×1Conv的操作并没什么作用,但正是GoogLeNet采用了并行连接的方式,使得在改进后所使用的计算资源的消耗进一步减少。一般才进行卷积操作后,生成特征图的通道数会指定为卷积层设置的通道个数,然后1×1Conv就是单纯的改变了通道数,单独用确实没什么用,但是在运用在并行运算的时候,不同的运行通道经过这个1×1Conv操作后的通道数减少,后续的通道数减少,也就导致了计算资源消耗的减少。改进前后计算资源变换如下表2-1,表2-2所示:表21Inceptionv1改进前的计算资源变换输入x(假设为32*32*128)假设对x进行1×1Conv-16操作(消耗:128*1*1*16)假设对x进行3×3Conv-32操作(消耗:128*3*3*32)假设对x进行5×5Conv-64操作(消耗:128*5*5*64)总消耗资源相加为:243712表22Inceptionv1改进后的计算资源变换输入x(假设为32*32*128)假设对x进行1×1Conv-16操作(消耗:128*1*1*16)假设对x进行1×1Conv-32和3×3Conv-32操作(消耗128*1*1*32+32*3*3*32)假设对x进行1×1Conv-16和5×5Conv-64操作(消耗:128*1*1*16+16*5*5*64)总消耗资源相加为:430082.4本章小结第三章首先是对一些基础知识进行了讲解,然后介绍了近年来十分流行的几种卷积神经网络模型的发展、框架和特点,方便后续进行网络模型的改善设计。第三章家用家具分类的需求分析第三章家用家具分类的需求分析3.1家用家具分类的主要任务本文主要采用深度学习中卷积神经网络的方法来识别分类家用家具图片所属的类别。在现有的模型上进行相关调整,以达到优化模型达到提升性能的目的。故,本文的主要任务是设计识别床、椅子、沙发、桌子和衣柜的卷积神经网络模型算法,并最后实现家用家具分类的演示系统。由于大体过程使用的是个人用户计算机,所以在设计的时候缺乏庞大的计算能力及计算资源,还要考虑到在各种环境下会有所限制。所以还需要实现应用轻量化,应用环境多元化的特点下设计一个性能指标达标的卷积神经网络模型。床、椅子、沙发、桌子和衣柜的图片分别如图3-1,图3-2,图3-3,图3-4和图3-5所示。图3-1床图3-2椅子图3-3沙发图3-4桌子图3-5衣柜3.2家用家具分类的功能需求在实现完几种卷积神经网络模型算法后,本文还会设计一个方便用户使用的家用家具分类算法的演示系统。该系统面向用户,且用户界面简介,让人简单易懂。在开始,该系统便会提示用户进行上传家用家具图片,在选定图片后,会经过某种处理之后成功上传到程序内,之后该图片便会显示在演示系统上,用于与用户的交互反馈,提醒用户。之后按下检测按钮,软件便会调用之前已经训练好的模型,并将图片经过一系列的处理后喂入卷积神经网络模型中,然后网络模型便会分析家用家具图片所属的类别,然后将该结果显示在演示系统上,反馈给用户。3.3家用家具分类的性能要求本文实现的家用家具分类算法是针对床、椅子、沙发、桌子和衣柜这五种家用家具类的。因为该算法将会面向用户,所以需要有着不错的性能指标,这样才会有可信度,让用户愿意使用。故本文依照此目的进行设计,最终设计的家用家具算法有着近70%左右的准确率。3.4家用家具分类算法的难点家用家具分类算法的核心技术点是正确识别和分类图片所属的类别,其大致就是设计一个优秀的模型对图片进行识别分类。而判定一个模型是否优秀,主要就是看这个模型在实际应用中的识别准确率。但是影响模型准确率的主要核心点就是所设置模型的相关参数,以及相关的数据矩阵。所以该家用家具分类算法的难点就是要得到不错的模型下的相关参数以及数据矩阵。但在这前提下,深度学习是数据越多模型训练就会变得更加优秀,在现有的cifar-100数据集所含数据不足的情况下,还需要解决的一个难点便是如何增加数据集。当然光是数据量和训练的模型优秀还不够,还需要模型对新数据有着不错的泛化能力,所以减缓过拟合现象也是个难点。3.5本章小结第三章主要对家用家具分类进行了相关的需求分析。首先明确表达了需要完成的具体任务,然后在这些任务下提出了需要实现的功能需求,之后又提出了一些任务下的性能需求,最后再一次捋了一遍总体过程,并总结全部过程中的相关难点。第四章家用家具分类算法的设计第四章家用家具分类算法的设计4.1家用家具数据集在公开的cifar-100数据集中,有着家用家具householdfurniture超类,超类中包含着床,椅子,沙发,桌子,衣柜5个基本类。下载网址链接有:CIFAR-10andCIFAR-100datasets()。所使用的版本为CIFAR-100pythonversion。该超类中每个基本类含有600张图片,分为500张训练图片和100张测试图片。下载相应的版本包,并用官方所提供的unpickle函数进行解包。通过家用家具超类相应的标签(超类标签为5)找到床(5->0),椅子(20->1),沙发(25->2),桌子(84->3),衣柜(94->4)5个精细标签,然后生成相应的训练集和测试集的图片。之后在进行数据划分的操作,由于在训练过程中(具体在4.3节提到)会使用验证集,故将500张训练图片,划分成400张图片作为训练集,100张图片作为验证集。此处使用了numpy,cv2,pickle库进行相关实现。在上一节中,我们曾说到用于训练的数据集不够,所以本文采用了数据增强的方法,以提高家用家具数据集的数量。以解决家用家具数据集中数据量较少的问题。具体的操作方法会在下一小节中进行说明。4.2数据增强数据增强(DataAugmentation)[14],就是用已有的数据来创造新数据的过程。一般来说,当我们数据量不够时,我们不便于去采集大量的新的数据,这时候便提出了一个新的概念,数据增强。数据增强会在已有数据的基础上,采用一些方式来扩充数据集。采用的方法越多,模型就会越健壮。所以本文会对家用家具图片数据集进行图像增强处理。数据增强有着几种常见的方式,分别是翻转、旋转、比例缩放、裁剪、移位、添加噪声、颜色空间变换和变换颜色。翻转,可以对图片进行水平或垂直翻转。旋转,就是让图片旋转设置好的角度,其中可能涉及到填充问题,一般采取按0填充。比例缩放,可以让图片按照一定大小的比例缩小,放大图片。裁剪,与缩放不同,只是从原始图片中随机抽样一个部分,然后把它的大小调整为原始图片的大小。移位,通过把图片沿着X轴或Y轴(或两者)移动。添加噪声,给图片加入相关的噪音,如高斯噪声,椒盐噪声。颜色空间变换,通过变换图片的色域空间来生成图片。变换颜色,就是通过调整图片的参数如亮度、饱和度和色调等参数来生成新的图片。本文采用了翻转和颜色空间变换两种图像增强方法来扩展训练数据集。原图400张,经过两种方法后,各自生成400张图片。则每个类别进行数据增强后数量为1200张,即总共6000张训练图片将会喂入卷积神经网络进行训练。4.3相关网络的设计4.3.1网络模型的训练方式本文将在现有模型的基础上,在尽量不改变模型的深度的同时,对模型的相关参数进行微度调整,具体的相关内容会在下一小节中进行讲解。同时又把数据集划分成训练集、验证集和测试集三个部分,有6000张训练集图片参与训练,500张验证集图片作进行验证,500张测试集图片进行测试。本文在读取数据集的时候,选择的是存储图片的路径为作为图片列表image_list,之后只需根据路径读取图片。如果直接存放图片的数据矩阵,那么数据内容将会过大,则无法喂入网络。而相应的标签列表label_list存放着图片所属的类别,此时未经过单热编码处理。然后便将image_list和label_list两个列表拼接,这样便于之后进行shuffle打乱顺序。最后再拆分开来,这样就完成了制作数据列表image_list和标签列表label_list。之后在get_batch函数中,将整个训练过程的训练集的批量大小batch_size设为200,就是说每次训练时会读取200张训练集图片参与喂入相关的卷积神经网络模型。而验证集和测试集的批量大小val_batch_size直接设置成500,就是说验证和测试的时候,直接将所用的图片喂入相关的卷积神经网络。同时类个数num_classes设置成5,对应着床,椅子,沙发,桌子,衣柜5个类。最后设置验证标志val_iters为50,意思是每间隔50次训练就进行一次验证,同时会保存模型的相关数据,且生成的相关信息将会写入到日志文件中,以便后续测试及演示系统搭建时使用和观察。三个网络模型的训练次数不定,不同网络有着些不同的参数,在后续小节中会进行说明。4.3.2网络模型的架构设计AlexNet模型的架构设计本文设计的AlexNet模型大体参考图2-1,模型的深度即5层卷积层,3层池化层。但由于cifar-100python数据集中的图片像素大小为32×32,RGB的3个通道。与AlexNet模型的图片输入尺寸有所不同。所以打算在不改变AlexNet模型的模型深度的同时,在相关参数上进行改动(后续几个模型不再进行说明)。然后便开始模型的训练,AlexNet模型训练次数大致在1500轮左右。AlexNet模型的架构设计如下表4-1:表4-1AlexNet模型的架构设计输入(大小为32×32的图片)Conv(ReLU)MaxPoolLRNConv(ReLU)MaxPoolConv(ReLU)Conv(ReLU)Conv(ReLU)MaxPoolFC1(BN+ReLU+Dropout)FC2(BN+ReLU+Dropout)OutSoftmaxAlexNet模型的相关参数设置如下表4-2:表4-2AlexNet模型的相关参数设置Wc1:[5,5,3,96]Bc1:0Wc2:[5,5,96,256]Bc2:0.1Wc3:[3,3,256,384]Bc3:0.1Wc4:[3,3,384,384]Bc4:0.1Wc5:[3,3,384,256]Bc3:0.1Fc1:[3*3*256,2048]B_fc1:0.1Fc2:[2048,1024]B_fc2:0.1Out:[1024,num_classes=10]B_out:.2DenseNet模型的架构设计本文设计的DenseNet模型大体参考图2-3,主要由DenseBlock和Transition组成。DenseNet模型训练次数大致在8000轮左右。Bottleneck_layer和Transition其内部组成如下表4-3,4-4所示:表43Bottleneck_layer的内部组成BN(BatchNormalization)ReLU1×1Conv-96DropoutBN(BatchNormalization)ReLU3×3Conv-24DropoutConcat表44Transition的内部组成BN(BatchNormalization)ReLU1×1Conv-24Dropout2×2AvgPool上表4-3中未体现出在Channel维度上进行Concat拼接,Concat的内容会在4.4.3中进行讲解,在这里只讲解其大致的实现。设计的代码中会设置一个layers_concat列表,在每次经过Bottleneck_layer处理后,便调用列表的apped函数将其添加如列表。然后当进入DenseBlock时,先进入Bottleneck_layer进行基础的上表4-3的操作,然后便进入循环中,对之前所有存入列表的即各层的输入进行Concat3维拼接。这样就完成了DenseBlock内部的全部内容。若想进一步了解,可以查阅相关代码或自行搜索相关资料。DenseNet具体的架构设计如下表4-5,相关代码如下图4-5所示:表45DenseNet模型的架构设计输入(大小为32×32的图片)7×7Conv-48MaxPoolDenseBlockTransitionDenseBlockTransitionDenseBlockTransitionBN(BatchNormalization)ReLUGlobal_AvgPoolFlatten+DenseSoftmaxGoogLeNet模型的架构设计本文设计的GoogLeNet模型大体参考图2-4,图2-5。Inception是GoogLeNet中最为核心的部分。故本部分将主要进行介绍GoogLeNet中的核心模块Inceptionv1。GoogLeNet模型训练次数大致在4000轮左右。其内部组成如下表4-6所示:表46Inception的内部组成输入x对x进行1×1Conv-16操作对x进行3×3Conv-16操作对x进行5×5Conv-16操作对x进行MaxPool操作上述四个操作进行Concat拼接故GoogLeNet的具体的架构设计如下表4-7所示:表47GoogLeNet模型的架构设计输入(大小为32×32的图片)3×3Conv-32(ReLU)MaxPoolInception_aInception_bMaxPoolInception_cInception_dMaxPoolFlattenDenseSoftmax4.3.3网络模型的训练结果本文所采用的几种卷积神经网络模型在训练之后,训练集的准确率接近100%,在训练网络的同时还会进行验证集的验证,验证集的准确率达到了70%。最后在使用设计好的相关程序,调用模型对测试集测试,测试集的准确率达到了70%。图4-1,图4-2,图4-3分别对应着AlexNet模型的训练集准确率,验证集准确率以及Loss。图4-1AlexNet的训练集准确率Acc图4-2AlexNet的验证集准确率Acc图4-3AlexNet在训练集上的Loss图4-4,图4-5,图4-6分别对应着DenseNet模型的训练集准确率,验证集准确率以及Loss。图4-4DenseNet的训练集准确率Acc图4-5DenseNet的验证集准确率Acc图4-6DenseNet在训练集上的Loss图4-7,图4-8,图4-9分别对应着GoogLeNet模型的训练集准确率,验证集准确率以及Loss。图47GoogLeNet的训练集准确率Acc图4-8GoogLeNet的验证集准确率Acc图4-9GoogLeNet在训练集上的Loss4.4网络模型的相关设计要点4.4.1局部响应归一化LRN在AlexNet中引入了局部响应归一化层(LocalResponseNormalization),简称LRN[15],是深度学习中提高准确率的技术方法,用于AlexNet中。LRN其实就是增加活跃的神经元的反馈,在神经网络中的作用就是提高准确度,从而提升模型的泛化能力。一般在和ReLU一起使用的使用,效果会更加的明显。一般能将准确率提高1%左右。具体公式如公式(4-1)所示: bx,yi=a其中a代表进入即使用LRN的输入x;k代表着偏移量即bias;α,β在原模型的基础上不修改。在本文的具体实现中,使用Tensorflow便可直接调用该函数(后续不再进行说明,使用的框架均为Tensorflow),相关的参数设置和原模型一样,不进行改动。4.4.2重叠池化单元重叠池化(OverlappingPooling),就是池化与池化之间重叠的部分。一般来说是在池化窗口大小z大于位移s时发生。是在AlexNet中提出和使用的。相对于传统的no-overlapping-pooling,即正常池化(窗口z=2,步长s=2)。而正常池化在输入图片的数据矩阵内容过多时,效果就不会表现得这么好。故采用重叠池化(窗口z=3,步长s=2)不仅可以提升精度,可以减少top-1,top-5分别为0.4%,0.3%,同时在一定程度上可以减缓过拟合。4.4.3数据拼接Concat层数据拼接Concat[16]层的主要功能是实现输入数据的拼接。在DenseNet和GoogLeNet中都使用到了这个技术。Concat层会将多个输入连接在一起,对于一般的图片而已会有着3个维度channels,height和width。在运用到模型内部时,会多一个数量num,就变成了num×channels×height×width。默认值为0就表示在num这个维度上,即数量上进行叠加。为1表示在channels通道上进行拼接。除了拼接维度外的其他维度都必须相等。4.4.4数据压平Flatten层Flatten层用来将输入数据压平,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不会影响batch的大小。使用Flatten可以大大的减少参数的使用量,减缓过拟合现象。为了更好的理解Flatten层的作用,可参考下表4-8。表48Flatten层的作用InputLayer(None,3,32,32)Conv2d(None,3,32,64)Flatten(None,6144)4.4.5单热编码One-Hot单热编码[17],从名称One中看出,其实就是使用0和1进行编码,它最为广泛的运用在类别分类中。在4.1中曾说过床(5->0),椅子(20->1),沙发(25->2),桌子(84->3),衣柜(94->4),上述的箭头便是进行类别划分,用于后续的单热编码处理。比如若归属于床类,则输出应为[1,0,0,0,0],若为椅子则[0,1,0,0,0],后续同理。一般在我们数据标签分散,不好处理的时候,便可以使用单热编码。但是在类别过多的情况下所消耗的空间会非常大,那么这个时候就可以对数据进行降维操作,常见的方法有PCA降维,而且PCA降维和单热编码处理这种组合也非常常见。4.4.6批标准化BatchNormalization批标准化[18]BatchNormalization,也称批归一化,是一种用于通过重新居中和重新缩放来对图层的输入进行规范化,从而使人工神经网络更快、更稳定的方法。BatchNormalization是神经网络中一种特殊的层,如今是各种流行的卷积神经网络的标配了。具体计算如下表4-9:表49Flatten层的作用InputValuesofxoveramini-batch:β={Mini-batchmeanμMini-batchvarianceσNormalizexOutput(Scaleandshift)y从上表中可以看出,BatchNormalization实现共4步。首先是对batch内的数据取均值操作,得到均值μβ;然后便使用均值,求出batch的方差σβ2;之后便是对数据进行标准化处理;最后便得到新的参数均值βBatchNormalization抑制了梯度消失现象的出现,且具有正则作用,不需要太依赖Dropout,减少过拟合。4.4.7学习率LearningRate在卷积神经网络中,卷积层的权重参数开始时是随机的初值,当然可以才有某种方法,使得这些初值具有一定的特征。这些权重会在训练过程中不断的进行相关调整,有时会变大,有时会变小。一般会在模型结束时停止变动,而这些数值也是判断模型是否优秀的重要数据,因为如果优秀的话,我们便会采用该模型应用于日常生活中。而在这其中,这些权重变大变小,又是怎么变动的呢?这里就引入了学习率[19](LearningRate)的概念,它是我们在模型训练过程中一个及其重要的参数,其数值会决定权重变化的幅度,也决定着所设计的模型能否达到最优状态。学习率即每一步训练中权重改变的大小的比例。具体公式如公式(4-2)所示: θj←θj−α∆J(θ)当学习率设置过小时,收敛过程如下图4-10:图410学习率过小时的收敛过程当学习率设置过大时,收敛过程如下图4-11:图411学习率过大时的收敛过程从上图4-10,4-11可以看出,学习率就相当于在函数图上移动的步幅。当学习率过小的时候,移动步幅就小,在函数图上移动的距离就短,那么就会需要很长时间即很缓慢的移动到局部最优点。而学习率过大的时候,移动步幅就会偏大,在函数图上移动的距离就过长,会导致在局部最优点两侧来回振荡,甚至有可能无法到达局部最优点。所以,调节学习率参数是个非常重要的部分,因为它会影响训练轮数从而间接影响到Loss、Acc的变化速率。故选择好合适的值,会对模型有着不少的好处。4.4.8丢失DropoutDropout大致如图4-12所示:图412神经网络Dropout前后从图中可以看出,在Dropout之前,标准的神经网络是采用全连接的策略的。而在采用Dropout后,在神经网络中部分神经元未进行连接,而是处于孤立的状态。这就是Dropout,也就是丢失神经元。在一轮训练中,通过设置好的Dropout率,神经元便会根据这个Dropout率,选择在本轮训练中是否会失活即被丢弃。而在下一轮训练时又恢复,然后再循环训练。因为传统神经网络中的神经元是全连接的,这样增强了神经元之间的紧密连接,但是这样可能会产生隐藏着的某种有着固定关系的作用,这种作用随着训练次数的增多,影响比会逐渐增大,即容易引起过拟合现象。所以选择采用Dropout,Dropout不仅破坏了这种隐藏的固定关系,而且还让模型学习到了全新的特征。所以Dropout是一个不错的减缓过拟合现象的策略。4.4.9交叉熵损失函数损失Loss,其实就是实际值y与预测值y的差值的绝对值,这个值越小越好。而损失函数就是相关的计算策略。本文选择使用交叉熵损失函数[20](categorical_crossentropyloss)作为损失函数。在具体实现时,是选择直接调用Tensorflow中的tf.nn.softmax_corss_entropy_with_logits函数,即在模型后不进行Softmax处理,转而调用Tensorflow内置好的函数。4.5相关操作流程本节主要进行讲解相关训练、验证和测试流程。首先设置好相关变量,方便后续进行操作,有着训练日志、相关信息存储的空列表、模型的保存。同时为了方便计算,提升训练速度,还启动了相关线程。之后便进入训练循环流程。在训练中对训练数据和训练标签进行划分batch的操作,然后对训练标签进行单热编码处理。之后便喂入网络中,调用适配器,计算损失Loss、准确率Acc,然后将训练Loss值和准确率Acc值存入列表graph_cost和graph_acc中,并打印出相关结果。然后在训练循环中,增加一个次数为50的判定,用于验证集进行验证。然后又划分batch、单热编码处理、计算准确率。最后将验证集准确率Acc存入列表graph_val_acc中。最后保存模型,根据列表中的数据绘制图表。训练和验证的相关流程图如图4-13所示:图413训练和验证的相关流程图训练完成之后,便开始对模型的测试。调入之前训练好的模型,之后的操作流程和上述相同,测试相关流程图如下图4-14所示:图414测试的相关流程图4.6存在的不足之处在本文设计的三种卷积神经网络中,AlexNet模型的相关超参数并未实现最优,因为难以进行专业性的调整。DenseNet的框架设计用的是基本框架,且DenseNet训练轮数过多,所以还有待改进。对于GoogLeNet来说,由于计算资源有限,个人计算机难以再加深网络模型的深度。且数据增强所使用的方式不算规范,部分方式提升的效果不算大。本文也未采用动态调整学习率这一方式。故这三种卷积神经网络还有待改进,还有望再进一步提升这三种卷积神经网络模型的准确率。4.7本章小结第四章主要介绍了实现的相关内容。首先介绍了所采用的数据集出处和使用介绍,告诉如何安装和使用。同时在数据集不太够的情况下,采取了相应的措施以使数据集更加健壮。然后介绍了模型算法的训练前处理,这样方便后续进行训练。然后讲解了本文所采取的模型相关设计改动,并展示了最终成果。然后讲解了本文3中卷积神经网络的相关设计要点,理解总体细节,介绍相关流程。最后讲解本文卷积神经网络算法的不足之处。第五章家用家具分类演示系统的实现第五章家用家具分类演示系统的实现5.1家用家具分类演示系统的功能在实现了AlexNet,DenseNet和GoogLeNet三种经典的卷积神经网络模型后,本文在这三个模型算法的基础上,实现了基于这三模型的家用家具分类演示系统。这个演示系统的搭建的作用是将这三个卷积神经网络算法运用到实际生活当中,主要目的是让用户可以在其日常生活当中对拍摄到的相关家用家具照片上传到该演示系统中。通过检测按钮即可调用之前在训练数据集上已经训练好的模型,并将上传的图片喂入相应的卷积神经网络当中,然后生成出该图片所属的家用家具类别,并且最后将该类别反馈给用户,用户便可通过该系统得到的最终数据来决定现实工作中下一步即将采取的措施。5.2家用家具分类演示系统的流程家用家具分类演示系统事先制定好了检测图片的文件夹路径,打开该演示系统后,用户通过点击Selectone按钮,之后便可以在指定文件夹下选取任意类别的家用家具图片进行检测。选择好了家用家具图片后,该图片便会显示在演示系统中,用于提醒用户选择好了的家用家具图片已经上传成功了。之后用户再点击Belongwhat按钮,便会预加载相应的网络模型(相关模型会在标题上显示),然后将图片经过相应的处理后喂入网络模型中,之后只需要等待检测的结果,最后结果便会显示再演示系统上。此时,用户再点击Exit按钮即可退出演示系统。该家用家具分类演示系统的操作流程图如图5-1所示:图5-1家用家具分类演示系统流程图图5-2为演示系统的初始界面,图5-3,图5-4分别为选取图片,识别分类后的演示系统界面图。图5-2演示系统的初始界面图53演示系统选取图片图54演示系统识别分类5.3实验环境和所需工具为了将家用家具分类方便用户日常操作使用,本文将家用家具分类演示系统可视化。整个演示系统在Python的Tensorflow环境下运行工作,因为其中涉及到了喂入网络,需要重新反馈到Tensorflow的环境下,搭建该演示系统主要使用的库为Python的tkinter。Tkinter是一个图形用户工具包,它提供了演示系统所需要的许多基础部件和交互型部件,诸如标题title、背景background、标签Label和按钮Button。同样的还使用到了PIL库,该库主要用于处理图像模块。主要用于打开所选择的家用家具图片及调整图片的显示大小。最后再配合ImageTK模块,该模块将用PIL所读取的图片可用于Tkinter的部件中。5.4本章小结第五章主要说明了在之前三种经典的卷积神经网络模型算法的基础上实现的演示系统的功能和具体的操作流程。最后简单的介绍了实现演示系统所需要的图形工具包。第六章结论第六章结论6.1全文总结本文实现了床,椅子,沙发,桌子,衣柜的图片分类算法和演示系统。图片分类采用了AlexNet、DenseNet和GoogLeNet三种经典的卷积神经网络模型。为了达到应用轻量化,应用环境多元化、性能指标达标的目的,本文基于上述3中网络模型上进行了相关设计改动。最终满足了上述3个需求目的,且准确率达到了70%。在这之后又实现了家用家具分类系统,用户可以自行选择家用家具图片上传并识别所属类别。该系统可以在实际生活中帮助相关工作人员在相关工作中可以迅速识别家用家具图片所属的类别。6.2后续工作展望在设计卷积神经网络算法时,本文面临着数据集过小的困难。在采用数据增强的方法有所提高,但是随着方法的增加后,效果提升逐渐没有那么明显了。且模型的优化还有待提升,当然如果能获取额外的获取家用家具数据是最好的,因为这是最直接提升模型准确率和实用性的方式,只是获取途径有些麻烦。参考文献参考文献KrizhevskyA,SutskeverI,HintonGE,etal.ImageNetClassificationwithDeepConvolutionalNeuralNetworks[C].neuralinformationprocessingsystems,2012:1097-1105.ShinH,RothHR,GaoM,etal.DeepConvolutionalNeuralNetworksforComputer-AidedDetection:CNNArchitectures,DatasetCharacteristicsandTransferLearning[J].IEEETransactionsonMedicalImaging,2016,35(5):1285-1298.KrizhevskyA,SutskeverI,HintonGE.Imagenetclassificationwithdeepconvolutionalneuralnetworks[C]//Advancesinneuralinformationprocessingsystems.2012:1097-1105BengioY,SimardPY,FrasconiP,etal.Learninglong-termdependencieswithgradientdescentisdifficult[J].IEEETransactionsonNeuralNetworks,1994,5(2):157-166.SamSM,KamardinK,SjarifNNA,etal.Offlinesignatureverificationusingdeeplearningconvolutionalneuralnetwork(CNN)architecturesGoogLeNetinception-v1andinception-v3[J].ProcediaComputerScience,2019,161:475-483.PintoN,CoxDD,DiCarloJJ.Whyi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论