当前位置:   article > 正文

AI学习笔记(十一)CNN之图像识别(上)_cnn ai

cnn ai

图像识别

图像识别简介

  • 图像识别技术是信息时代的一门重要的技术,其产生的目的是为了让计算机代替人类去处理大量的物理信息。随着计算机技术的发展,人类对图像识别技术的认识越来越深刻;
  • 图像识别技术的定义为利用计算机对图像处理、分析和理解,以识别不同模式的目标和对象的技术;
  • 图像识别技术的过程分为信息的获取、预处理、特征提取和选择、分类器设计和分类决策。

模式识别

  • 模式识别是人工智能和信息科学的重要组成部分。模式识别是指对表示事物或现象的不同形式的信息做分析和处理从而得到一个对事物或现象做出描述、辨认和分类等的过程。
  • 计算机的图像识别技术就是模拟人类的图像识别过程。在图像识别的过程中进行模式识别时必不可少的。
  • 模式识别原本是人类的一项基本技能。但随着计算机的发展和人工智能的兴起,人类本身的模式识别已经满足不了生活的需要,于是人类就希望用计算机来代替或人类的部分脑力劳动。这样计算机的模式识别就产生了。
  • 简单地说,模式识别就是对数据进行分类,它是一门与数学紧密集合的科学,其中所用的思想大部分是概率与统计。

图像识别的过程

1、信息的获取:是指通过长安器,将光或声音等信息转化为电信息。也就是获取研究对象的基本信息并通过某种方法将其转变为机器能够认识的信息;
2、预处理:主要是指图像处理中的去噪、平滑、变换等操作,从而加强图像的重要特征,图像增强;
3、特征提取和选择:是指在模式识别中,需要进行特征的抽取和选择。特征抽取和选择在图像识别过程中是非常关键的技术之一。
4、分类器设计:是指通过训练而得到一种识别规则,通过此识别规则可以得到一种特征分类,使图像识别技术能偶得到高识别率。分类决策是指在特征空间中对识别对象进行分类,从而更好地识别所研究的对象具体属于哪一类。

图像识别的应用

图像识别的应用十分广泛,包括图像分类、网络搜索、以图搜索、智能家居、电商购物、农林业,森量调查、金融、安防、医疗、娱乐监管等等。

分类与检测

  • 当我们面对一张图片的时候,最基础的任务就是这张图片是什么,是风景图还是人物图,是描写建筑物的还是关于食物的,这就是分类。
  • 当知道了图像的类别的时候,进一步就是检测了,例如知道这个图像是关于人脸的,那么这个人脸在哪里,能不能框出来;
  • 物体分类与检测在很多领域得到广泛应用,包括安防领域的人脸识别、行人检测、智能视频分析、行人跟踪,交通领域的交通场景物体识别、车辆技术、逆行检测、车牌检测与识别,以及互联网领域的基于内容的图像检索、相册自动归类等。
    在这里插入图片描述
    不同数据量不同网络的能力表现:
    在这里插入图片描述

VGG

VGG之所以经典,在于它首次将深度学习做得非常“深”,达到了16-19层,同事,它用了非常“小”的卷积核(3x3)。
在这里插入图片描述
在这里插入图片描述
1、一张原始图片被resize到(244,244,3)
2、conv1两次[3,3]卷积网络,输出的特征为64,输出为(224,224,64),再2x2最大池化,输出net为(112,112,64);
3、conv2两次[3,3]卷积网络,输出的特征为128,输出为(112,112,128),再2x2最大池化,输出net为(56,56,128);
4、conv3两次[3,3]卷积网络,输出的特征为256,输出为(56,56,256),再2x2最大池化,输出net为(28,28,256);
5、conv3两次[3,3]卷积网络,输出的特征为256,输出为(28,28,512),再2x2最大池化,输出net为(14,14,512);
6、conv3两次[3,3]卷积网络,输出的特征为256,输出为(14,14,512),再2x2最大池化,输出net为(7,7,512);
7、利用卷积的方式模拟全连接,效果等同,输出net为(1,1,4096)。共进行两次
8、利用卷积的方式模拟全连接,效果等同,输出net为(1,1,1000).
最后输出的就是每个类的预测。

Resnet

