一、CNNs网络架构-基础网络架构(LeNet、AlexNet、ZFNet)

目录

1.LeNet

2.AlexNet

2.1 激活函数:ReLU

2.2  随机失活:Droupout

2.3 数据扩充:Data augmentation

2.4 局部响应归一化:LRN

2.5 多GPU训练

2.6 论文

3.ZFNet

3.1 网络架构 

3.2 反卷积

3.3 卷积可视化

3.4 ZFNet改进点

3.5 其他发现

3.6 论文

4.LeNet、AlexNet、ZfNet对比

5.参考文章


1.LeNet

LeNet5诞生于1998年,是最早的卷积神经网络之一, 由Yann LeCun完成,被认为是CNN的雏形。在那时候,没有GPU帮助训练模型,甚至CPU的速度也很慢,因此,神经网络模型处理图像时的大量参数并不能通过计算机得到很好的计算,LeNet5通过巧妙的设计,利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,从此卷积成为图像处理的之中可行方式。

Le Net - 5架构为例,卷积神经网络架构由输入层、卷积层、池化层、FC层和输出层4部分组成。

其中,卷积层和池化层负责对原始图像进行特征提取,全连接层负责对卷积池化提取到的特征进行学习,进一步根据这些特征来判断该输入图片属于哪一个类别。

论文:《Gradient-Based Learning Applied to Document Recognition》

https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=4cccb7c5b2d59bc0b86914340c81b26dd4835140

贡献:第一个CNNs架构;

缺陷:性能和效率较低;

2.AlexNet

2012-ILSVRC冠军,CNNs的一个重大转折点,在此之前,深度学习已经沉寂了将近20年。

AlexNet是第一个深度卷积神经网络架构,通过加深深度和应用众多参数优化策略来增强卷积神经网络的学习能力,在论文中,主要有以下几点贡献:

1)使用了非线性激活函数:ReLU;

2)引入了随机失活:Droupout;

3)使用了数据扩充:Data augmentation;

4)多GPU实现,LRN归一化层的使用;

如下图所示,为AlexNet网络结构:

2.1 激活函数:ReLU

传统的神经网络普遍使用Sigmoid或者tanh等非线性函数作为激活函数,然而它们容易出现梯度弥散或梯度饱和的情况。

在Sigmoid激活函数中,当输入值非常大或非常小的时候,会使值域范围的变化非常小,relu不存在这个缺陷,它在第一象限近似函数:y=x,不会出现值域变化小的问题。relu函数直到现在也是学术界和工业界公认的最好用的激活函数之一,在各个不同领域不同模型下的使用非常之多。如下表所示各类激活函数的表达式:

2.2  随机失活:Droupout

引入Dropout主要是为了防止网络在训练过程中出现的过拟合现象,主要原因包括两个方面:1.数据集太小;2.模型过于复杂,过拟合的本质原因就是数据集与模型在复杂度上不匹配。

在神经网络中Dropout是通过降低模型复杂度来防止过拟合现象的。对于某一层的神经元,通过一定的概率将某些神经元的计算结果乘0,这个神经元就不参与前向和后向传播,就如同在网络中被删除了一样,同时保持输入层与输出层神经元的个数不变,然后按照神经网络的学习方法进行参数更新。在下一次迭代中,又重新随机删除一些神经元(置为0),直至训练结束。

Droupout原理可参考以下博文:

深度学习中Dropout原理解析_Microstrong0305的博客-CSDN博客

2.3 数据扩充:Data augmentation

神经网络需要数据驱动,增加数据量不仅可以防止过拟合现象,也可以使网络结构进一步增大、加深。因此,当训练数据有限时,便可以使用一些变换方法将已有的训练数据进行扩充,例如随机裁剪、平移变化、改变颜色、图像反转等。

2.4 局部响应归一化:LRN

Local Response Normalization(LRN)技术主要是深度学习训练时的一种提高准确度的技术方法。LRN一般是在激活、池化后进行的一种处理方法。LRN归一化技术首次在AlexNet模型中提出这个概念。通过实验确实证明它可以提高模型的泛化能力,但是提升的很少,以至于后面不再使用,甚至有人觉得它是一个“伪命题”,因而它饱受争议。现在基本上已经被Batch Normalization代替。

