计算机视觉应用开发课件:图像分类_第1页
计算机视觉应用开发课件:图像分类_第2页
计算机视觉应用开发课件:图像分类_第3页
计算机视觉应用开发课件:图像分类_第4页
计算机视觉应用开发课件:图像分类_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

图像分类图像分类概述图像分类的概念01任务图像分类的意义02任务常用方法03任务学习目标掌握图像分类的基本概念和意义了解图像分类的常用方法1图像分类的概念1图像分类的概念图像分类,也称图像识别,是计算机根据已有的固定分类标签集合和图像所反馈的信息特征从标签集合中找出一个分类标签,并分配给该图像的视觉处理方法。譬如规定一个分类标签为猫和狗的集合,给计算机输入一张猫或狗的图片,通过判断其特征比如胡子,眼睛,嘴巴,耳朵等,从集合中找出一个分类标签,区分(识别)该图是猫还是狗。2图像分类的意义2图像分类的意义

图像分类是计算机视觉的核心任务,也是最为基础的任务,有着各种各样的实际应用。比如安防领域的人脸识别,交通领域的交通场景物体识别,互联网领域的相册自动归类等。

计算机视觉理论的奠基者,英国神经生理学家马尔认为,视觉要解决的问题可归结为“WhatisWhere”,即什么东西在什么地方,这里的“什么东西”就是图像分类要做的。图像分类的发展从最开始的10分类的灰度图像手写字体识别,到后来的10分类标签任务cifar-10及100分类标签任务cifar-100,再到后来的22000分类标签任务的ImageNet,图像分类模型伴随着数据集的增长,分类水准甚至已经超过了人类。图像分类在某些领域一定程度上为人类减轻了负担,改变了人的生活方式。3常用方法3常用方法图像分类方法大致分为两类,基于传统的分类方法和基于深度学习的分类方法。基于传统的分类方法思路比较简单,将图片转换为一维向量,再基于距离度量以判断向量间的相似性。显而易见,这种不带特征提取的朴素办法,丢掉了二维向量中最重要的四周相邻像素的信息。该种方法在比较干净的数据集上表现还行,一旦数据集噪声强度高,准确率会下降。常见传统方法的有KNN,SVM等。基于深度学习的分类方法常用的就是卷积神经网络,通过训练和更新卷积神经网络的参数使得网络能够分辨出未知图片的类别。卷积神经网络是有人工神经网络演变而来,在接下来的小节中将一一介绍人工神经网络和卷积神经网络的基本知识和实践,并使用卷积神经网络来完成图像分类的任务。3常用方法KNN:KNN算法就是把要分类的对象(例如一个特征向量)与训练集中已知类标记的所有对象进行对比,并由K近邻对分类对象进行判断为那个类别。这种方法的效果好,但是也有弊端,与K-means聚类算法一样,需要先预定设置k的值,k值的选择会影响分类的性能。此外这种方法要求整个训练集存储起来,如果训练集偏大,搜索就慢,训练集偏小,分类结果准确率也就低。对于大的训练集,采取某些装箱形式通常会减少对比的次数。3常用方法SVM支持向量机:SVM支持向量机是一类强大的分类算法,最简单的SVM通过在高维空间中寻找一个最优线性分类面,对于特征向量x的决策函数为:其中w是常规超平面,b是偏移量常数,阈值为0,有一类为正数或负数,求解带有标记

的最优化问题,从而找到决策函数的参数。常规解释训练集上某些特征向量的线性组合为:其中i是训练集中选出的部分样本,称为支持向量,它们可以帮助定义分类的边界。决策函数即变为:SVM另一个优势是可以使用核函数