Residual net(残差网络):将靠前若干层的某一层数据输出直接跳过多层引入到后面数据的输入部分。
残差神经元:假定某段神经网络的输入是x,期望输出是H(x),如果直接将输入x传到输出作为初始结果,那么我们需要学习的目标就是F(x)=H(x)-x,这就是一个残差神经单元,相当于将学习目标改变了,不再是学习一个完整的输出H(x),只是输出和输入的差别H(x)-x,即残差。
在这里插入图片描述

  • 普通的直接的卷积神经网络和ResNet的最大区别在于,ResNet有很多旁路的支线将输入直接连接到后面的层,使得后面的层可以直接学习残差,这种结构也被称为shortcut或skip connections。
  • 传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失,损耗等问题。ResNet在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络只需要学习输入、输出差别那一部分,简化了学习目标和难度。
    ResNet50有两个基本块,分别名为Conv Block和Identity Block,其中Conv Block输入和输出的维度是不一样的,所以不能直接串联,它的作用是改变网络的维度,Identity Block输入维度和输出维度相同,可以串联,用于加深网络的。
    在这里插入图片描述

迁移学习&inception

  • 现在工程中最为常用的还是Vgg,resnet,inception这几种结构,设计者通常会先直接套用原版的模型堆数据进行训练一次,然后选择想过较好的模型进行微调与模型缩减;
  • 工程上使用的模型必须在精度高的同事速度要快;
  • 常用的模型缩减的方法是减少卷册的个数与减少resnet的模块数。

卷积神经网络迁移学习fine-tuning

  • 在实践中,由于大多数数据集不够大,很少有人从头开始训练网络,常见的做法是使用预训练的网络(例如在ImageNet上训练的分类1000类的网络)来重新fine-tuning(微调),或者当做特征提取器;
  • 迁移学习简单的讲就是将一个在数据集上训练好的神经网络模型通过简单的调整快速移动到另一个数据集上;
  • 随着模型的层数即模型的复杂度的增加,模型的错误率也随着降低。但是要训练一个复杂的卷积神经网络需要非常多的标注信息,同事也需要几天甚至几周的时间,为了解决标准数据和训练时间的问题,就可以使用迁移学习。

fine-tuning常见的两种迁移学习场景

1、卷积网络当做特征提取器,使用在ImageNet上预测训练的网络,去掉最后的全连接层,剩余部分当做特征提取器(例如AleiNet在最后分类器前,是4096维的特征向量)。这样提取的特征叫做CNN codes。得到这样的特征后,可以使用线性分类器(Liner SVM、softmax等)来分类图像;
2、Fine-tuning卷积网络。替换掉网络的输入层(数据),使用新的数据继续训练。Fine-tune时可以选择fine-tune全部层或部分层。通常,前面的层提取的是图像的通用特征(generic features),例如边缘检测,色彩检测,这些特征对许多人物都有用,后面的层提取的是与特定类别有关的特征,因此fine-tune时常常只需要fine-tuning后面的层。

卷积神经网络迁移学习Inception

  • 有论文依据表明可以保留训练好的inception模型中所有卷积的参数,只替换最后一层全连接层。在最后这一层全连接层之前的网络称作瓶颈层。
  • 原理:在训练好的inception模型中,因为将瓶颈层输出在通过一个单层的全连接层,神经网络可以很好地区分1000种类别的图像,所以可以认为瓶颈层输出的节点向量可以被作为任何图像的一个更具有表达能力的特征向量。于是在新的数据集上可以直接利用这个训练好的神经网络对图像进行特征提取,然后将提取得到的特征向量作为输入来训练一个全新的单层全连接神经网络处理新的分类问题。
  • 一般来说在数据集足够的情况下,迁移学习的效果不如完全重新训练。但是迁移学习所需要的训练时间和训练样本远远小于训练完整的模型。
  • 这其中说到inception模型,其实他是和Alexnet结构完全不同的卷积神经网络。在Alexnet模型汇总,不同卷积层通过串联的方式连接在一起,而inception模型中的inception结构是将不同的卷积层通过并联的方式结合在一起。

Inception