2.5 多GPU训练

由于当时的GPU性能及运算量有限,限制了在其上训练的网络的最大规模。因此作者将模型拆成两部分,分别在两个GPU上进行训练,训练过程中会通过交换feature maps进行两个硬件中子网络的信息交流,大大加快了AlexNet的训练速度。

2.6 论文

论文:《Imagenet classification with deep convolutional neural networks》

https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf

贡献:引入了ReLU、Dropout、overlap、Data augmentation、LRN、多GPU计算;

缺陷:卷积核尺寸较大;

3.ZFNet

Zeiler和Fergus提出了一种反卷积神经网络,并在2013年 ILSVRC 图像分类竞赛获得冠军。ZFNet可以看作是在 AlexNet 基础上提出的大型卷积网络。论文中通过可视化的技术解释了为什么卷积神经网络可以在图像分类上表现的如此出色,以及研究了如何优化卷积神经网络。

3.1 网络架构 

如下图所示为ZFNet结构示意图,将一幅(具有3个颜色平面)图像的224 × 224裁剪结果作为输入。这与96个不同的第1层滤波器(红色)进行卷积,每个滤波器大小为7 × 7,在x和y方向上的步长均为2。得到的特征图如下:( i )通过一个修正的线性函数(未显示),( ii )池化的( max在3x3区域内,使用步幅2)和( iii )跨特征图归一化的对比度得到96个不同的55 × 55元素特征图。类似的操作在第2、3、4、5层重复。最后两层全连接,将来自顶层卷积层的特征以向量形式( 6 · 6 · 256 = 9216维)作为输入。最后一层是C - way softmax函数,C为类的个数。所有的滤波器和特征图都是方形的。 

 从上图可以看出,ZFNet改变了 AlexNet 的第一层,即将卷积核的尺寸大小 11x11 变成 7x7,并且将步长 4 变成了 2。

 3.2 反卷积

如下图所示,描绘了内部运行机制,其中左半部分显示反卷积层,右半部分显示卷积层。

反卷积层从下一层重建一个近似版本的卷积特征。对于网络性能的量化可视化,反卷积采用反卷积和去池化操作。值得注意的是,去池化在理论上是无法实现的。作者通过变量开关转换记录每个池化区域中最大值的位置来近似实现去池化。这样的反向映射将卷积层的输出投影回视觉可感知的图像模式,从而在神经元层面解释每一层学习到的内部特征。

3.3 卷积可视化

 作者将卷积核的计算结果(feature maps)映射回原始的像素空间(映射的方法为反卷积,反池化)并进行可视化。并根据可视化结果得出以下结论:

1)CNN输出的特征图有明显的层级区分

2)越靠近输入端,提取的特征所蕴含的语义信息比较少,例如颜色特征,边缘特征,角点特征等等;

3)越靠近输出端,提取的特征所蕴含的语义信息越丰富,例如狗脸,鸟腿等,都属于目标级别的特征。

3.4 ZFNet改进点

ZFNet通过对AelxNet可视化发现,由于第一层的卷积核尺寸过大导致某些特征图失效(失效指的是一些值太大或太小的情况,容易引起网络的数值不稳定性,进而导致梯度消失或爆炸。图中的体现是(a)中的黑白像素块)。

此外,由于第一层的步长过大,导致第二层卷积结果出现棋盘状的伪影(例如(b)中第二小图和倒数第三小图)。因此ZFNet做了对应的改进。即将第一层 11X11步长为4的卷积操作变成 7X7步长为2的卷积。

3.5 其他发现

通过对卷积结果的可视化,论文中还指出了以下几点:

1.网络中对不同特征的学习速度:

low-level的特征(颜色,纹理等)在网络训练的训练前期就可以学习到, 即更容易收敛;high-level的语义特征在网络训练的后期才会逐渐学到。(高级的语义特征,要在低级特征的基础上学习提取才能得到。)

