ImageVerifierCode 换一换
格式:DOCX , 页数:62 ,大小:9.75MB ,
资源ID:11548773      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11548773.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(毕业实习实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

毕业实习实验报告.docx

1、毕业实习实验报告毕业设计实验报告2019年2月实验一 使用 DIGITS 实现图像分类一. 实验目的本实验将在DIGITS中通过以下方式训练深度神经网络以识别手写数字: 将图像数据加载到训练环境 选择和训练一个神经元网络 用新数据进行测试并迭代以提高性能二. 实验原理a) DIGITSDIGITS 是英伟达为普及深度学习开发的图形化操作界面,简单易用,旨在帮助初学者跨越入门障碍,迅速上手。因此,DLI的入门培训均要求学员从 DIGITS 起步。b)深度学习概念深度学习(Deep Learning, DL)由Hinton等人于2006年提出,是机器学习(Machine Learning, ML)

2、的一个新领域。深度学习被引入机器学习使其更接近于最初的目标-人工智能(AI,Artificial Intelligence)。深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字、图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习的概念最早由多伦多大学的G.E.Hinton等于2006年提出,基于样本数据通过一定的训练方法得到包含多个层级的深度网络结构的机器学习过程。传统的神经网络随机初始化网络中的权值,导致网络很容易收敛到局部最小值,为解决这一问题,Hinton提出使用无监督预训练方法优化网

3、络权值的初值,再进行权值微调的方法,拉开了深度学习的序幕。深度学习所得到的深度网络结构包含大量的单一元素(神经元),每个神经元与大量其他神经元相连接,神经元间的连接强度(权值)在学习过程中修改并决定网络的功能。通过深度学习得到的深度网络结构符合神经网络的特征,因此深度网络就是深层次的神经网络,即深度神经网络(deep neural networks, DNN)。三. 实验步骤训练网络识别手写数字由于计算机将图像看作是像素值的集合,所以除非它学到像素代表什么,否则它不能对视觉数据做任何事情。我们要训练一个深层神经网络识别手写体数字0-9。这个挑战性问题被称为“图像分类”,我们的网络将能够决定哪一

4、个图像属于哪个类或群体。例如: 下面的图片应该属于“4”这一类:下一副图像将属于“2”这一类: (一) 加载和整理数据使用DIGITS时,可以在主屏幕创建新的数据集或新的模型。首先选择左边的Datasets选项卡。因为我们希望网络告诉我们每一个图像属于哪个“类”, 因此需要DIGITS从右边的“Images”菜单中选择“Classification”来加载一个“Classification”图像数据集。创建完毕后,输入用户名。如下图所示:在加载数据集的页面,有很多选项。填写两个域。复制并粘贴以下文件路径到Training Images域:/dli/data/image_class/train_

5、small给数据集命名以便能找到它。选择:Default Options Small Digits Dataset。请注意此时数据集已经下载到正在运行 DIGITS 的计算机。然后点击 Create此时DIGITS 正在从目录中创建您的数据集, 在train_small目录中有10个子目录,(0, 1, 2, 3, ., 9)各一个目录. 在所有手写的训练图片中,0放在 0 目录, 1放在 1 目录,等等。选择Explore the db来查看加载的数据显示数据结果如下图:(二) 从数据中学习 - 训练神经网络接下来, 将使用我们的数据来训练一个人工神经网络。 就像生物的灵感一样,人脑、人工神

6、经网络就是学习机器。和大脑一样,这些“网络”只能够解决有经验的问题,在这种情况下,可以与数据交互。在整个实验中,我们将把“网络”作为未经训练的人工神经网络,把“模型”作为经过训练的网络(通过接触数据)。在DIGITS中创建一个新的模型很像创建一个新的数据集。 从主屏幕上, Models 选项卡需要预先选定。 在“New Model”下点击“Images”, 选择“Classification”, 我们正在创建一个图像分类模型来匹配我们的图像分类数据集和图像分类任务。设置训练网络1. 我们需要选择我们刚刚创建的数据集。 选择Default Options Small Digits Dataset

