APP下载

利用深度学习进行场景分类

2018-08-07浙江省杭州学军中学赵熠杰

电子世界 2018年14期
关键词:卷积准确率分类

浙江省杭州学军中学 赵熠杰

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的参数对网络进行初始化。另外在进行实验的时候发现,只对网络进行微调的结果在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大小的输入,然后是3个卷积层,卷积核的大小是3*3,后面会有一个池化层,后面会跟3个3*3大小的卷积层。然后是Inception的结构,首先3个图2的Inception块,然后5个图3的Inception块,后面是2个图4的Inception块。再然后是一个8*8的卷积核,后面是softmax分类。

本文对原始的InceptionV3进行了部分调整,将网络的输入调整到了224*224*3,同时最后一个全连接层的大小为80。使用在ImageNet训练好的InceptionV3的参数进行初始化网络,然后全部更新网络的参数。

4.评价方法

准确率是一种对深度学习模型进行评估的最简单的方法。故名思议,准确率是指被正确分类的场景图片占所有图片的比例,比如总共100张图片中有99张场景图片都被正确的分类了,那么我们的准确率就是99%。

aichallenger竞赛中采用top3的准确率作为模型优劣的评价方法。我们的模型在最后的全连接层会输出80个概率,我们会将这80个概率从大到小进行排序,从中选择较大的3个概率所代表的类别,如果这3个类别中有一个类别和真实的类别一致,那么我们就认为该样本被分类正确了。

5.总结与展望

如今是信息化的年代,场景分类任务对于我们的生活来说也越来越重要,随着计算计算资源的提升,尤其是GPU的大规模更新,利用深度学习解决这个任务也变得越来越简单。同时场景分类可以应用到安防以及社交网络中,有着非常广泛的研究前景。

本文主要介绍了场景分类的背景,意义,研究现状,以及场景分类的一般步骤,重点介绍了场景分类的方法,利用ResNet,Inception等方法解决了场景分类的部分问题。

但是,场景分类还存在着很多的问题,包括1)场景分类方法的准确率还没有达到人类的高度2)在对图像做裁剪的时候丢失了很多的信息。

猜你喜欢

卷积准确率分类
基于3D-Winograd的快速卷积算法设计及FPGA实现
分类算一算
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
2015—2017 年宁夏各天气预报参考产品质量检验分析
从滤波器理解卷积
分类讨论求坐标
高速公路车牌识别标识站准确率验证法
数据分析中的分类讨论
基于傅里叶域卷积表示的目标跟踪算法