深度学习修炼(八)——经典卷积网络

文章目录

  • 8 经典卷积网络
    • 8.1 LeNet模型
    • 8.2 Alexnet
    • 8.3 VGG
    • 8.4 ResNet
    • 8.5 感受野

8 经典卷积网络

在前面一讲,我们谈论了关于卷积神经网络的诸多细节。综合来讲,卷积神经网络就是含卷积层的网络。在本讲中,我们将会根据卷积神经网络发展的历史,来看看别人当年使用过哪些经典的卷积神经网络。

8.1 LeNet模型

LeNet是最早出现的卷积神经网络 。这个名字来源于LeNet论文的第一作者Yann LeCun。LeNet展示了通过梯度下降训练卷积神经网络可以达到手写数字识别在当时最先进的结果。这个奠基性的工作第一次将卷积神经网络推上舞台,为世人所知。

8.2 Alexnet

在LeNet提出后的将近20年里,神经网络一度被其他机器学习方法超越,如支持向量机。虽然LeNet可以在早期的小数据集上取得好的成绩,但是在更大的真实数据集上的表现并不尽如人意。一方面,神经网络计算复杂。虽然20世纪90年代也有过一些针对神经网络的加速硬件,但并没有像之后GPU那样大量普及。因此,训练一个多通道、多层和有大量参数的卷积神经网络在当年很难完成。另一方面,当年研究者还没有大量深入研究参数初始化和非凸优化算法等诸多领域,导致复杂的神经网络的训练通常较困难。

2012年,AlexNet横空出世。这个模型的名字来源于论文第一作者的姓名Alex Krizhevsky。AlexNet使用了8层卷积神经网络,并以很大的优势赢得了ImageNet 2012图像识别挑战赛。它首次证明了学习到的特征可以超越手工设计的特征,从而一举打破计算机视觉研究的前状。

image-20220403142305308

虽然经典,但是从其构成来看,在第一个卷积层中,其使用了11×11的卷积核来大刀阔斧提取特征,而且不加填充和步长4。虽然在当时很经典,但是在现阶段中,Alexnet无疑已经淘汰了。

8.3 VGG

VGG模型是2014年ILSVRC竞赛的第二名,第一名是GoogLeNet。但是VGG模型在多个迁移学习任务中的表现要优于googLeNet。而且,从图像中提取CNN特征,VGG模型是首选算法。它的缺点在于,参数量有140M之多,需要更大的存储空间。但是这个模型很有研究价值。

模型的名称——“VGG”代表了牛津大学的Oxford Visual Geometry Group,该小组隶属于1985年成立的Robotics Research Group,该Group研究范围包括了机器学习到移动机器人。下面是一段来自网络对同年GoogLeNet和VGG的描述:

“GoogLeNet和VGG的Classification模型从原理上并没有与传统的CNN模型有太大不同。大家所用的Pipeline也都是:训练时候:各种数据Augmentation(剪裁,不同大小,调亮度,饱和度,对比度,偏色),剪裁送入CNN模型,Softmax,Backprop。测试时候:尽量把测试数据又各种Augmenting(剪裁,不同大小),把测试数据各种Augmenting后在训练的不同模型上的结果再继续Averaging出最后的结果。”

需要注意的是,在VGGNet的6组实验中,后面的4个网络均使用了pre-trained model A的某些层来做参数初始化。虽然提出者没有提该方法带来的性能增益。

image-20220419122146968

VGG从发展之初到现在已经有多个版本了,对于不同的版本其架构都有微妙的不同。

VGG有很多特点,如下所示:

  • 小卷积核。作者将卷积核全部替换为3x3(极少用了1x1);
  • 小池化核。相比AlexNet的3x3的池化核,VGG全部为2x2的池化核;
  • 层数更深特征图更宽。基于前两点外,由于卷积核专注于扩大通道数、池化专注于缩小宽和高,使得模型架构上更深更宽的同时,计算量的增加放缓;
  • 全连接转卷积。网络测试阶段将训练阶段的三个全连接替换为三个卷积,测试重用训练时的参数,使得测试得到的全卷积网络因为没有全连接的限制,因而可以接收任意宽或高为的输入。