7、数据集。2. 我们需要告诉网络我们需要多长时间训练它。一个epoch是整个培训数据集的一次训练。 将Training Epochs设置为5,让我们的网络有足够的时间去学习一些东西,但不要花一整天的时间。这是一个非常好的实验设置。3. 我们需要定义哪一个网络将从我们的数据中进行学习。因为我们在创建我们的数据集时采用缺省设置,我们的数据库是全彩色256x256图像。如果只期待256x256的彩色图像分类,那么选择网络为AlexNet。4. 我们需要给模型命名,由于我们可能会做很多这样的工作,因此我们选择chenhong来命名。设置了所有这些选项时,按“Create”按钮。得到训练图表如下图所示:我

8、们将把这个图作为改进的工具,但是最重要的一点是经过5分钟的训练,我们已经建立了一个模型,它可以将手写数字的图像映射到它们所代表的数字,准确率大约为87%!(三) 推理既然我们的神经网络已经学会了一些东西,那么推理(inference)就是基于所学知识做出决定的过程。训练得到的模型的能力在于它现在可以对未标签图像进行分类。我们将用DIGITS来测试训练得到的模型。在模型窗口的底部,您可以测试单个图像或一组图像。在左边,在 Image Path文本框中键入路径/dli/data/image_class/test_small/2/img_4415.png。 选择Classify One按钮。 几秒钟

9、后,将显示一个新窗口,显示其试图对图像进行分类的图像和信息。四. 实验结果训练网络识别手写数字实验结果,如下图所示。五. 实验改进(一) 验证训练时长和模型准确性的关系通过点击屏幕左上角的DIGITS图标进入DIGITS主屏幕。选择所创建的第一个模型chenhong.DIGITS 将显示在模型被训练时生成的图表。上图包含三个量:训练损失、验证损失和准确性。训练和验证损失的值应该从一个epoch降低到另一个epoch,尽管它们可能会跳来跳去。准确度是模型对验证数据进行正确分类的能力的度量。如果将鼠标悬停在任何数据点上,就会看到其精确值。在这种情况下,最后一个epoch的准确率大约是87%。由于最

10、初的网络是随机生成的,所以结果可能与这里显示的稍有不同。分析这个图表可得:准确性随着时间的推移而增加,而损失正在减少。一个自然而然的问题可能是:“如果我们让它训练的时间更长,模型会不会继续改进?”这是我们将要首先涉及的实验和探讨。回到DIGITS和滚动到模型页面的底部,并点击标记: Make Pretrained Model.的绿色大按钮。这将节省两件事:1. network architecture选择AlexNet.2. 这个模型以在网络中通过前5个epoch的数据以调整参数的形式得到了“学习”。现在我们可以此为起点创建一个新模型。回到DIGITS主屏幕,并像前面那样创建一个图像分类模型。

11、New Model (Images) - Classification数据集设置如下 选择相同的数据集(Default Options Small Dataset) 设置epoch次数为4。 这次,不选择 Standard Network, 而是选择 Pretrained Networks. 选择刚刚创建的pretrained模型chenhong. 给您的模型命名 - 我们选择 study more 点击 Create如下图:在创建模型后,将得到以下图表.观察图表可知:1. 正如预期的那样,精度开始接近我们的第一个模型留下的86%。2. 准确度确实在不断提高(最终为92%),这表明增加epoc

12、h数通常会提高性能。3. 准确率的提高速度减慢了,表明通过相同数据进行更多的训练并不是提高性能的唯一途径。用一个图像测试改进模型让我们用以前的图像来测试我们的新的和改进的模型。在我们模型页面的底部. 我们将测试相同的“2”来比较性能。测试结果如下图所示:可见,其准确度达到97%,比上个模型明显提升,这显然是一个更好的模型。用一组图像测试改进模型试着用一组图像来测试这个模型。它们如下所示。如果把多个文件放在列表中,我们就可以对它们进行分类。在下面的链接,执行代码块和链接的文件将出现an_image.list。右键单击an_image.list并且保存到本地计算机上的文件(右键单击“另存为”)。在