Inception网络是CNN发展史上一个重要的里程碑。在Inception出现之前,大部分流行CNN仅仅把卷积层堆叠得越来越多,是网络越来越深,以此希望能够得到更好的性能,但是存在以下问题:
1、图像突出部分的大小差别很大;
2、由于信息位置的巨大差异,为卷积操作选择合适的卷积核大小就比较困难。信息分布更全局性的图像偏好较大的卷积核,信息分布比较局部的神经网络偏好较小的卷积核;
3、非常深的神经网络更容易过拟合,将梯度更新传输到整个网络是很困难的;
4、简单的堆叠较大的卷积层非常消耗计算资源。
在这里插入图片描述

Inception module

inception模块使用了3个不同大小的滤波器( 1 × 1 , 3 × 3 , 5 × 5 1\times 1,3\times 3,5\times 5 1×1,3×3,5×5)对输入执行卷积操作,此外他还会执行最大池化。所有子层的输出最后会被级联起来,并传送至下一个Inception模块。一方面增加了网络的宽度,另一方面增加了网络对尺度的适应性。
在这里插入图片描述
实现降维的inception模块:由于太多层需要耗费大量计算资源,为了降低算力成本,作者在 3 × 3 3\times 3 3×3 5 × 5 5\times 5 5×5卷积层之前添加了额外的 1 × 1 1\times 1 1×1卷积层,来限制输入通道的数量。尽管添加额外的卷积操作似乎是反直觉的,但是 1 × 1 1\times 1 1×1卷积比 5 × 5 5\times 5 5×5卷积要廉价得多,而且输入通道数量减少与有利于降低算力成本。
在这里插入图片描述算力成本比较
##

InceptionV1–Googlenet

1、GoogleNet采用了Inceptin模块化(9个)的结构,共22层;
2、为了避免梯度消失,网络额外增加了2个辅助的softmax用于前向传导梯度。
在这里插入图片描述

InceptionV2

InceptionV2在输入的时候增加了BatchNormalization:

  • 所有输出保证都在0~1之间;
  • 所有输出数据的均值接近于0,标准差接近1的正态分布。使其落入激活函数的敏感区,避免梯度消失,加快收敛,并且具有一定的泛化能力;
  • 可以减少dropout的使用。
    x ^ ( k ) = x ( k ) − E [ x ( k ) ] V a r [ x ( k ) ] \widehat x^{(k)}=\frac{x^{(k)}-E\left[x^{(k)}\right]}{\sqrt{Var\left[x^{(k)}\right]}} x (k)=Var[x(k)] x(k)E[x(k)]
  • 作者提出可以用2个连续的 3 × 3 3\times 3 3×3卷积层(stride=1)组成的小网格来答题单个的 5 × 5 5\times 5 5×5卷积层, 5 × 5 5\times 5 5×5卷积核参数是 3 × 3 3\times 3 3×3卷积核的 25 / 9 = 2.78 25/9=2.78 25/9=2.78
    在这里插入图片描述
    另外,作者将 n × n n\times n n×n的卷积核分解成 1 × n 1\times n 1×n n × 1 n\times 1 n×1两个卷积。
    在这里插入图片描述
    inception总体结构如下图所示:
    在这里插入图片描述

InceptionV3

InceptionV3整合了InceptionV2中提到的所有升级,还是用了 7 × 7 7\times 7 7×7卷积,其设计思想主要如下:
1、分解成小卷积很有效,可以降低参数量,减轻过拟合,增加网络非线性的表达能力;
2、卷积网络从输入到输出,应该让图片尺寸逐渐减小,输出通道逐渐增加,即让空间结构化,将空间信息转化为高阶抽象的特征信息;
3、Inception Module用多个分支提取不同抽象程度的高阶特征点思路很有效,可以丰富网络的表达能力。
其结构如下:
在这里插入图片描述

Inception模型的优势

1、采用了 1 × 1 1\times 1 1×1卷积核,性价比高,用很少的计算量可以增加一层特征变换和非线性变换;
2、提出Batch Normalization,通过一定手段,把每层神经元的输入值分布拉到均值0方差1的正态分布,使其落入激活函数的敏感区,避免梯度消失,加快收敛;
3、引入Inception Module,4个分支结合的结构。

Mobilenet

MobileNet模型是Google针对手机等嵌入式设备提出的一种轻量级的深层神经网络,其使用的核心思想辨识depthwise separable convolution。

depthwise separable convolution