对于图像分类来说,在不调参数的时候,VGG的效果比Alexnet的效果要好,但是如果假设Alexnet要跑八个小时,那么VGG很有可能要跑3天。

8.4 ResNet

对于深度学习来说,人们总是认为层数越多,模型效果越好,然而在实践中,添加过多的层后训练误差往往不降反升。即使利用批量归一化带来的数值稳定性使训练深层模型更加容易,该问题仍然存在。针对这一问题,何恺明等人提出了残差网络(ResNet)。它在2015年的ImageNet图像识别挑战赛夺魁,并深刻影响了后来的深度神经网络的设计。

我们可以用通俗易懂的话解释ResNet。对于高层数的神经网络来说,明显低层数的神经网络准确率要得多,那如果我想通过继续堆叠层数来提高准确率,那我可以对继续堆叠的层进行一个“选拔”。如果这个继续堆叠的层能够对提高准确率有帮助,那么它就留下,如果不仅没有提高准确率反而还降低准确率了,那么我们就把这一层权重参数和偏置设为0,不用这一层即可。

但是这样的想法有一个问题。如果我们将神经网络无用的一层偏置和权重都设为0,那么通过这一层后数据还能成啥样?基本上就毁了。故我们可以用下面的形式来解决这个问题:

image-20220419124611433

如果在传播的过程中发现下一个层是一个无用层,那么传播会跳过这一层,之前使用其他的通路前往下下层,这样的话既避免数据的破坏,也提高的传播的速度。

我们用再细致一点的口吻再讲一次:

image-20220419125038779

当x输入后通过第一个卷积层,然后通过第二个卷积层,通过这两层后却发现,效果不好,即使调整这两层的参数也没救,那么我们就直接设置一条通路前往第三层,我们设第三层的输入是H(x),而通过一二层的输出是F(x),不通过两层卷积层而采用小道过来的x,那么H(x) = F(x)+x,而如果F(x)不尽人意,那么我们只需将F(x)设置为0,H(x) = x即可,相当于抽卡有了个保底,运气再怎么差我也能抽到。

image-20220419125511081

我们可以把左图看做是VGG,而右图看做是ResNet,可以看出,在层数变高的时候,ResNet效果比VGG要好得多。这实际上也把深度学习救活了,因为在ResNet出来前,人们认为深度学习只能到达一定层数,它不能继续堆叠了,而当ResNet出来后,神经网络的层数得到了进一步的提高,尽管层数提高后提升很少的准确率。

8.5 感受野

我们来谈谈感受野的问题。

在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应输入图上的区域,如下图所示。

image-20220105125509616

假设我在第三层中只有一个像素点,它是通过第二层中3×3的区域和卷积核做互相关运算得来,而第二层的3×3又是由第一层中5×5的区域和卷积核做互相关运算得来,那么我们称第三层中那一个像素点的感受野为5×5。

那么我们思考这么一件事,如果堆叠3个3×3的卷积核,并且步幅为1,那么感受野就是7×7,这和直接用一个7×7的卷积核貌似没啥区别,那么我们干嘛非要堆叠3个小卷积呢?

我们假设输出的大小是h* w* c,并且都是用c个卷积核(得到c个特征图),可以来计算一下各自所需参数:

image-20220419130833462

明显地,堆叠小卷积核所需的参数比直接用一个大卷积核所需的参数要少得多,而且如果卷积层堆叠更多,实际上特征提取也会更细致,加入的非线性变换也随着增多,还不会增大 权重参数个数,这就是VGG的初衷。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lua语法基础(1)---简介、基本数据类型、表达式