13、DIGITS模型页面的右侧,有一个选项“test a list of images”。按下按钮Browse并选择您刚下载的an_image.list文件。然后按Classify Many按钮。结果如下图所示:这里展示的是该模型预测图像分到某一类的概率。结果从最高概率到最低程度排序。我们的模型没有做到那么好。虽然该模型的准确率为92%,但它不能正确地对我们测试的任何图像进行分类。在我们成功地训练一个模型之后,接下来要做的是理解和实验。为了更好地理解这个项目,应该从我们的数据开始。为了建立更好地理解,应该从最初始来源着手。这个数据集是我们从 MNIST数据集学习的一个子集。我们要采用的一个关键理念

14、是,图像是始于28x28的灰度级图像。当我们加载数据集,我们强制设置缺省值是256x256的彩色图片。(二) 探讨数据与正确的模型相匹配的益处把数据作为28x28灰度图像,选择一个建立在可以接受这种数据类型的模型-LeNet。创建数据集的图像设置如下: Image Type中选择“Grayscale”。 Image Size中输入28*28 复制并粘贴以下文件路径到Training Images域:/dli/data/image_class/train_small 给数据集命名以便能找到它。选择:mnist small。再次选择 explore the db,图像不再模糊了,如下图所示。接下来

15、,创建一个模型,模型设置如下图所示。 选择mnist small数据集。 将Training Epochs设置为8。 选择网络为Lenet ,Lenet模型的适用于28x28灰度图像。 模型命名为the right model for the data模型性能如下图所示:如上图,可以发现: 模型改进了性能。此处的模型的精确到96%以上。 模型训练得更快了。在不到两分钟的时间里,模型训练了8个epoch。们没有做任何事情来解决更多不同数据的问题,但是如果我们能训练的更快,我们就可以做更多的实验。(三) 训练更多的数据在我们训练的最后一次尝试中,我们只使用全MNIST数据集10%。现在我们尝试使用

16、完整的数据集进行训练,看看它是如何提高我们的训练的。 我们可以使用DIGITS中的克隆选项来简化创建一个与旧工作具有类似属性的新作业。 让我们通过单击左上角的DIGITS返回主页。然后从页面左侧选择Dataset查看所创建的所有数据集。 选择MNIST小数据集。点击一个按钮:Clone Job.与全MNIST数据创建一个数据库,更改以下设置: Training Images - /dli/data/image_class/train_full Dataset Name - MNIST full按Create按钮. 这个数据集要比其它数据集大十倍,因此需要几分钟的时间处理。接着创建模型,模型设置

17、如下图所示。 选择mnist full数据集。 将Training Epochs设置为8。 选择网络为Lenet ,Lenet模型的适用于28x28灰度图像。 模型命名为more data结果如下图所示。但从图中可知,训练和验证损失函数值都小很多。此外,该模型的准确率在99%左右,可能更大。也就是说,该模型正确地识别了其验证集中的每一个图像。这是一个很大的改进。用上面的步骤对我们的测试图像进行分类,下面是新的结果:(四) 改进模型结果 - 数据增强我们的七个测试图像背景不均匀。此外,大多数背景颜色浅,而我们的训练数据都有黑色背景。通过上个实验,我们知道,增加数据量有助于对手写字符进行分类,那么

18、如果我们包含更多的数据来处理对比度差异呢?我们尝试通过反转原始图像来增强我们的数据。我们把白色像素变成黑色,反之亦然。然后,我们将使用原始图像和反转图像来训练网络,并查看是否改进了分类。按照上面的步骤克隆并创建一个新的数据集。数据集设置如下: 增强数据的目录如下:Training Images - /dli/data/image_class/train_invert Dataset Name data enhancement当新数据集就绪后,仔细查看数据库。可以看到黑色背景和白色数字,还有白色背景和黑色数字的图像。现在训练一种新的模型。克隆一个以前的模型结果,并将数据集转换为刚才用反转的图像创

