利用深度学习进行场景分类
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 25
•
利用深度学习进行场景分类
浙江省杭州学军中学 赵熠杰【摘要】近些年来,随着社交网络的发展,互联网中的图像数据也越来越多。使用机器学习以及深度学习进行场景分类取得了一系列的进展,同时大量的场景分类的数据集公开出来,为我们提供了非常多的训练样本。本文使用aichallenger竞赛场景分类的数据集,使用迁移学习以及深度学习的方法构建模型,对场景图片进行了比较精确的分类。
【关键词】场景分类;深度学习
1.概述
1.1 研究背景与意义
随着网络的普及以及信息社会的发展,我们在日常生活中接触到的图像数据也越来越多,尤其是最近几年社交网络的普及,像是facebook,微信,微博等社交网络,人们可以随时随地上传自己的图片或者视频,一方面对于图像的存储以及管理带来了很大的困难,另一方面来说如何去挖掘图像中存储的信息也变得越来越重要。这些图像信息不仅可以让我们获得一些人们的想法,还可以快速的提高效率。
场景分类是一个比较基础性的工作,它的应用非常的广泛,不仅可以应用的安防领域,让我们的生活变得更加安全,还可以应用到自动驾驶领域,提高自动驾驶的安全性。同时场景分类在各大社交网络中的应用也非常多,丰富了我们的生活。但是如何让计算机像人类一样对一个场景进行精确的分类也是一项非常具有挑战性的工作。因此,场景分类是一个具有研究前景的领域。
1.2 研究现状
计算机视觉一直以来都是人工智能的研究热点,所以也涌现了非常多的优秀的算法。主要分为两类,一类是传统的根据特征进行建模然后使用机器学习的算法进行分类,常见的特征提取算法包括统计直方图,色彩直方图,LBP以及SIFT特征等。使用的机器学习算法如随机森林,建立多颗决策树,并根据多棵决策树的结果进行多数投票,另外一种是支持向量机,这也是在深度学习大规模应用之前效果最好的一种算法,是一种根据支持向量确定决策边界的方法。
另外一类是基于深度学习的算法,Krizhevsky在2012年提出了基于深度学习的图像分类算法,使用了一个8层的神经网络结构,夺得了ImageNet2012年图像分类的冠军。随后Christian Szegedy提出了GoogleNet,使用了22层的神经网络获得了ImageNet2014年图像分类的冠军。随后Karen Simonyan等人提出了一个19层的VGG网络,在图像分类领域获得了更好的结果。
2.场景分类
2.1 什么是场景分类
场景分类是根据训练数据集中的数据的特征,给每一类确定一种准确地描述方式,由这些特征生成类描述或模型,并运用这种描述方式对新的数据集进行分类。场景分类是指针对原始的图片数据,对数据进行过滤、提取特征等操作,然后根据场景图像特征进行分类。
2.2 数据集介绍
本文中所使用的数据集为aichallenger中场景分类的数据集,比赛从400万张图片中选出了8万张比较好的图片,分别属于80个不同的场景,比如足球场,滑雪场,卧室等。从中选出70%作为训练集,10%作为交叉验证集,20%作为测试集,其中每张图片的大小是不相同的。
2.3 场景分类的步骤
首先是图像的预处理,本步骤主要将图片做一些简单的处理。由于每张图片的大小都是各不相同的,深度学习算法通常需要固定大小的输入,因此我们需要将每张图片的大小处理成固定的大小,如果直接对图像做缩放的话可能会造成比较大的失真,实验验证也是如此的。因此,在图像的处理中本文首先将图像进行小幅度的缩放,然后从缩放后的图片中裁剪出224*224大小的图片。后续将图片存储为numpy支持的数组即可。
第二步是数据增强。在后续的实验中本文发现,现有的数据数量还是比较的少,因此有必要进行进一步的数据增强,在增加数据增强后的网络中,top3的准确率可以提高大约10%。本文所使用的数据增强方法主要包括如下:将输入数据归一化到-1,到1之间;将输入的图片进行一定幅度的旋转,本文中旋转角度为15度;每一张图片的宽度上进行随机的水平平移,本文中平移整张图片的1%;每一张图片在高度上进行随机的水平平移,本文中同样偏移整张图片的1%;对图片以一定的概率进行随机的水平翻转,在竖直方向上不做任何的翻转。
第三步模型构建。此步骤主要是选择或者设计深度学习使用的模型,同时由于本文使用的数据集中图片的数量比较少,只有8万张图片,比较深的网络可能会过拟合。因此,本文使用了迁移学习的方法,使用了部分在ImageNet中训练好的参数初始化网络,部分模型没有使用做对比实验。详细的内容将在第三部分进行介绍。
第四步是使用第三步训练好的网络以及参数进行预测。在这一部分同样需要对数据进行预处理,预处理的过程同训练过程的预处理相同,但是这一步不进行数据的增强。
3.场景分类的方法
在对场景分类模型的构建的时候,本文选择使用ResNet以及InceptionV3的网络结构对场景进行分类,并对部分地方进行改进实验。同时,为了增强模型的泛化能力,避免在小数据上造成过拟合的现象,因此本文使用了迁移学习的方法,使用了在ImageNet中训练好的ResNet以及InceptionV3的参数对网络进行初始化。另外在进
• 26
•
行实验的时候发现,只对网络进行微调的结果在top1上的准确率并不是十分的理想。因此,本文使用预训练好的参数对网络进行初始化,不加载最后一层全连接层的参数,并且在网络的训练过程中对整个网络中的所有参数进行更新,而不是只更新最后一层的参数。下面将详细介绍ResNet 以及InceptionV3算法。3.1 ResNet
我们在网络的训练过程中会发现这样一些现象,就是随着网络深度的增加,模型的准确率会下降,通常这种下降是由于模型的过拟合造成的,但是在这里却不是由于模型的过拟合造成的。为了避免这种情况,ResNet 网络提出了一种Residual block ,如图1所示,加入我们要学习的特征是H(x),那么在第一个卷积层中我们可以学到的知识是F(x),那么我们如果令F(x)=H(x)-x 的话,我们就可以添加一条捷径,使得网络在经过两个卷积层过后可以获得更好的结
果,同时不丢失一些比较好的特征。
图1
整个ResNet 的网络结构就是由上面的残差块组成的,本文使用的是ResNet50,也就是说总共有16个残差块,其中每个残差块由3个卷积层,每个卷积层后面会有一个BN 层,BN 层后面是激活函数,本文中激活函数使用Relu 。首先网络接受一个224*224*3大小的场景图片,然后是64个7*7大小的卷积核,步长为2,后面是一个最大池化层。后面是16个参差块,每个参差块有3个卷积层构成,包含1*1,3*3,1*1的卷积核大小。第一种参差块卷积核的个数分别为64,64,256,总共有3个这样的参差块。第二个残差块的卷积核个数分别为128,128,512,共有4个。第三个残差块的卷积核个数分别为256,256,1024,共有6个。第四个残差块的卷积核个数分别问512,512,2018,共有3个。最后是一个80的全连接层。
本文采用在ImageNet 中训练好的ResNet50对网络进行参数初始化,然后对整个模型中的参数进行更新,实验发现这样的效果比只更新最后全连接层的参数要好很多。3.2 Inception Net
Inception 的结构最初是在GoogleNet 这个网络结构中提出来的。从14年开始各种各样的网络通过增加网络的深度以及宽度在图像分类这个任务上提高了比较多的准确率。但是这样的操作在提升了网络效果的同时增加了计算的复杂度,同时参数的数量也大大的增加,比如vgg 需要196亿FLOP ,但是使用了Inception 结构的GoogleNet 就会少很多。
卷积核的大小如果比较大的情况下,对应的计算就会比较多,同样参数的数量也会比较多,比如n 个5*5的卷积核需要25×n 个网络参数,但是如果使用3*3的卷积核的话,需要的参数就比原来少了16个。因此在使用相同大小的特征图的情况下,卷积核的大小应该是越小越好。那么5*5的卷积核是否可以用更小,但是个数会稍微多一点的卷积核来替代。假如我们放大一下5*5的卷积的计算图的话,我们可以看到每一次的输出都更像是一个更小的全连接网
络,在其输入上滑动5*5大小的位置,那么我们可以利用平移不变性使用两个更小的卷积运算来代替这样一个比较大的卷积运算。首先是一个使用3*3大小卷积核的卷积层,然后在这一层的输出后跟一个使用3*3大小卷积核的卷积层,这样经过这两个卷积层的输出与原来使用5*5大小的卷积核的输出是相同的。一个Inception 块的结构如图2
所示:
图2 一个Inception块的结构图
图3 nception块的结构图
通过如上的分析,我们可以发现一个n*n 的卷积核同样可以使用一个1×n 的卷积核,然后再接一个n ×1的卷积核来替代。但是这样做会有一个比较不好的效果就是在一些比较浅的层中使用这样的结构往往不会取得很好的效果,但是在一些中等的网络尺寸上会取得比较不错的效果,因此在InceptionV3中通常会使用1*7和7*1的卷积核去替代7*7的卷积核,而不会去替代一下本身就比较小的卷积核。本部分的Inception 块的结构如图3所示。
另外使用了扩展输出的Inception 块可以提取到更多的高维的特征,这种的Inception 块如图4
所示:
图4 Inception块图整个InceptionV3的结构为:首先网络接受224*224*3大小的输