CNN之图像识别

什么是图像识别

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

好看不?

卧槽,真好看!这进气格栅,这前铲,真大!

臭直男,就知道看车!

那不然呢,这可是AMG GTR诶

......

对象1:奔驰AMG GTR

对象2:妹子

那么问题来了,人眼一眼就能分辨,但是计算机如何分辨呢?

模式识别

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

还是上图为例,要准确识别出车和车模,就需要大量的车和人的图片对计算机进行训练,让它知道车的特征和人的特征,然后去进行区分

图像识别的过程

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

分类与检测

当机器看到这张图的时候,首先就要确定这张图片是什么?风景?人物?事物?美食?...这就是分类

当确定类型之后,就要对图中的对象进行进一步检测了,红色框是车模,绿色框是车,这就是检测出来的结果。

物体分类与检测在很多领域得到广泛应用,包括安防领域的人脸识别、行人检测、智能视频分析、行人跟踪等,交通领域的交通场景物体识别、车辆计数、逆行检测、车牌检测与识别,以及互联网领域的基于内容的图像检索、相册自动归类等。

自动驾驶,最常见,最直观。

常见的卷积神经网络

VGG(VGG16)

VGG之所以经典,在于它首次将深度学习做得非常“深”,达到了16-19层,同时,它用了非常“小”的卷积核(3X3)。

哇,这个结构的艺术成分很高啊

有多高啊

洪家铁线圈大师的强力推荐(敢说不好,打屎你,以德服人)

来看下它的结构:

具体的过程:

1:输入图像尺寸为224x224x3,经64个通道为3的3x3的卷积核,步长为1,padding=same填充,卷积两次,再经ReLU激活,输出的尺寸大小为224x224x64
2:经max pooling(最大化池化),滤波器为2x2,步长为2,图像尺寸减半,池化后的尺寸变为112x112x64
3:经128个3x3的卷积核,两次卷积,ReLU激活,尺寸变为112x112x128
4:max pooling池化,尺寸变为56x56x128
5:经256个3x3的卷积核,三次卷积,ReLU激活,尺寸变为56x56x256
6:max pooling池化,尺寸变为28x28x256
7:经512个3x3的卷积核,三次卷积,ReLU激活,尺寸变为28x28x512
8:max pooling池化,尺寸变为14x14x512
9:经512个3x3的卷积核,三次卷积,ReLU,尺寸变为14x14x512
10:max pooling池化,尺寸变为7x7x512
11:然后Flatten,将数据拉平成向量,变成一维51277=25088。
12:再经过两层1x1x4096,一层1x1x1000的全连接层(共三层),经ReLU激活
13:最后通过softmax输出1000个预测结果

MD,那么多字,看的头疼,上图!

我们看一下最后那个1*1的卷积是干嘛用的:

实现特征通道的升维和降维,通过控制卷积核的数量达到通道数大小的放缩。而池化层只能改变高度和宽度,无法改变通道数。

Resnet

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

普通的直连的卷积神经网络和ResNet的区别:

普通的直连的卷积神经网络和ResNet的最大区别在于,ResNet有很多旁路的支线将输入直接连到后面的层,使得后面的层可以直接学习残差,这种结构也
被称为shortcut或skip connections。
传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,
保护信息的完整性,整个网络只需要学习输入、输出差别的那一部分,简化了学习目标和难度。

假设,预激活后的输出是,[1,2,3,4,5],经过卷积之后,可能只剩[1,2,3],但是旁路会保留这些信息。
像不像小时候让朋友去买东西,原本是两个汉堡,一大盒薯条,六个蛋挞,结果到你手上只剩俩蛋挞了,旁路就是外卖员,会原封不动的给你送来。 看到这里,各位老板还不V我50看看实力吗(手动滑稽)

Resnet50(50,卧槽,呼应上了啊)

ResNet50有两个基本的块,分别名为Conv Block和Identity Block,其中Conv Block输入和输出的维度是不一样的,所以不能连续串联,它的作用是改变网络的维度;Identity Block输入维度和输出维度相同,可以串联,用于加深网络的。

 