19、建的数据集data enhancement。设置模型的名称为new data并创建一个新模型。使用增强的数据集,是否有助于我们更好地对图像进行分类?这里是结果:如上图,当训练完成时,并没有真正超过非增强图像集的精度。事实上,准确率可能略有下降。我们已经99%了,所以我们不太可能提高我们的准确性。继续用原来的一组图形测试,如下是测试结果:通过增加我们的数据集与反转的图像,我们能够识别七个图像中的五个。虽然我们的结果并不完美,但我们对图像的小修改增加了数据集的大小,使得差异很大。(五) 高级阶段-通过修改网络(可选)来改进模型结果增强数据集虽然提高了我们的结果,但我们没有识别所有的测试图像。让我们

20、试着直接修改Lenet网络。我们可以创建自定义网络来修改现有的网络,使用来自外部源的不同网络,或者创建自己的网络。我们选择Network对话框的右侧的Customize链接来修改网络。如下图:这里将打开一个编辑器查看Lenet模型配置。滚动窗口并查看代码。网络被定义为一系列的层。每个层都有一个名称,它是函数的描述符。每个层都有一个顶部和底部,或者每层可能有多个,指示各层是如何连接的。 Type用变量形式定义这个层的类型。通常包括Convolution, Pool, 和 ReLU. 所有Caffe语言模型的选项在Caffe教程 Caffe Tutorial中都可以找到.在编辑器的顶部有一个 Vi

21、sualize 按钮。 按下这个按钮将可视化模型的所有层,以及它们是如何连接的。 在这个窗口中,您可以看到数据,这里有两组Convolution(卷积)层和Pooling(池化)层和两层Inner Product层,并且通过一个直线单元 (ReLU) 连接首个的Inner Product层(caffe中的Inner Product(IP) 层即fully_connected (fc)layer-全连接层)。输出函数返回通过网络计算得出的精度和损失值。我们将对网络进行两次更改。首先,我们要连接一个ReLU 函数到首个池化层。其次,我们要改变num_output值为第一卷积75(conv1)和10

22、0(第二卷积conv2)。该层定义应该ReLU 函数定义应在pool1定义之下,如下:卷积层应改变如下:进行这些更改后,可视化新模型,可以看到类似于下图所示的ReLU 函数:现在,更改模型的名称并按 Create 按钮。下表为测试结果图。 完成后,再次测试数据。结果应该类似于下图:完成后,再次测试数据。结果如下图:六. 实验心得通过这次实验,我了解到了深度学习的详细介绍和所有必要步骤,包括数据处理、训练、测试来对图像进行分类,并通过数据增强和网络修改来提高网络性能。 在训练阶段,我学习了可以确定网络训练性能的参数。通过训练MNIST数据子集以及集,我了解到数据越多越好。在测试我的模型时,我发现

23、虽然测试图像与训练数据有很大的不同,但是我们仍然可以正确地对它们分类。实验二 使用 DIGITS 实现图像分类一. 实验目的通过检测航空图像中鲸鱼的面部,来学习如何应用深度学习进行目标检测。通过实验,将学习如何: 将传统的计算机视觉与深度学习相结合 基于深度学习框架Caffe对现有神经网络结构进行修改 通过使用专门构建的网络和端到端标记的数据来掌握深度学习相关知识二. 实验步骤(一) 目标检测方法1:滑动窗口1) 原理有多种方法可以用卷积神经网络(CNN)来检测和定位图像中的物体。最简单的方法是首先在可以区分目标和非目标实体的图像块上训练CNN分类器。图2显示了一个CNN的架构,其能够从背景图

24、块中区分出鲸鱼的斑块。通过使用这种类型的分类器,我们可以在较大的图像中检查每个图像块,还可以使用重叠的图像块,以确定是否有鲸鱼存在。让我们按照这个方法往下做。在这个实验中我们有两个数据集可用。第一种是包含鲸鱼的广阔海域的图集。这个图集位于data_336x224。第二个数据集是大约4500个鲸鱼面部的局部图,另外4500个来自同一个图像的随机局部图。这个数据集在data/train/faces 和 data/train/background目录下。我们将在DIGITS中使用第二个数据集训练我们的分类器。2) 验证首先,我们需要将数据集导入到DIGITS中。使用 Datasets-Images下

