图像描述自动生成技术设计与实现-毕业论文.docx
- 文档编号:26501562
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:27
- 大小:1.11MB
图像描述自动生成技术设计与实现-毕业论文.docx
《图像描述自动生成技术设计与实现-毕业论文.docx》由会员分享,可在线阅读,更多相关《图像描述自动生成技术设计与实现-毕业论文.docx(27页珍藏版)》请在冰豆网上搜索。
---文档均为word文档,下载后可直接编辑使用亦可打印---
摘要
图像描述自动生成是一个融合计算机视觉和自然语言处理的综合问题,主要目的是:
为给定的图像生成描述其内容的人类可阅读的句子。
图像描述是一项非常具有挑战的任务,但它也有着重要的实用价值,比如为视力障碍人士提供生活辅助。
图像描述任务就是要让机器学会“看图说话”,不仅需要提取图像的内容特征,还要用自然语言描述图像中的物体及其相互关系。
随着深度学习的发展,利用卷积神经网络和循环神经网络相结合的结构实现图像描述逐渐成为主流的方法。
本课题的主要任务是设计开发一款图像描述自动生成系统,搭建深度神经网络模型在图像数据集上进行训练,使其能生成给定图像的目标描述。
本文首先介绍了课题的研究背景及发展现状,然后介绍了系统的相关知识和技术,接着阐述了详细设计与具体实现,最后进行了功能测试,通过一些实例对系统的表现进行分析。
关键字:
图像描述,深度学习,卷积神经网络,循环神经网络。
Abstract
AutomaticallygeneratingthedescriptionofanimageisacombinationofcomputervisionandNaturalLanguageProcessing.Themainpurposeistogeneratehumanreadablesentencestodescribethecontentofagivenimage.Imagecaptionisaverychallengingtask,butitalsohasimportantpracticalvalue,suchasprovidinglifesupportforpeoplewithvisionimpairment.Theimagecaptiontaskistoletthemachinelearnto"lookatandtalkaboutthepicture",notonlytoextractthecontentoftheimage,butalsotodescribetheobjectsintheimageandtheirrelationsinthenaturallanguage.Withthedevelopmentofdeeplearning,itisgraduallybecomingamainstreammethodthatcombiningthestructureofconvolutionalneuralnetworkandrecurrentneuralnetwork.
Themaintaskofthisprojectistodesignanddevelopanautomaticgenerationsystemforimagedescription,andbuildadeepneuralnetworkmodeltotraintheimagedataset,sothatitcangeneratethetargetdescriptionofthegivenimage.Thispaperfirstlyintroducestheresearchbackgroundanddevelopingstatusofthesubject,thenintroducestherelatedknowledgeandtechnologyofthesystem,thenexpoundsthedetaileddesignandconcreterealization,andfinallycarriesoutfunctionaltesting,andanalyzestheperformanceofthesystemthroughsomeexamples.
Keywords:
Imagecaption,deeplearning,convolutionneuralnetwork,recurrentneuralnetwork.
第1章绪论
本章首先介绍图像描述自动生成任务的研究背景、任务定义,然后概述了本任务的研究现状,最后介绍了本文的主要工作。
1.1研究背景
近年来,多媒体硬件及软件技术日新月异地发展,多媒体信息数据迅速膨胀,不论是对于普通用户还是专业人士,如何对这些数据进行有效地管理、检索和利用已经成为了一个亟待解决的问题。
在这个数据飞速增长的时代,图像描述自动生成已经成为了计算机视觉和自然语言处理领域的一个热点。
科技的日益进步,带动了数据传输技术和信息平台的飞速发展。
早年网络间的信息传播主要以文字为主,而今随着谷歌、雅虎、新浪、搜狐等信息资讯平台和门户网站的不断发展,以及Twitter、Facebook、微博等社交平台的接连诞生,多种类型的数据的产生与传播得到了极大的促进。
这导致了我们处于一个信息爆炸的时代,每天都有海量的数据生成、存储、发布、传播。
尽管谷歌搜索等一些强大的搜索引擎在信息的搜索与获取方面提供了便利,但还存在着很多的细节值得我们去探索和改进,特别是在对多媒体数据的管理与检索方面。
多媒体数据包括文本,音频,图像,视频等多种形式,本课题关注有关图像的一些问题。
图像是人类视觉的基础,是自然事物的客观反映,是人类认识世界的重要信息源泉。
图像作为一种特殊的数据形式,主要通过色彩、纹理、形状和空间位置关系等来表达信息,通过人的视觉进行信息的理解和传递。
通常网络上的图像不是单独出现,有些图像会和与之相关的文字信息一起出现,例如新闻图片,图片会和相关新闻报道一起呈现;有些有地理位置信息、时间信息等人工标注的标签,如Flickr上用户上传的图片;有些具有社交性质,如Twitter、微博上的图片,往往有着简短的配字和其他一些社交信息。
随着智能手机的普及和智能数码相机的使用,人们可以很轻松的创造自己的图像并上传至网络,甚至可以配以相应的文字。
因此,如今网络上的图像数量正极快地增长。
图像数据十分庞大,如何有效的管理和检索这些数据,成为了学术界和工业界的关注点。
例如在图像检索方面,如果能为图像生成自然语言描述,那么在检索时就可以用文本进行检索,这在一定程度上能使检索所包含的语义更加全面完整,可以有效地增加检索的准确度。
1.2任务定义
本课题的目标是设计并实现一个图像描述自动生成系统,主要功能为接受用户给定的图像,经过处理后呈现对应的描述。
系统需要实现将输入图像转化为对应描述的功能,要求系统不仅能理解图像的内容,而且要能够使用自然语言对内容进行描述。
图像描述问题可以定义为二元组(I,S)的形式,其中I表示图像,S表示目标单词序列,其中S={S1,S2,…},St为从数据集提取的句子中的单词。
训练的目标是使最大似然估计p(S|I)取得最大值,即使系统生成的语句和给出的目标语句更加匹配,也就是用尽可能准确的语句去描述图像。
以当前主流的encoder-decoder结构为基础构建深度神经网络,在图像数据集上进行训练后,可以逼近使最大似然估计取最大值的函数,可以实现本课题的目标。
1.3研究现状
图像描述是一个融合计算机视觉和自然语言处理的综合问题,它的目的类似于翻译一张图片为一段描述文字。
随着机器翻译和大数据的兴起,出现了图像描述的研究热潮。
早期对于图像描述的方法主要依赖图像分割、标注和语句模板。
而随着深度学习领域的发展,一种将卷积神经网络(ConvolutionalNeuralNetwork,简称CNN)和循环神经网络(RecurrentNeuralNetwork,简称RNN)结合起来的方法在图像描述问题上取得了显著的进展。
2014年11月,谷歌的Vinyals等人[1]推出了NIC(NeuralImageCaption)模型。
NIC模型采用了机器翻译中常用的编码器-解码器(encoder-decoder)结构[4],即将原始数据编码成向量表示,再将其解码为目标数据。
在NIC模型中,原始数据为图像,目标数据为图像的描述,作为编码器的是深度卷积网络VGG16[13],作为解码器的是循环神经网络LSTM。
VGG16从输入图像提取特征向量,LSTM以该向量作为输入,输出表示概率的词序列。
这种将卷积神经网络和循环神经网络结合起来的encoder-decoder结构逐渐成为了图像描述方法的主流,很多方法都是在此基础之上进行改进。
受到注意(attention)机制在机器翻译中的发展的启发,Kelvin等人将这一机制引入到了图像领域[2],提出在图像的卷积特征中结合空间注意机制的方法,然后将上下文信息输入到encoder-decoder框架中。
在encoder阶段,与之前直接通过全连接层提取图像特征不同,作者使用较低层的卷积层作为图像特征,其中卷积层保留了图像空间信息,然后结合attention机制,能够动态地选择图像的空间特征作为decoder阶段的输入,为decoder阶段提供了图像上下文向量作为输入,该向量是当前时间步图像的注意区域的特征表达。
除此之外,还有许多对主流方法的改进方向,如改进循环网络[7],改进提取图像特征的卷积网络[8],还有调整结构的组合形式[9]等。
Flickr30k[14]、MSCOCO[15]等大型数据集的出现,也为基于深度学习的方法提供了数据的支撑,并为实验结果的比较提供了统一的标准。
谷歌等企业已经在图像搜索等领域将图像描述的成果应用于实际。
随着信息化程度越来越高,图像这类数据在生活中的使用已经非常普遍,为了能有效地管理和利用这些数据,开发一个图像描述自动生成系统是必要的。
1.4主要工作
本课题的目标是设计并实现一个图像描述自动生成系统。
本文首先对系统涉及到的相关理论知识进行介绍,并在此基础上进行系统的设计,然后阐述了详细设计和具体实现,最后对系统功能进行了测试与分析。
本系统使用深度学习任务中常用的Python作为开发语言,并使用基于tensorflow作为后端的keras框架搭建神经网络结构,在训练和测试时使用Flickr8k数据集。
第2章相关技术简介
本章对图像描述自动生成系统中涉及到的相关技术进行简介,包括以下内容:
nPython
nTensorflow
nKeras
n神经网络
2.1Python简介
Python是一种面向对象的、解释型的高级编程语言。
1989年,GuidovanRossum开发了Python语言。
Guido对Python的定位是优雅、明确、简单,Python适合入门程序员,具有很强的可读性,支持广泛的应用程序开发。
Python提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,用Python开发,许多功能不必从零编写,直接使用现成的库即可。
此外,Python还有大量的第三方库。
Python的特点:
结构简单,易于学习;代码清晰,方便阅读;源代码容易维护;具有丰富的跨平台的库;支持方便的互动模式;可移植性强;可拓展性高,可以用其他语言完成部分算法;提供所有主要的商业数据库的接口;支持GUI编程;可以嵌入到C/C++程序,获得脚本化的能力。
Python的一些缺点:
运行速度慢,作为解释型语言,代码在执行时会一行一行地翻译成机器码,非常耗时;代码不能加密。
2.2TensorFlow简介
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。
Tensor(张量)指N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从数据流图的一端流动到另一端的计算过程。
TensorFlow由谷歌大脑小组开发,用于机器学习和深度神经网络方面的研究。
TensorFlow具有高度的灵活性,不仅可以用于神经网络方面,只要可以将计算过程表示为一个数据流图,就可以使用TensorFlow。
TensorFlow支持CNN、RNN、LSTM等流行的神经网络模型,提供了有用的工具来组装子图,用户可以在TensorFlow基础上编写自己的上层库,也可以写自己需要的底层操作。
TensorFlow可以在CPU和GPU上运行,包括台式机、笔记本、服务器、手机移动设备等。
TensorFlow能给予线程、队列、异步操作等以最佳支持,可以将手边硬件的计算潜能全部发挥出来,也能自由地将不同计算元素分配到不同的设备上。
TensorFlow是开源的,学生、研究员、爱好者、创业者等等都可以在Apache2.0开源协议下使用TensorFlow。
谷歌的科学家用TensorFlow尝试新的算法,产品团队则用TensorFlow来训练和使用计算模型,这些都将直接提供给用户。
2.3Keras简介
Keras是基于Python的深度学习库。
Keras是一个高层神经网络API,由纯Python编写而成,基于TensorFlow、Thaana以及CNTK后端。
Keras能够实现简易和快速的原型设计,具有高度模块化和可扩充特性。
Keras具有以下特点:
nKeras遵循减少认知困难的最佳实践,提供一致而简洁的API,能够极大地减少用户的工作量,同时提供清晰和具有实际意义的bug反馈。
nKeras具有高度的模块性,网络层、损失函数、优化器、初始化策略、激活函数、正则化方法等都是独立的模块,可以自由组合来构建自己的模型。
nKeras具有易扩展性,添加新模块很容易,只需要仿照现有的模块编写新的类或函数即可。
创造新模块的便利性使得Keras适合于先进的研究工作。
nKeras没有单独的模型配置文件,模型由python代码描述,使其更为紧凑和易于debug,并提供了扩展的便利性。
2.4神经网络简介
本节主要介绍了神经网络的基本原理,以及两种常用的神经网络结构:
卷积神经网络和循环神经网络。
2.4.1神经网络基本原理
神经网络(NeuralNetwork,简称NN)是20世纪80年代以来人工智能领域兴起的研究热点。
它是一种模仿人脑神经元网络的行为特征进行并行信息处理的数学模型,通常简称为神经网络。
神经网络依靠大量的节点(也称神经元)之间相互连接构成,每个节点代表一种特定的输出函数,称为激活函数(activationfunction),每两个节点之间的连接都代表一个对于该连接信号的加权值,称为权重。
神经网络的输出根据网络的连接方式、权重分布、激活函数的不同而不同,网络本身可以看作是对某种算法或函数的逼近。
一个简单的神经网络由输入层、隐藏层、输出成组成,每一层都有若干神经元,输入层接受线性组合的输入,经过隐藏层的非线性的激活函数,得到非线性的输出。
这个过程可以简化为a=fw⋅x+b,其中x表示输入,w和b分别表示权重和偏移,f()为激活函数,a表示输出。
激活函数的使用是为了给神经元引入非线性因素,这样神经网络既可以逼近任意非线性函数,应用于各种非线性模型中。
常见的激活函数有sigmoid,tanh,ReLU,softmax。
神经网络的训练依靠反向传播(backpropagation)算法。
每一次运算,从输入层输入向量,经过层层网络计算得到输出,根据损失函数(lossfunction)将输出与正确结果的差值进行计算,从最后一层开始层层后退依次调整神经元的参数。
通过这种方法不断调整参数,直至网络的输出满意为止。
为了能在不同领域下表现地更为出色,神经网络也产生了许多变种,常见的有卷积神经网络和循环神经网络。
2.4.2卷积神经网络(CNN)
神经网络是由模拟神经元组成的模型,通过大量数据的训练实现由输入转化为目标输出的功能。
对于一些问题,一般的神经网络已经能处理的很好了,但是当输入层的特征维度变得很高时,神经网络要训练的参数就会增加很多,计算时间会增加很多。
例如在手写识别任务中,将一张28×28的图片作为输入,输入层就有784个神经元,如果中间使用10个神经元的一层隐藏层,参数w就有784×10=7840个。
普通的神经网络在处理图形问题上有着训练参数过多的缺点,因此出现了一种变种——卷积神经网络(ConvolutionNeuralNetwork,简称CNN)。
在卷积神经网络中,卷积层的每一个神经元只与前一个输入层的部分神经元相连接,且同一层中部分神经元的权重w和偏移b是共享的,这大大减少了要训练的参数数量。
CNN一般包括以下几种层:
输入层,卷积层,激励层,池化层,全连接层,输出层。
n输入层:
CNN的输入层会保留图片本身的结构,例如一张28x28的黑白图片,输入层为28×28的二维神经元,而RGB格式的彩色图片为28×28×3的三维神经元。
n卷积层:
在普通神经网络中,每个隐藏层的神经元都计算了输入层所有的神经元,但在CNN中不这么做。
我们定义一个比较小的区域,每次只能通过这个区域去观察输入层,并通过平移的方式逐步扫描整个输入层,每次计算得到的值即为卷积层神经元内的值。
这个小区域称为感受视野(localreceptivefields),在每个感受视野中用于计算的权重矩阵叫卷积核,感受视野的扫描间隔叫做步长(stride)。
卷积核中的权重值和偏移即为该网络的训练参数。
一个卷积核的感受视野扫描生成的下一层神经元矩阵称为特征映射图(featuremap),同一个特征映射图使用的是同一个卷积核,因此这些神经元的参数是共享的。
Featuremap的大小有输入层大小、卷积核大小和步长决定,如28×28的输入层,使用10个5×5的卷积核,步长为1,那么每个featuremap大小为24×24,需要训练的参数有(5×5+1)×10=260个,参数大大减少了。
n激励层:
激励层主要为卷积层的输入做一个非线性映射,一般使用ReLu函数。
n池化层:
池化层通常位于卷积层与卷积层之间,压缩数据和参数的量,同时不影响具有尺度不变性的特征,具有减少过拟合的效果。
池化层常用的方法有maxpooling(取最大值)和averagepooling(取平均值)。
池化层也有一个类似的“视野”,按步长对featuremap进行扫描。
n全连接层:
神经元之间完全连接的网络层,对特征进行拟合,通常位于CNN的尾部。
n输出层:
负责目标结果的输出。
此外,为了加速训练,通常会在输入层前对数据进行预处理,如去均值、归一化、切分。
CNN的训练方法和一般神经网络类似,先定义损失函数,衡量预测值和实际结果的差距,找到使损失最小化的参数,通常使用梯度下降法。
2.4.3循环神经网络(RNN)
循环神经网络(recurrentneuralnetwork,简称RNN)是一种擅长于序列数据处理的神经网络。
RNN包含带有循环连接的隐单元,能够处理序列数据并能够在每一个时间节点产生一个输出,且该时间点上的输出与下一时间节点的隐单元有着循环连接。
RNN可以看作是同一神经网络的多次复制和链式连接,每个神经网络模块会把消息传递给下一个。
RNN的特点就是可以连接先前的信息到当前的任务上,例如基于先前的词来预测下一个。
但是,当相关信息与当前位置距离过大时,RNN会出现梯度消失或梯度爆炸的问题,无法感知到距离较远的信息。
为了应对这类问题,对RNN加以改进,其中之一就是长短期记忆网络(longshort-termmemory,简称LSTM)[10]。
LSTM在RNN模型上添加了“门”这一结构,使得其能够很好的记住长期的信息。
LSTM的关键部分是细胞(cell)状态,细胞状态类似于传送带,负责传送信息,只有少量的线性交互,信息在上面很容易保持长期流传而不产生变化。
LSTM使用门来去除或添加信息到细胞状态,门包含一个使用sigmoid函数激活的神经网络层和一个点乘乘法操作,让信息选择式通过,达到筛选的功能。
LSTM使用的门包括输入门,遗忘门和输出门:
n遗忘门(forgetgate):
LSTM第一步是决定从细胞状态中丢弃什么信息。
我们通过上一次的输出(ht−1)和这次的输入(xt)来判断舍弃哪些信息:
ft=sigmoidWf∗ht−1,xt+bf#公式2−1
n输入门(inputgate):
下一步是确定哪些新信息要放入细胞状态。
这里有两个部分。
第一,sigmoid激活层决定哪些值需要更新:
it=sigmoidWi∗ht−1,xt+bi#公式2−2
第二,使用一个tanh激活层创建一个新的候选值向量:
C’t=tanhWc∗ht−1,xt+bc#公式2−3
接下来就要更新细胞状态。
将旧状态与ft相乘,丢弃掉需要丢弃的信息,接着加上新的候选值:
Ct=ft∗Ct−1+it∗C’t#公式2−4
这就是新的细胞状态。
n输出门(outputgate):
最终要确定输出什么值。
首先运行sigmoid层确定细胞状态的哪个部分将输出出去:
ot=sigmoidWo∗ht−1,xt+bt#公式2−5
然后通过tanh处理细胞状态,并将它和sigmoid层的输出相乘,得到确定输出的部分:
ht=ot∗tanhCt#公式2−6
LSTM网络的训练方法和前馈神经网络类似,采用误差的反向传播。
不过LSTM处理的是序列数据,所以在反向传播时需要将整个序列上的误差传播回来。
LSTM可以表示为带循环的图结构,在这个带有循环的图上使用反向传播称之为基于时间的反向传播(back-propagationthroughtime,简称BPTT)。
在LSTM的结构中,当前cell的状态会受到前一个cell状态的影响,因此在误差反向传播时,t时刻ht的误差不仅包括t时刻的误差也包括t时刻之后所有时刻的误差。
ht−1的误差由ht决定,ct−1由ct决定,而ct的误差由两部分,一部分是ht,另一部分是ct+1。
所以在计算ct反向传播误差的时候,需要传入ht和ct+1,而ht在更新的时候需要加上ht+1。
这样每个时刻的误差都要由ht和ct+1迭代计算。
第3章图像描述自动生成系统设计与实现
本章首先说明了图像描述自动生成系统的设计思路,并进行了可行性分析,然后阐述了系统的详细设计与具体实现,最后进行了功能测试。
3.1设计思路
图像描述自动生成系统的基本思路是使用神经网络构建模型,拟合数据。
模型的结构主要以encoder-decoder结构为基础。
系统主要分为训练模型和使用模型两部分。
训练模型部分分为图像数据预处理、描述信息预处理、模型搭建及训练几个模块,使用模型部分分为模型评估、生成描述两个模块。
图3-1图像描述自动生成系统结构图
图像数据预处理模块负责将数据集中的图像数据通过卷积神经网络生成特征张量,并保存在文件中,方便训练时调用,避免了之后频繁地读取数据。
描述信息预处理模块负责将数据集中格式较为复杂的描述转化为简单的格式,方便训练时使用。
模型搭建及训练模块负责搭建神经网络模型的结构,获取输入数据和对比数据,设定超参数,编译模型并训练。
模型评估模块负责使用图像描述领域常用的评估方法对训练好的模型进行评估。
生成描述模块接受用户输入的图像,通过卷积神经网络处理后生成特征,输入训练好的神经网络模型,输出结果并加以处理,最终生成描述返回给用户。
想要训练一个图像描述的模型,需要有大量的图像数据用于输入,以及对应的描述文本用于和模型输出的结果进行对比,从而改进模型,为此需要一个满足要求的数据集。
常用的数据集有Imagenet,MSCOCO,Flickr8k等。
本系统中训练及测试使
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 描述 自动 生成 技术设计 实现 毕业论文