看右图,Conv Block下面可以跟着好几个Identity Block,但是没有两个Conv Block是连在一起的,因为Conv输入和输出的维度不同,举个栗子:
Conv:[3*3*3] → [3*3*1]
Identity:[3*3*1] → [3*3*1]

Conv就好比是我去健身房,然后吃轻食餐,Identity是我也去了,然后......:

BatchNormalization(批量归一化)

所有输出保证在0~1之间。
所有输出数据的均值接近0,标准差接近1的正太分布。使其落入激活函数的敏感区,避免梯度消失,加快收敛。
加快模型收敛速度,并且具有一定的泛化能力。
可以减少dropout的使用。
归一化咱们已经知道了,你肯定知道什么叫批量归一化,但是批量,这个批量是指的哪些?
举个栗子:
在网络训练中,从第二层开始,每一层的输入都是上一层的输出,所以每一层的输入和输出都不一样。
so!!!!!!!!!!!
BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布。

迁移学习-fine tuning

常见的两类迁移学习场景:
1 卷积网络当做特征提取器。使用在ImageNet上预训练的网络,去掉最后的全连接层,剩余部分当做特征提取器(例如AlexNet在最后分类器前,是4096维的特征向量)。这样提取的特征叫做CNN codes。得到这样的特征后,可以使用线性分类器(Liner SVM、Softmax等)来分类图像。
2 Fine-tuning卷积网络。替换掉网络的输入层(数据),使用新的数据继续训练。Fine-tune时可以选择fine-tune全部层或部分层。通常,前面的层提取的是图像的通用特征(generic features)(例如边缘检测,色彩检测),这些特征对许多任务都有用。后面的层提取的是与特定类别有关的特征,因此fine-tune时常常只需要Fine-tuning后面的层。
有论文依据表明可以保留训练好的inception模型中所有卷积层的参数,只替换最后一层全连接层。在最后这一层全连接层之前的网络称为瓶颈层
原理:在训练好的inception模型中,因为将瓶颈层的输出再通过一个单层的全连接层,神经网络可以很好的区分1000种类别的图像,所以可以认为瓶颈层输出的节点向量可以被作为任何图像的一个更具有表达能力的特征向量。于是在新的数据集上可以直接利用这个训练好的神经网络对图像进行特征提取,然后将提取得到的特征向量作为输入来训练一个全新的单层全连接神经网络处理新的分类问题。
一般来说在数据量足够的情况下,迁移学习的效果不如完全重新训练。但是迁移学习所需要的训练时间和训练样本要远远小于训练完整的模型。
这其中说到inception模型,其实它是和Alexnet结构完全不同的卷积神经网络。在Alexnet模型中,不同卷积层通过串联的方式连接在一起,而inception模型中的inception结构是将不同的卷积层通过并联的方式结合在一起
Inception 网络是 CNN 发展史上一个重要的里程碑。在 Inception 出现之前,大部分流行 CNN仅仅是把卷积层堆叠得越来越多,使网络越来越深,以此希望能够得到更好的性能。但是存在以下问题:
1. 图像中突出部分的大小差别很大。
2. 由于信息位置的巨大差异,为卷积操作选择合适的卷积核大小就比较困难。信息分布更全局性的图像偏好较大的卷积核,信息分布比较局部的图像偏好较小的卷积核。
3. 非常深的网络更容易过拟合。将梯度更新传输到整个网络是很困难的。
4. 简单地堆叠较大的卷积层非常消耗计算资源。

Inception module

解决方案:
为什么不在同一层级上运行具备多个尺寸的滤波器呢?网络本质上会变得稍微「宽一些」,而不是「更深」。作者因此设计了 Inception 模块。
Inception 模块( Inception module ): 它使用 3 个不同大小的滤波器(1x1、3x3、5x5)对输入执行卷积操作,此外它还会执行最大池化。所有子层的输出最后会被级联起来,并传送至下一个Inception 模块。
一方面增加了网络的宽度,另一方面增加了网络对尺度的适应性。

实现降维的 Inception 模块: 如前所述,深度神经网络需要耗费大量计算资源。为了降低算力成本,作者在 3x3 和 5x5 卷积层之前添加额外的 1x1 卷积层,来限制输入通道的数量。尽管添加额外的卷积操作似乎是反直觉的,但是 1x1 卷积比 5x5 卷积要廉价很多,而且输入通道数量减少也有利于降低算力成本。