25、拉菜单,选择 “classification” 。输入用户名chenhong。当“New Image Classification Dataset”面板打开,使用下面的预处理选项: 复制并粘贴以下文件路径到Training Images域:/dli/data/whale/data/train/ 给数据集命名以便能找到它。选择: whale_faces程序将导入这个256x256 像素的face/not-face数据集并分出25%作为验证数据集-DIGITS会自动从图像文件夹结构中区分这两个类别的名字。DIGITS需要几分钟来完成数据导入,一旦导入完成,如果返回到DIGITS主屏幕,然后重新进入

26、whale_faces数据集,点击 Explore the db 按钮查看每个类中的图像示例。结果如下图所示:现在我们将在这个数据集上训练一个简单的两级分类CNN分类器。返回到DIGITS主屏幕并使用Models-Images下拉菜单并选择 “classification” 模型。在打开的 “New Image Classification Model” 面板上,自定义以下内容: 选择刚刚创建的whale_faces数据集 选择标准的网络“AlexNet” 将训练时长设为5个epoch 给模型起一个名字,取名叫“whale_faces_baseline”面板如下图:点击 Create 按钮开始

27、训练模型。可以看到一个实时更新图表,显示模型训练损失值和验证集的损失值以及准确度。随着训练的进行损失值将减小,准确度将提高。训练需要几分钟时间才能完成。最后,可以看到验证的准确率在98%左右-我们得到了一个非常好的whale face/non-face模型。如下图所示:把URL /dli/data/whale/data/train/face/w_2606.jpg 以文本的方式输入, 并点击Classify One按钮,以此来测试针对单个图像的分类。点选Show visualizations and statistics框,可以查看CNN是如何对图像响应来进行分类的。下图是测试结果:下图是CNN

28、对图像响应进行分类的部分操作:现在我们有了这个模型,我们将在这个实验中使用它,在广阔的航拍图像上用一个滑动窗口来检测鲸鱼面部。我们需要用DIGITS训练出的模型的作业编号。在后面的代码中我们将用参考模型的作业编号设置MODEL_JOB_NUM,用数据集的作业编号设置DATASET_JOB_NUM。我的参考模型的作业编号20190301-012911-2b5e,数据集的作业编号20190301-012156-da62。执行以下程序。这个程序大概需要30秒时间来执行,输出结果将显示从测试图片中随机选择的一个区域以及一个预测结果数组,这个数组包含了针对每一个256*256大小的非重叠栅格的预测结果。

29、下图是程序运行结果:当多次运行上面的代码时,我发现,在某些情况下,使用这个基准模型和滑动窗口法能够找到鲸鱼的面部多数情况下,它会发现大量的鲸鱼。但此模型很容易被海浪或从海面反射出来的阳光所迷惑。3) 思考题1. 从背景数据集中使用随机局部图可能会有什么问题?答:随机图像块可能最终也包含着鲸鱼的面部。这是不可能的,因为鲸鱼面部通常只是图像的一小部分,我们拥有的大量的随机背景图块,几乎完全不包含鲸鱼脸。我们也可以在我们的背景中找到鲸鱼的身体和尾巴,但这是我们对鲸鱼面部定位感兴趣的地方。2. 有哪些方法可以提高该模型的分类精度?答:尝试将使用大量的随机选择的非面部的图块,并通过随机旋转,翻转和缩放来

30、增强现有的面部图块,以达到数据集均衡的效果。还可以用大量的带有训练参数的模型,如GoogleNet。3. 我们怎样才能抵消掉重叠栅格所需增加的计算时间呢?答:我们可以一次批出多个栅格,作为批处理送入网络,这样我们就可以进一步利用并行,并从GPU获得计算加速。4) 练习 栅格大小为256*256,修改代码,增加栅格之间的重叠并获得更细的分类图。 将代码修改为批处理多个栅格,以便传入网络进行预测。代码如下:%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltimport caffeimport timeMODEL_J

31、OB_NUM = 20190301-012911-2b5e # Remember to set this to be the job number for your modelDATASET_JOB_NUM = 20190301-012156-da62 # Remember to set this to be the job number for your datasetMODEL_FILE = /dli/data/digits/ + MODEL_JOB_NUM + /deploy.prototxt # Do not changePRETRAINED = /dli/data/digits/ + MODEL_JOB_NUM + /snapshot_iter

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1