我觉得我已经陷入了一个坑内。因为,安装了Lua和SublimeText3编辑器之后,怎么使自己编写的lua代码在untiy内运行起来,是个我完全不了解的机制。先放一放吧。首先,来回顾一下Lua的语法基础。 第一 起点 在Lua中具有一个Chunks的概念…

视觉中的经典图像特征小结(一): 颜色直方图, HOG, LBP

[普兒原创, 如有错误和纰漏欢迎指正. 更新中...] 1. 颜色直方图 颜色空间在本质上是定义在某种坐标系统下的子空间,空间中的每一个坐标表示一种不同的颜色。颜色空间的目的在于给出某种颜色标准,使得不同的设备和用途都能对颜色有一致的描述。这里主要介…

C++从0到1的入门级教学(七)——指针

文章目录7 指针7.1 指针的基本概念7.2 指针变量的定义和使用7.3 指针所占内存空间7.4 空指针7.5 野指针7.6 void*指针7.7 指向指针的指针7.8 const修饰指针7.9 指针和数组7.10 指针和函数7 指针 指针是指向另外一种类型的符合类型,和引用类似,指针也实现…

urllib库的使用

#使用urllib库,将langlang2017全站网页请求并保存 #1、引入模块 from urllib import request from urllib import error#2、操作 #(1)创建url base_url "http://www.langlang2017.com/route.html"try:# (2)…

一个显示日期的工具类

一个显示日期的工具类 .h文件 #import <Foundation/Foundation.h>interface TimeUtil : NSObject (NSString*)getTimeStr1:(long long)time;(NSString*) getTimeStrStyle1:(long long)time;(NSString*)getTimeStr1Short:(long long)time;(NSString*) getTimeStrStyle2:(l…

【leetcode】Median of Two Sorted Arrays

题目简述&#xff1a; There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (mn)). 解题思路&#xff1a; 这本身是个很简单的题目&#xff0c;但是题目要求他的复…

C++从0到1的入门级教学(五)——字符串、向量和数组

文章目录5 字符串、向量和数组5.1 命名空间5.2 标准库string5.2.1 定义和初始化string对象5.2.2 string对象上的操作5.2.2.1 读取string对象5.2.2.2 风格5.2.2.3 使用getline读取一整行5.2.2.4 empty和size操作5.2.2.5 size_type类型5.2.2.6 比较string对象5.2.2.7 string对象的…

媒体格式分析之flv -- 基于FFMPEG

本来是应该先写一个媒体文件格式的简单讲解的&#xff0c;还没来得及写&#xff0c;以后再写。今天就先根据ffmpeg的flv.c的flv_demux这个结构体来讲解一下当前比较流行的媒体格式flv. FLV 是FLASH VIDEO的简称&#xff0c;FLV流媒体格式是随着Flash MX的推出发展而来的视频格式…

Linux命令整合之find

描述Linux下find命令在目录结构中搜索文件&#xff0c;并执行指定的操作。用法find 路径 -命令参数 [输出形式]参数说明路径&#xff1a;告诉find在哪儿去找你要的东西&#xff0c;命令参数&#xff1a;参数很多下面会说到输出形式&#xff1a;输出形式很多&#xff0c;-print,…

[HEOI2015]兔子与樱花

题目描述 很久很久之前&#xff0c;森林里住着一群兔子。有一天&#xff0c;兔子们突然决定要去看樱花。兔子们所在森林里的樱花树很特殊。樱花树由n个树枝分叉点组成&#xff0c;编号从0到n-1&#xff0c;这n个分叉点由n-1个树枝连接&#xff0c;我们可以把它看成一个有根树结…

C++从0到1的入门级教学(三)——表达式和运算符

文章目录3 运算符3.1 表达式3.1.1 基本概念3.1.2 运算符和运算对象3.1.3 运算对象的转换3.1.4 左值和右值3.2 运算符3.2.1 算术运算符3.2.2 赋值运算符3.2.3 比较运算符3.2.4 逻辑运算符3.2.5 成员访问运算符3.2.6 条件运算符3 运算符 C提供了一套供操作内置数据类型的运算符&…