1*1卷积和5*5卷积性能对比:

[Inception V1]1×1卷积的理解_inception模型中1*1_Le0v1n的博客-CSDN博客

InceptionV1--Googlenet

1. GoogLeNet采用了Inception模块化(9个)的结构,共22层;
2. 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。

InceptionV2

Inception V2 在输入的时候增加了BatchNormalization:
所有输出保证在0~1之间。
所有输出数据的均值接近0,标准差接近1的正太分布。使其落入激活函数的敏感区,避免梯度消失,加快收敛。
加快模型收敛速度,并且具有一定的泛化能力。
可以减少dropout的使用。
作者提出可以用 2个连续的3x3卷积层(stride=1)组成的小网络来代替单个的5x5卷积 ,这便是 Inception V2 结构。
5x5卷积核参数是3x3卷积核的25/9=2.78倍。

此外,作者将 n*n 的卷积核尺寸分解为 1×n 和 n×1 两个卷积。

前面三个原则用来构建三种不同类型的 Inception 模块。

InceptionV3

InceptionV3 整合了前面 Inception v2 中提到的所有升级,还使用了7x7 卷积

Inception V3设计思想和Trick:
1:分解成小卷积很有效,可以降低参数量,减轻过拟合,增加网络非线性的表达能力。
2:卷积网络从输入到输出,应该让图片尺寸逐渐减小,输出通道数逐渐增加,即让空间结构化,将空间信息转化为高阶抽象的特征信息。
3:Inception Module用多个分支提取不同抽象程度的高阶特征的思路很有效,可以丰富网络的表达能力

InceptionV4

1. 左图是基本的Inception v2/v3模块,使用两个3x3卷积代替5x5卷积,并且使用average pooling,该模块主要处理尺寸为35x35的feature map;
2. 中图模块使用1xn和nx1卷积代替nxn卷积,同样使用average pooling,该模块主要处理尺寸为17x17的feature map;
3. 右图将3x3卷积用1x3卷积和3x1卷积代替。
总的来说 ,Inception v4中基本的Inception module还是沿袭了Inception v2/v3的结构,只是结构看起来更加简洁统一,并且使用更多的Inception module,实
验效果也更好。

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

Mobilenet

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

深度可分离卷积depthwise separable convolution

通俗地理解就是3x3的卷积核厚度只有一层,然后在输入张量上一层一层地滑动,每一次卷积完生成一个输出通道,当卷积完成后,再利用1x1的卷积调整厚度。

对于一个卷积点而言:
假设有一个3×3大小的卷积层,其输入通道为16、输出通道为32。具体为,32个3×3大小的卷积核会遍历16个通道中的每个数据,最后可得到所需的32个输出通道,所需参数为16×32×3×3=4608个。
应用深度可分离卷积,用16个3×3大小的卷积核分别遍历16通道的数据,得到了16个特征图谱,接着用32个1×1大小的卷积核遍历这16个特征图谱,所需参数为16×3×3+16×32×1×1=656个。
可以看出来depthwise separable convolution可以减少模型的参数。

卷积神经网络设计技巧:

接下来的内容都是扯淡的,没个十年脑血栓想不出来(手动滑稽)

1) 架构遵循应用
你也许会被 Google Brain 或者 Deep Mind 这些有想象力的实验室所发明的那些耀眼的新模型所吸引,但是其中许多要么是不可能实现的,要么是不实用的对于你的需求。或许你应该使用 对你的特定应用最有意义的模型,这种模型或许非常简单,但是仍然很强大, 例如 VGG。
2) 路径的激增
每年ImageNet Challenge的赢家都比上一年的冠军使用更加深层的网络。从AlexNet 到Inception到Resnets,有”网络的路径数量成倍增长”的趋势。
3) 追求简约
更大的并不一定是更好的。(轮胎宽就是快,马力大就是好!)