,将特征向量映射到另一个不同维度的空间中。3常用方法ThankYOU!神经网络神经网络的概念01任务playground02任务学习目标掌握神经网络的基础结构掌握神经网络的训练过程1神经网络的概念1神经网络的概念神经网络人工神经网络(ArtificialNeuralNetwork,ANN),简称神经网络(NeuralNetwork,NN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型。1943年,McCulloch和Pitts将上述情形抽象为下图所示的简单模型,这就是一直沿用至今的M-P神经元模型。把许多这样的神经元按一定的层次结构连接起来,就得到了神经网络。1神经网络的概念最基本的神经元网络形式,由有限个神经元构成,所有神经元的输入向量都是同一个向量,由于每个神经元都会产生一个标量结果,所以单层神经元输出的都是一个向量,向量的维数等于神经元的个数。单层神经网络结构图1神经网络的概念多层神经网络就是由单层神经网络进行叠加之后得到的,所以就形成了层的概念,常见的多层神经网络有如下结构:1)输入层(Inputlayer),众多神经元(Neuron)接受大量非线形输入消息。输入的消息称为输入向量。2)输出层(Outputlayer),消息在神经元链接中传输、分析、权衡,形成输出结果。输出的消息称为输出向量。3)隐藏层(Hiddenlayer),简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。隐层可以有一层或多层。隐层的节点(神经元)数目不定,但数目越多神经网络的非线性越显著,从而神经网络的强健性(robustness)更显著。4)全连接层,当前一层和前一层每个神经元相互链接,所谓的全连接层就是在前一层的基础上进行一次Y=Wx+b的变化(不考虑激活函数)。1神经网络的概念不管是单层还是多层神经网络,都只能线性地划分数据,此时,如果在感知机的基础上加上非线性激活函数,输出的结果就不在一条直线上了。激活函数可以增加模型的非线性分割能力。常见的激活函数有:sigmoid:tanh:ReLu:LeakyReLu:Maxout:激活函数的作用除了前面说的增加模型的非线性分割能力外,还有:提高模型鲁棒性、缓解梯度消失问题、加速模型收敛等。ELU:2playground2playground为了更好的理解神经网络,Tensorflow给大众提供了一个便于理解的工具——playground,ThankYOU!卷积神经网络认识卷积网络01任务了解网络结构02任务卷积网络的发展历史03任务学习目标掌握卷积网络的基础结构了解卷积网络的常见方法1认识卷积神经网络1认识卷积神经网络神经网络传统的三层神经网络由输入层,隐藏层,输出层构成,其中隐藏层的层数根据使用时的具体需求而定,带有大量的参数。但是作为图像来说,其本身具有“二维空间特征”,通俗点说就是局部特性。譬如看一张猫的图片,可能看到猫的眼镜或者嘴巴就知道这是猫的图片,而不需要说看完了每个部分才知道图片的内容。如果可以用某种方式对一张图片的某个典型特征识别,那么就可以知道这张图片的类别。因此,还需要一个更高效的特征学习部分。1认识卷积神经网络卷积神经网络卷积神经网络(convolutionalneuralnetwork,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。卷积神经网络具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类。其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化特征,例如像素和音频进行学习、有稳定的效果且对数据没有额外的特征工程要求。2网络结构2网络结构1.卷积层由于输入图像通常很维数很高,例如,1000×1000大小的彩色图像对应于三百万维特征,因此,继续沿用多层感知机中的全连接层会导致庞大的参数量。大参数量需要繁重的计算,而更重要的是大参数量会有更高的过拟合风险。卷积是局部连接、共享参数版的全连接层,这两个特性使参数量大大降低。局部连接:在全连接层中,每个输出通过权值(weight)和所有输入相连。在卷积层中,每个输出神经元在通道方向保持全连接,而在空间方向上只和小部分输入神经元相连。共享参数:卷积层不同空间位置的神经元共享权值,用于发现图像中不同空间位置的模式。共享参数是深度学习一个重要的思想,其在减少网络参数的同时仍然能保持很高的网络容量(capacity)。2网络结构卷积层中的权值通常被称为滤波器(filter)或卷积核(convolutionkernel)。卷积层由若干个卷积核构成,每层卷积层通过卷积核在图像上平移进行卷积运算来提取特征。卷积运算的目的是提取输入的不同特征,不同的卷积层提取的特征不同,浅层的卷积层只能提取一些低级的特征如边缘,线条等,深层的网络能从低级特征中迭代提取更复杂的特征。通过多层卷积层堆叠,各层提取到特征逐渐由边缘、纹理、方向等低层级特征过渡到文字、车轮、人脸等高层级特征。2网络结构2.池化层根据特征图上的局部统计信息进行下采样,在保留有用信息的同时减少特征图的大小。和卷积层不同的是,池化层不包含需要学习的参数。最大池化(max-pooling)在一个局部区域选最大值作为输出,而平均池化(averagepooling)计算一个局部区域的均值作为输出。局部区域池化中最大池化使用更多,而全局平均池化(globalaveragepooling)是更常用的全局池化方法。池化的核通常采用2×2的大小,平均池化就是计算2×2范围内的平均值,最大池化就是取该范围内的最大值。目前比较常用的是最大池化。在经过池化后,原图像的channel是不发生改变的。2网络结构池化层的作用:增加特征平移不变性。减小特征图大小。最大池化可以带来非线性。2网络结构3.激活层激活层的作用在于将前一层的线性输出,通过非线性的激活函数进行处理,这样用以模拟任意函数,从而增强网络的表征能力。激活层常用的函数包括sigmoid和ReLu(Rectified-LinearUnit,修正线性单元)等。激活函数是一些非线性的函数,这些函数的特性有所不同:1.sigmoid函数可以将数值压缩到[0,1]的区间。2.tanh可以将数值压缩到[-1,1]的区间。3.ReLu函数实现一个取正的效果,所有负数的信息都抛弃。4.LeakyReLu是一种相对折中的ReLu,认为当数值为负的时候可能也存在一定有用的信息,那么就乘以一个系数0.1(可以调整或自动学习),从而获取负数中的一部分信息。5.Maxout使用两套参数,取其中值大的一套作为输出。6.ELU类似于LeakyReLu,只是使用的公式不同。2网络结构以Tensorflow为例学习如何搭建这些层的方法:卷积层:tf.nn.conv2d(input,filter,strides,padding)激活层:tf.nn.relu()池化层:tf.nn.max_pool()(最大池化)3卷积网络的发展历史3卷积网络的发展历史下面将按照时间顺序进行讲解几种具有代表性的卷积神经网络(LeNet、AlexNet、VGG和ResNet),这些卷积神经网络在当时都针对图像分类任务取得了很好的效果。1.LeNetLeNet是CNN结构的开山鼻祖,第一次定义了卷积神经网络的结构。3卷积网络的发展历史LeNet的特点如下所示:(1)定义了卷积神经网络(ConvolutionalNeuralNetwork,CNN)的基本框架:卷积层+池化层(PoolingLayer)+全连接层;(2)定义了卷积层(ConvolutionLayer),与全连接层相比,卷积层的不同之处有两点:局部连接(引进“感受野”这一概念)、权值共享(减少参数数量),卷积计算公式:(3)利用池化层进行下采样(Downsampooling),从而减少计算量,池化计算公式:(4)用tanh作为非线性激活函数(现在看到的都是改进过的LeNet了,用ReLu代替

tanh。相较于sigmoid,tanh以原点对称(zero-centered),收敛速度会快。3卷积网络的发展历史2.AlexNet2012年,Krizhevsky与Hinton推出了AlexNet,引起了许多学者对深度学习的研究,可以算是深度学习的热潮的起始标志。AlexNet的特点如下所示:(1)采用双GPU网络结构,从而可以设计出更“大”、更“深”的网络(相较于当时的算力来说);3卷积网络的发展历史(2)采用ReLu代替tanh,稍微解决梯度消失问题(GradientVanishingProblem),加快网络收敛速度;(3)提出局部相应归一化(LRN,LocalResponseNormalization);(4)令pooling操作中的stride小于池化核的大小,从而使相邻的池化区域存在重叠部分,这一操作称为OverlappingPooling;(5)对训练数据进行随机裁剪(RandomCrop),将训练图像由256×256裁剪为224×224,并做随机的镜像翻转(HorizontalReflection)。并在测试时,从图像的四个角以及中心进行裁剪,并进行镜像翻转,这样可以得到10个Patch,将这些Patch的结果进行平均,从而得到最终预测结果;(6)对训练图像做PCA(主成分分析),利用服从(0,0.1)的高斯分布的随机变量对主成分进行扰动。这一操作能减少指标Top-1的1%错误率;(7)利用dropout避免网络过拟合。3卷积网络的发展历史3.VGG2014年,Simonyan和Zisserman提出了VGG系列模型(包括VGG-11/VGG-13/VGG-16/VGG-19),并在当年的ImageNetChallenge上作为分类任务第二名、定位(Localization)任务第一名的基础网络出现。VGG与当时其他卷积神经网络不同,不采用感受野大的卷积核(如:7×7,5×5),反而采用感受野小的卷积核(3×3)。关于这样做的好处有如下两点:减少网络参数量;由于参数量被大幅减小,于是可以用多个感受野小的卷积层替换掉之前一个感受野大的卷积层,从而增加网络的非线性表达能力。3卷积网络的发展历史4.ResNet2015年,KaimingHe提出了ResNet(拿到了2016年CVPRBestPaperAward),不仅解决了神经网络中的退化问题还在同年的ILSVRC和COCO竞赛横扫竞争对手,分别拿下分类、定位、检测、分割任务的第一名。Kaiming在文中提出了残差结构(ResidualBlock),使得原本所要拟合的函数,

改为

,其中,

。虽然在“多个非线性层可以拟合任意函数”这一假设下二者并无区别,但是Kaiming假设模型学习后者,将更容易进行优化与收敛。(在残差结构中,模型利用Shortcut进行IdentityMapping,这样也解决了梯度消失现象)。ThankYOU!基于CNN的

图像识别案例描述01任务案例分析02任务案例实施03任务学习目标学习搭建卷积神经网络使用网络完成图像分类1案例描述1案例描述学习如何搭建CNN卷积神经网络,训练cifar-10数据,识别图片中的内容。2案例分析2案例分析数据集介绍:cifar-10是由Hinton的学生AlexKrizhevsky和IlyaSutskever整理的一个用于识别普适物体的小型数据集。一共包含10个类别的RGB彩色图片:飞机(airplane)、汽车(automobile)、鸟类(bird)、猫(cat)、鹿(deer)、狗(dog)、蛙类(frog)、马(horse)、船(ship)和卡车(truck)。图片由32×32彩色图像组成,每个类有6000个图像。cifar-10数据集中共有50000个训练图像和10000个测试图像。3案例实施3案例实施1.加载数据fromtensorflow.kerasimportdatasets,layers,models(train_images,train_labels),(test_images,test_labels)=datasets.cifar10.load_data()2.搭建卷积神经网络Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。Keras同样提供了序列化方法,可以方便的帮助搭建神经网络。model=models.Sequential()model.add(layers.Conv2D(32,(3,3),activation='relu',input_shape=(32,32,3)))model.add(layers.MaxPooling2D((2,2)))model.add(layers.Flatten())model.add(layers.Dense(64,activation='relu'))3案例实施pile(optimizer='adam’,

loss='sparse_categorical_crossentropy’,

metrics=['accuracy’])4.可视化训练过程为了方便查看训练过程中准确率的变化,可以借助matplotlib来可视化训练过程。3案例实施3.编译并训练此次训练过程中使用了adam优化函数——一个比较智能的优化函数方法,自适应时刻估计方法(AdaptiveMomentEstimation)。它在模型训练优化的过程中通过让每个参数获得自适应的学习率,来获得优化质量和速度的双重提升。主要包含以下几个显著的优点:1.实现简单,计算高效,对内存需求少;2.参数的更新不受梯度的伸缩变换影响;3.超参数具有很好的解释性,且通常无需调整或仅需很少的微调;4.更新的步长能够被限制在大致的范围内(初始学习率);5.能自然地实现步长退火过程(自动调整学习率);6.很适合应用于大规模的数据及参数的场景;7.适用于不稳定目标函数;8.适用于梯度稀疏或梯度存在很大噪声的问题。ThankYOU!迁移学习认识迁移学习01任务finetune03任务迁移学习特点02任务学习目标掌握迁移学习的基本概念掌握finetune的概念掌握迁移学习的特点1认识迁移学习1认识迁移学习深度学习面临的困境1.大数据与少标注之间的矛盾。深度学习模型的训练和更新,均依赖于数据的标注。数据的标注是一个耗时且昂贵的操作,因为没有足够的标定数据用来学习,使得这些领域一直不能很好的发展。2.大数据与弱计算之间的矛盾。大数据,就需要大设备、强计算能力的设备来进行存储和计算。绝大多数普通用户是不可能具有这些强计算能力的。在这种情况下,普通人想要利用这些海量的大数据去训练模型完成自己的任务,基本上不太可能。3.普适化模型与个性化需求之间的矛盾。深度学习的目标是构建一个尽可能通用的模型,使得这个模型对于不同用户、不同设备、不同环境、不同需求,都可以很好地进行满足。4.特定应用的需求。深度学习已经被广泛应用于现实生活中。在这些应用中,也存在着一些特定的应用,怎样去高效的使用通用模型解决特定的需求。1认识迁移学习迁移学习的基本概念迁移学习(TransferLearning)是一种深度学习方法,就是把为任务A开发的模型作为初始点,重新应用在为任务B开发模型的过程中,顾名思义就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习

(StartingFromScratch)。2迁移学习的特点2迁移学习的特点迁移学习与一般深度学习的区别主要表现在数据分布,数据标签,以及模型使用三个方面。在数据分布方面,一般的深度学习需要训练数据和测试数据同分布,即标准数据和非标准数据在训练集和测试集中所占的比例大致相同。而在迁移学习中,训练数据和测试数据的分布可以不同。在数据标签方面,一般的深度学习往往需要大量的数据标注,而在迁移学习中,数据标注可以不用那么多。在模型使用方面,一般的深度学习需要针对每个任务分别建模,而在迁移学习中,任务不需要重新开始建立模型,可以重用之前的模型。2迁移学习的特点迁移学习使用方法:可以在自己的预测模型问题上使用迁移学习,通常有两种方法:开发模型方法和预训练模型方法。

对于开发模型方法,分为四步:(1)选择源任务:必须选择一个与大量数据相关的预测模型问题,这个大量的数据需要与输入数据,输出数据或从输入到输出数据映射过程中学习的概念之间存在某种关系。(2)开发源模型:接下来,必须为这个第一项任务开发一个熟练的模型;该模型必须比原始模型更好,以确保一些特征学习已经发挥了其作用。(3)重用模型:然后可以将适合源任务的模型用作感兴趣的另一个任务模型的起点;这取决于所使用的建模技术,可能涉及到了全部或部分模型。(4)调整模型:可选项,对感兴趣任务的调整输入—输出配对数据或改进模型。2迁移学习的特点对于预训练模型方法,分为三步:(1)选择源任务:从可用的模型中选择预训练的元模型,许多研究机构会发布已经在大量的且具有挑战性的数据集上训练好的模型,在可用模型的模型池里面也能找到这些模型。(2)重用模型:然后可以将预训练的模型用作感兴趣的另一个任务模型的起点,这取决于所使用的建模技术,可能涉及使用全部或部分模型。(3)调整模型:可选项,对感兴趣任务的调整输入—输出配对数据或改进模型。

其中,第二类迁移学习方法在深度学习领域是很常见的。3finetune3finetune在介绍finetune之前,先了解一下什么是预训练模型。在搭建一个网络模型来完成一个特定的图像分类的任务时,首先,需要随机初始化参数,然后开始训练网络,不断调整直到网络的损失越来越小。在训练的过程中,一开始初始化的参数会不断变化。当结果很满意的时候,就可以将训练模型的参数保存下来,以便训练好的模型可以在下次执行类似任务时获得较好的结果。这个过程就是pre-training。之后接收到一个类似的图像分类任务。这时候,就可以直接使用之前保存下来的模型的参数作为这一任务的初始化参数,然后在训练的过程中,依据结果不断进行一些修改。这时候使用的就是一个pre-training/trained模型,而过程就是fine-tuning。所以,预训练就是指预先训练的一个模型或者指预先训练模型的过程;微调就是指将预训练模型作用于自己的数据集,并使参数适应自己数据集的过程。3finetune为什么使用微调?首先要了解卷积网络的核心是:浅层卷积提取基础特征,比如边缘,轮廓等;深层卷积提取抽象特征,比如整个脸型;全连接层根据特征组合进行评分分类。而预训练模型的特点是:使用大型数据集进行训练,具备提取浅层基础特征和深层抽象特征的能力。使用微调不仅可以有效避免从头开始训练,浪费时间和资源的问题,而且可以一定程度上解决模型泛化能力低的问题。3finetune什么情况下使用微调呢?首先,使用的数据集与预训练模型的数据集相似,如果不太相似,比如使用的预训练模型是自然场景下的图片训练的,而目标任务是人脸识别,效果可能就没有那么好了。因为人脸的特征和自然景物的特征提取是不同的,所以相应的参数训练后也是不同的。其次当使用自己搭建的CNN模型准确率太低的时候也可以考虑使用微调。在实践中更常用的是,对于拥有较小的数据集,只需对那些经过大型数据集训练过的预训练模型结构进行微调,就可以达到快速训练模型的效果。ThankYOU!基于迁移学习

的图像识别案例描述01任务案例分析02任务案例实施03任务学习目标掌握调用图像分类的卷积神经网络的预训练模型对预训练模型进行微调使用微调后的预训练模型对cifar-10数据进行训练分类1案例描述1案例描述将学习如何使用预训练的VGG-16和ResNet50来实现cifar-10数据集的分类。2案例分析2案例分析加载数据部分同上一个案例,只需把数据输入到预训练的VGG-16或者ResNet50中。VGG-16的网络结构为右侧图绿色栏所示,其中block1中有2个包含64个卷积核的卷积层,block2包含2个128个卷积核的卷积层,block3有3个包含256个卷积核的卷积层,block4有3个包含512个卷积核的卷积层,block5有3个包含512个卷积核的卷积层,加上2个包含4096个神经元的全连接层和1个包含1000个神经元的全连接层。2案例分析ResNet有2个基本的block,一个是identityblock,输入和输出的维度是一样的,所以可以串联多个;另外一个基本block是convblock,输入和输出的维度是不一样的,所以不能连续串联,它的作用本来就是为了改变特征向量的维度。convblockidentityblock2案例分析ResNet50网络结构中block_sizes=[3,4,6,3]指的是stage1(firstpool)之后的4个layer的block数,分别对应res2,res3,res4,res5,每一个layer的第一个block在shortcut上做conv+BN,即convblock。3案例实施3案例实施1.导库在Keras里面提供了许多在ImageNet上的预训练模型,VGG-16和ResNet50就是其中的预训练模型,可以通过fromtensorflow.keras.applicationsimportVGG16和fromtensorflow.keras.applications.resnet50importResNet50引入VGG-16模型和RseNet50模型。调用VGG-16模型和RseNet50模型分别使用VGG16(include_top=Tr

温馨提示

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

评论

0/150

提交评论