谈谈用SQLite和FMDB而不用Core Data

谈谈用SQLite和FMDB而不用Core Data 发布于&#xff1a;2014-04-22 11:22阅读数&#xff1a;4235 凭良心讲&#xff0c;我不能告诉你不去使用Core Data。它不错&#xff0c;而且也在变好&#xff0c;并且它被很多其他Cocoa开发者所理解&#xff0c;当有新人加入你的组或者需要别…

Idea工具开发 SpringBoot整合JSP(毕设亲测可用)

因为&#xff0c;临近毕业了&#xff0c;自己虽然也学了很多框架。但是&#xff0c;都是在别人搭建好的基础上进行项目开发。但是springboot的官方文档上明确指出不提倡使用jsp进行前端开发&#xff0c;但是在校期间只学了jsp作为前端页面。所以&#xff0c;废话不多说&#xf…

深度学习番外——Yolov5服务器环境搭建

文章目录1 服务器搭建yolov5环境1.1 创建环境1.2 跟随官方指引2 下载预训练权重3 推理4 测试1 服务器搭建yolov5环境 1.1 创建环境 首先先的在本地环境下搭建一个我们的环境&#xff0c;名字设为yolo5-6 conda create -n yolov5-6 python3.7#创建环境 conda activate yolov5…

计算球体积

Problem Description 根据输入的半径值&#xff0c;计算球的体积。Input 输入数据有多组&#xff0c;每组占一行&#xff0c;每行包括一个实数&#xff0c;表示球的半径。Output 输出对应的球的体积&#xff0c;对于每组输入数据&#xff0c;输出一行&#xff0c;计算结果保留三…

机器学习实战(一)——员工离职预测

文章目录员工离职预测——逻辑回归的应用1 读取文件2 独热编码3 划分数据集4 归一化5 逻辑回归预测6 模型预测及评估员工离职预测——逻辑回归的应用 开始这个案例之前&#xff0c;请先点击这里的数据集进行下载&#xff1a;HR_comma_sep.zip - 蓝奏云 (lanzout.com) 1 读取文…

Mac版Anaconda安装Tweepy包

Anaconda官网给出的tweepy包安装方法&#xff1a;https://anaconda.org/conda-forge/tweepy 查阅Anaconda官方文档&#xff0c;可以通过以下控制台命令安装Tweepy包。 conda install -c conda-forge tweepy 在控制台执行后&#xff0c;系统可能会提示未找到conda指令&#xff…

iOS 证书与签名 解惑详解

iOS 证书与签名 解惑详解 分类&#xff1a; iPhone2012-06-06 19:57 9426人阅读 评论(1) 收藏 举报iosxcodecryptographyappleiphone测试目录(?)[] 教程截图&#xff1a; 下面是一篇有澳洲墨尔本的一名全职iOS开发者提供的文章。他在论坛上是一个很摩登的年轻人 – Adam Eberb…

Julia学习笔记(一)——入门

文章目录1 入门1.1 启动与退出1.1.1 启动1.1.2 退出1.2 编译文件1.3 变量1.3.1 基本介绍1.3.2 重定义1.3.3 变量名合法性1 入门 1.1 启动与退出 1.1.1 启动 在没有任何IDE的帮助下&#xff0c;使用cmd启动黑窗口来尝试julia是一种最简单的方法。我们称进入julia后的黑窗口为…

从地址栏中敲入一个网址,到网页显示出来,这个过程经历了什么

这个问既考察技术深度又考察技术广度&#xff0c;其实要答好是相当难的。 在地址栏中敲入一个网址后&#xff0c;浏览器向服务器发出请求&#xff0c;请求对应网址页面的内容&#xff1b;然后服务器收到请求以后对这个请求进行处理&#xff0c;处理之后以HTML文件的形式把处理结…