powerrrrrrrrrrrrrrr!!!!!!!!!!!!
4)增加对称性
无论是在建筑上,还是在生物上,对称性被认为是质量和工艺的标志。
5) 金字塔形状
你总是在表征能力和减少冗余或者无用信息之间权衡。CNNs通常会降低激活函数的采样,并会增加从输入层到最终层之间的连接通道。
6) 过渡训练
另一个权衡是训练准确度和泛化能力。用正则化的方法类似 drop-out 或 drop-path进行提升泛化能力,这是神经网络的重要优势。用比实际用例更难的问题训练网络,以提高泛化性能。
7) 覆盖问题的空间
为了扩大训练数据和提升泛化能力,要使用噪声和人工增加训练集的大小。例如随机旋转、裁剪和一些图像增强操作。
8) 递增的功能结构
当架构变得成功时,它们会简化每一层的“工作”。在非常深的神经网络中,每个层只会递增地修改输入。
在ResNets中,每一层的输出可能类似于输入。所以,在实践中,请在ResNet中使用短的跳过长度。
9) 标准化层的输入
标准化是可以使计算层的工作变得更加容易的一条捷径,并且在实际中可以提升训练的准确性。标准化把所有层的输入样本放在了一个平等的基础上(类似于单位转换),这允许反向传播可以更有效地训练。
10)使用微调过的预训练网络( fine tuning)
机器学习公司 Diffbot 的 CEO Mike Tung 说,“如果你的视觉数据和 ImageNet 相似,那么用预训练网络会帮助你学习得更快”。低水平的CNN通常可以被重复使用,因为它们大多能够检测到像线条和边缘这些常见的模式。比如,用自己设计的层替换分类层,并且用你特定的数据去训练最后的几个层。
11)使用循环的学习率
学习率的实验会消耗大量的时间,并且会让你遇到错误。自适应学习率在计算上可能是非常昂贵的,但是循环学习率不会。使用循环学习率时,你可以设置一组最大最小边界,并且在这个范围改变它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/86679.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker(二) Docker容器

在docker中的容器都是由镜像所创建的,一个镜像可以创建多个容器。 一、调试Docker 启动Docker systemctl start docker 查看Docker中有哪些镜像 docker images 下载镜像 docker pull hello-world 运行镜像 docker run hello-world 出现 Hello from Docker! 这…

构建系统自动化-autoreconf

autoreconf简介 autoreconf是一个GNU Autotools工具集中的一个命令,用于自动重新生成构建系统的配置脚本和相关文件。 Autotools是一组用于自动化构建系统的工具,包括Autoconf、Automake和Libtool。它们通常用于跨平台的软件项目,以便在不同…

[C语言]分支与循环

导言: 在人生中我们总会有选择,**如下一顿吃啥?**又或者每天都是在重复,吃饭!!!!,当然在C语言中也有选择和重复那就是分支语句与循环语句 文章目录 分支循环循环中的关键…

手写代码-前端面试

GitHub:手写代码集合

大数据-玩转数据-Flink营销对账

一、说明 在电商网站中,订单的支付作为直接与营销收入挂钩的一环,在业务流程中非常重要。对于订单而言,为了正确控制业务流程,也为了增加用户的支付意愿,网站一般会设置一个支付失效时间,超过一段时间不支…

一云多芯,智能化转型的下一个工程化挑战

进入2023年,产业数字化和智能化转型升级进入了大规模工程化落地阶段。根据中国信通院《中国数字经济发展研究报告(2023)》,数字经济已经占我国GDP比重达到41.5%,相当于第二产业占国民经济的比重。随着产业数字化和智能…

【数据结构】 LinkedList的模拟实现与使用

文章目录 🍀什么是LinkedList🌴LinkedList的模拟实现🚩创建双链表🚩头插法🚩尾插法🚩任意位置插入🚩查找关键字🚩链表长度🚩打印链表🚩删除第一次出现关键字为…

YOLOv5+deepsort实现目标追踪。(附有各种错误解决办法)

一、YOLOv5算法相关配置 🐸这里如果是自己只想跑一跑YOLOV5的话,可以参考本章节。只想跑通YOLOv5+deepsort的看官移步到下一章节。 1.1 yolov5下载 🐸yolov5源码在github下载地址上或者Gitee上面都有。需要注意的是由于yolov5的代码库作者一直在维护,所以下载的时候需…