通俗地理解就是 3 × 3 3\times 3 3×3的卷积核厚度只有一层,然后在输入张量一层一层地滑动,每一次卷积完生成一个输出通道,当卷积完成后,再利用 1 × 1 1\times 1 1×1的卷积调整厚度。
在这里插入图片描述
对于一个卷极点而言:
假设有一个 3 × 3 3\times 3 3×3大小的卷积层,其输入通道为16,输出通道为32。具体为,32个 3 × 3 3\times 3 3×3大小的卷积核会遍历16个同道中人的每个数据,然后可得到所需的32个输出通道,所需参数为 16 × 32 × 3 × 3 = 4608 16\times 32\times 3\times 3=4608 16×32×3×3=4608个。
应用深度可分离卷积,用16个 3 × 3 3\times 3 3×3大小的卷积核分别遍历16通道的数据,得到16个特征图谱,在融合操作之前,接着用32个 1 × 1 1\times 1 1×1大小的卷积核遍历这16个特征图谱,所需参数为 16 × 3 × 3 + 16 × 32 × 1 × 1 = 656 16\times 3\times 3 + 16\times 32\times 1\times 1=656 16×3×3+16×32×1×1=656个。
可以看出depthwise separable convolution可以减少模型的参数。
在这里插入图片描述

卷积神经网络的设计技巧

背景问题

  • 想要熟练掌握训练神经网络的能力需要注意细节,需要考虑数据、硬件的限制,考虑从何种网络开始,应该建立多少卷积层,激励函数等等各方面;
  • 学习率的调整神经网络训练最重要的超参数,也是最难优化的参数之一。如果太小,可能永远不会得到一个解决方案;太大,可能刚好错过了最优解。如果用自适应学习率,又太耗计算资源;
  • 设计选择和超参数的设置极大地影响了CNN的训练和性能;

神经网络设计技巧

1)架构遵循应用
或许会被Google Brain或者Deep Mind这些想象力的实验室所发明的那些耀眼的新模型所吸引,但是其中很多很难用于实际的工程之中。或者应该使用对特定应用场景最有意义的模型,这种模型或许非常简单,但是仍然很强大,例如VGG。
在这里插入图片描述
2)路径的激增
每年ImageNet Challenge的赢家都比上一年的冠军使用更加深层的网络。从AlexNet到Inception到Resnets,有网络的路径数量成倍增长的趋势;
3)追求简约
更大的不一定是更好的;
4)增加对称性
5)金字塔形状
当在表征能力和减少冗余或者无用信息之间权衡时,CNNs通常会降低激活函数的采样,并会增加从输入层到最终层之间的连接通道;
6)过渡训练
另一个权衡时训练准确度和泛化能力,用正则化的方法类似dropout或droppath进行提升防滑能力,这是神经网络的重要优势。用于实际用力更难的问题训练网络,以提高泛化性能;
7)覆盖问题的空间
为了扩大训练数据与提升泛化能力,要使用噪声和人工增加训练集的大小。例如随机旋转、裁剪和一些图像增强操作;
8)递增的功能结构
当架构变得成功时,他会简化每一层的工作,在非常深的神经网络中,每个层只会递增地修改输入。在ResNets中,每一层的输出尽可能类似于输入,所以,在实践中,请在Resnet中使用较短的跳过长度;
9)标准化层的输入
变准化是可以使计算蹭的工作变得更加容易的一条捷径,并且在实际中可以提升训练的准确性。标准化把所有层的输入样本放在一个平等的基础上(类似于单位转换),这允许方向传播可以更有效的训练;
10)使用微调过的预训练网络(fine tuning)
机器学习公司Diffbot的CEO Mike Tung说:“如果你的视觉数据和ImageNet相似,那么用预训练网络会帮助你学习得更快”。低水平的CNN通常可以被重复使用,因为他们大多能够检测到像线条和边缘这些常见的模式。比如,用自己设计的层替换分类层,并且用你特定的数据去训练最后的几个层。
11)使用循环的学习率
学习率的实验会消耗大量的时间,自适应学习率在计算上可能是十分昂贵的,但是循环学习率不会,使用循环学习率时,可以设置一组最大最小边界,并且在这个范围内改变它。

CNN之图像识别(下)https://blog.csdn.net/qq_35813161/article/details/110500810

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/283406
推荐阅读
相关标签
  

闽ICP备14008679号