2. 图片平移,缩放,旋转对CNN的影响:

卷积拥有良好的平移不变性、缩放不变性,但不具有良好的旋转不变性。卷积本身计算方法带来的平移不变性和缩放不变性也是脆弱的,大部分也是从数据集中学习到的。因此,深度学习是一种基于数据驱动的算法。

3.遮挡对卷积模型的影响:

模型确实可以理解图片,找到语义信息最丰富,对识别最关键的特征;而不是仅仅依靠一些颜色,纹理特征去做识别。并且CNN在处理图像的时候是关注局部的高级语义特征,而不是根据图像的全部信息来处理。随着网络层数的深入,遮挡的影响结果也明显减低,这说明深层的网络提取的是语义信息,而不是low-level的空间特征。因此对随机遮挡可以不敏感。

4. ZFNet的调参实验:

ZFNet对AelxNet进行了针对调参的消融实验,发现减少全连接层的参数反而可以提升一点准确率,一定程度证明了全连接层的参数还是太冗余了,即使有dropout。

3.6 论文

论文:《Visualizing and Understanding Convolutional Networks

https://arxiv.org/pdf/1311.2901

贡献:架构可视化;

缺陷:可视化处理会额外消耗性能;

4.LeNet、AlexNet、ZfNet对比

5.参考文章

1.深度学习之图像分类基础:卷积神经网络 - 魔法学院小学弟

2.经典CNN之:LeNet介绍_Sheldon_King的博客-CSDN博客

3. 深度学习之图像分类(二):AlexNet - 魔法学院小学弟

4. 深度学习之图像分类(三):ZFNet - 魔法学院小学弟

5. ZFNet 详细解读_Crayon小鱼干的博客-CSDN博客 

6.论文: A review of convolutional neural network architectures and their optimizations | SpringerLink

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

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

相关文章

Java的Arrays类的sort()方法(41)