【Unity小技巧】Unity探究自制对象池和官方内置对象池(ObjectPool)的使用

文章目录 前言不使用对象池使用官方内置对象池应用 自制对象池总结源码参考完结 前言 对象池(Object Pool)是一种软件设计模式,用于管理和重用已创建的对象。在对象池中,一组预先创建的对象被维护在一个池中,并在需要时…

OJ练习第152题——分割回文串 II

分割回文串 II 力扣链接:132. 分割回文串 II 题目描述 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。 返回符合要求的 最少分割次数 。 示例 Java代码 class Solution {public int minCut(String s) {int n s.leng…

听说你还不知道什么是python?本文将带你发掘python的魅力并让你爱上他

文章目录 前言什么是pythonpython的由来我们为什么要学习python帮助python学习的网站总结 前言 各位朋友们,大家好。龙叔我后台经常收到私信问什么是Python?有必要学习这门语言么?今天,将通过本文告知大家Python是什么&#xff1…

浅谈日常使用的 Docker 底层原理-三大底座

适合的读者,对Docker有过简单了解的朋友,想要进一步了解Docker容器的朋友。 前言 回想我这两年,一直都是在使用 Docker,看过的视频、拜读过的博客,大都是在介绍 Docker 的由来、使用、优点和发展趋势,但对…

QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动

QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动 0、背景1、基本环境2、开发环境编译Qt MySql数据库驱动2.1 依赖说明2.2 MySQL驱动编译过程 3、交叉编译Qt MySql数据库驱动3.1 依赖说明3.3.1 如何在交叉编译服务器上找到mysql.h及相关头文件3.3.2 如果…

【PHP】基础语法变量常量

文章目录 PHP简介前置知识了解静态网站的特点动态网站特点 PHP基础语法代码标记注释语句分隔(结束)符变量变量的基本概念变量的使用变量命名规则预定义变量可变变量变量传值内存分区 常量基本概念常量定义形式命名规则使用形式系统常量魔术常量 PHP简介 PHP定义:一…

【服务器】Strace显示后台进程输出

今天有小朋友遇到一个问题 她想把2331509和2854637这两个进程调到前台来,以便于在当前shell查看这两个python进程的实时输出 我第一反应是用jobs -l然后fg (参考这里) 但是发现jobs -l根本没有输出: 原因是jobs看的是当前ses…

Oracle Database12c数据库官网下载和安装教程

文章目录 下载安装Oracle自带的客户端工具使用 下载 进入oracle官网 点击下载连接之后右上角会有一个下载 我们只需要数据库本体就够了 运行这个下载器 等待下好之后即可 出现 Complete 之后代表下载成功,然后我们解压即可 安装 双击 双击setup.exe 根据…

NLP | 基于LLMs的文本分类任务

比赛链接:讯飞开放平台 来源:DataWhale AI夏令营3(NLP) Roberta-base(BERT的改进) ①Roberta在预训练的阶段中没有对下一句话进行预测(NSP) ②采用了动态掩码 ③使用字符级和词级…

引领行业高质量发展|云畅科技参编《低代码开发平台创新发展路线图(2023)》

8月8日-9日,中国电子技术标准化研究院于北京顺利召开《低代码开发平台创新发展路线图(2023)》封闭编制会。云畅科技、浪潮、百度、广域铭岛等来自低代码开发平台解决方案供应商、用户方、科研院所等近30家相关单位的40余位专家参与了现场编制…

android studio gradle build running慢 卡住不动 失败 原因与解决方式

快速导航 分析原因解决办法 分析原因 主要原因是 gradle 构建时无法从网络获取需要的包或库。 解决办法 将国外库替换为阿里云镜像库。 例如 google 对应的库是 maven { url ‘https://maven.aliyun.com/repository/google’ }

基于决策树(Decision Tree)的乳腺癌诊断

决策树(DecisionTree)学习是以实例为基础的归纳学习算法。算法从--组无序、无规则的事例中推理出决策树表示形式的分类规则,决策树也能表示为多个If-Then规则。一般在决策树中采用“自顶向下、分而治之”的递归方式,将搜索空间分为若千个互不相交的子集,在决策树的内部节点(非叶…