目录 sort()方法 1.sort()方法的格式 2.使用sort()方法时要导入的类 3.作用 4.作用的对象 5.注意 6.代码及结果 (1)代码 (2)结果 sort(&…

【Netty】字节缓冲区 ByteBuf (六)(上)

文章目录 前言一、ByteBuf类二、ByteBuffer 实现原理2.1 ByteBuffer 写入模式2.2 ByteBuffer 读取模式2.3 ByteBuffer 写入模式切换为读取模式2.4 clear() 与 compact() 方法2.5 ByteBuffer 使用案例 总结 前言 回顾Netty系列文章: Netty 概述(一&…

亏损?盈利?禾赛科技Q1财报背后的激光雷达赛道「现实」

随着禾赛科技在去年登陆美股,作为全球为数不多已经开始前装量产交付的激光雷达上市公司,财务数据的变化,也在一定程度上反映了行业的真实状况。 根据禾赛科技最新发布的今年一季度财报显示,公司季度净营收为4.3亿元(人…

day13 - 对指纹图片进行噪声消除

在指纹识别的过程中,指纹图片通常都是现场采集的,受环境的影响会有产生很多的噪声点,如果直接使用,会对指纹的识别产生很大的影响,而指纹识别的应用场景又都是一些比较严肃不容有错的场合,所以去除噪声又不…

python+vue空巢老人网上药店购药系统9h2k5

本空巢老人购药系统主要包括三大功能模块,即用户功能模块、家属功能模块和管理员功能模块。 (1)管理员模块:系统中的核心用户是管理员,管理员登录后,通过管理员功能来管理后台系统。主要功能有:…

【实验】SegViT: Semantic Segmentation with Plain Vision Transformers

想要借鉴SegViT官方模型源码部署到本地自己代码文件中 1. 环境配置 官网要求安装mmcv-full1.4.4和mmsegmentation0.24.0 在这之前记得把mmcv和mmsegmentation原来版本卸载 pip uninstall mmcv pip uninstall mmcv-full pip uninstall mmsegmentation安装mmcv 其中&#xff…

旋翼无人机常用仿真工具

四旋翼常用仿真工具 rviz: 简单的质点(也可以加上动力学姿态),用urdf模型在rviz中显示无人机和飞行轨迹、地图等。配合ROS代码使用,轻量化适合多机。典型的比如浙大ego-planner的仿真: https://github.c…

Java面试知识点(全)-分布式算法- ZAB算法

Java面试知识点(全) 导航: https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 研究zookeeper时,必须要了解zk的选举和集群间个副本间的数据一致性。 什么是 ZAB 协议? ZAB 协议介绍 ZAB 协议全称&#xf…

树和二叉树

树 逻辑表示方法 树形表示法 文氏图表示法 凹入表示法 括号表示法 性质 树的结点数等于所有结点的度加一 度为m的树中第i层最多有m的(i-1)次方个结点 高度为h的m次树最多的节点数(等比数列公式求和&am…

【数据结构】什么是堆,如何使用无序数组生成一个堆?

文章目录 一、堆的概念及其介绍二、如何使用无序序列构建一个堆?三、C语言实现堆的基本操作结构体创建与销毁获取堆顶数据与个数及堆的判空堆的插入与删除 源代码分享 一、堆的概念及其介绍 堆(Heap)是计算机科学中一类特殊的数据结构的统称,堆通常是一…

公网远程连接Redis数据库【内网穿透】

文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 转发自cpolar内网穿透的文章:公网远程连接…

docker构建镜像上传到DockerHub

docker构建镜像上传到DockerHub DockerHub注册账号 DockerHub网址: https://hub.docker.com/ 注册 登录 安装docker docker宿主机环境 centos7 参考网址: https://yeasy.gitbook.io/docker_practice/install/centos 测试 docker 是否安装好 docker -v登录docker 登录 dock…

Chatgpt版本的opencv安装教程

文章目录 前言一、安装opencv方法一二、安装opencv方法二 前言 最近刚买了台RTX 3070的电脑,顺手刷了个ubuntu系统专门玩Carla,为了方便查资料,也顺手搭了浏览chatgpt的环境,用的clash,还挺好用的。然后刚好在看Carla…

如何使用JQuery实现Js二级联动和三级联动

前言:使用JQuery封装好的js方法来实现二级三级联动要比直接使用js来实现二级三级联动要简洁很多。所以说JQuery是个非常强大的、简单易用的、兼容性好的JavaScript库,已经成为前端开发人员不可缺少的一部分,是Web开发中最流行的JavaScript库之…

Mysql数据库对表的基本操作

一.表基本操作 1.当前数据库内创建表 2.查看表 3.删除表 4.修改表结构 5.复制表(结构) 二.表约束创建 1.约束的作用 2.约束的类型 3.演示 一.表基本操作 1.当前数据库内创建表 CREATE TABLE 表名( 列名 列数据类型, 列名 列…

小兔鲜--项目总结3

目录 结算模块-地址切换交互实现 地址切换交互需求分析 打开弹框交互实现 地址激活交互实现 订单模块-生成订单功能实现 支付模块-实现支付功能 支付业务流程 支付模块-支付结果展示 支付模块-封装倒计时函数 理解需求 实现思路分析 会员中心-个人中心信息渲染 分页…

solr快速上手:managed-schema标签详解(三)

0. 引言 core核心是solr中的重中之重,类似数据库中的表,在搜索引擎中也叫做索引,在solr中索引的建立,要先创建基础的数据结构,即schema的相关配置,今天继续来学习solr的核心知识: solr快速上手…

OpenCV——最小外接矩形

目录 一、主要函数二、代码实现三、结果展示 一、主要函数 cv::RotatedRect cv::minAreaRect(const cv::Mat& points );emspminAreaRect 函数用于计算给定点集的最小外接矩形。该矩形的长和宽是可以任意旋转的,因此被称为旋转矩形。 points :是一个…

article-码垛机器人admas仿真

按照运动学仿真的类似步骤为机器人添加材料、运动副和关节驱动,给机器人手腕末端施加50N最大负载,仿真模型如图5-17。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AXYQVZPq-1684936426972)(data:image/svgxml;utf8, )] 图…

Python实现ACO蚁群优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…