4.2)深度卷积网络:实例研究

目录

1)Why look at case studies?

2)Classic networks(理解)

3)ResNets(理解)

4)Why ResNets work?(经典)

5)Networks in Networks and 1x1 Convolutions(理解)

6)Inception network motivation

7)Inception network

8)Using open-source implementations

9)Transfer Learning(理解)

10)Data augmentation(重点)

11)The state of computer vision


本博客笔记是吴恩达老师深度学习课程第四门课第二周的的学习笔记:Deep convolutional models: case studies。笔记参考了黄海广博士的整理,在此表示感谢。


1)Why look at case studies?

本周课程吴恩达老师讲到的经典 CNN 模型包括:

  • LeNet-5

  • AlexNet

  • VGG

此外还有 ResNet(Residual Network,残差网络),以及 Inception Neural Network。


2)Classic networks(理解)

LeNet-5

特点:

  • LeNet-5 针对灰度图像而训练,因此输入图片的通道数为 1

  • 该模型总共包含了约 6 万个参数,远少于标准神经网络所需

  • 典型的 LeNet-5 结构包含卷积层(CONV layer),池化层(POOL layer)和全连接层(FC layer),排列顺序一般为 CONV layer->POOL layer->CONV layer->POOL layer->FC layer->FC layer->OUTPUT layer。一个或多个卷积层后面跟着一个池化层的模式至今仍十分常用

  • 当 LeNet-5模型被提出时,其池化层使用的是平均池化,而且各层激活函数一般选用 Sigmoid 和 tanh。现在,我们可以根据需要,做出改进,使用最大池化并选用 ReLU 作为激活函数。

相关论文:LeCun et.al., 1998. Gradient-based learning applied to document recognition。吴恩达老师建议精读第二段,泛读第三段。

AlexNet

特点:

  • AlexNet 模型与 LeNet-5 模型类似,但是更复杂,包含约 6000 万个参数。另外,AlexNet 模型使用了 ReLU 函数

  • 当用于训练图像和数据集时,AlexNet 能够处理非常相似的基本构造模块,这些模块往往包含大量的隐藏单元或数据。

相关论文:Krizhevsky et al.,2012. ImageNet classification with deep convolutional neural networks。这是一篇易于理解并且影响巨大的论文,计算机视觉群体自此开始重视深度学习。

VGG

特点:

  • VGG 又称 VGG-16 网络,16指网络中包含 16 个卷积层和全连接层。

  • 超参数较少,只需要专注于构建卷积层。

  • 结构不复杂且规整,在每一组卷积层进行滤波器翻倍操作

  • VGG 需要训练的特征数量巨大,包含多达约 1.38 亿个参数

相关论文:Simonvan & Zisserman 2015. Very deep convolutional networks for large-scale image recognition。


3)ResNets(理解)

因为存在梯度消失和梯度爆炸问题,网络越深,就越难以训练成功残差网络(Residual Networks,简称为 ResNets)可以有效解决这个问题。

上图的结构被称为残差块(Residual block)。通过捷径(Short cut,或者称跳跃连接,Skip connections)可以将a^{[l]} 添加到第二个 ReLU 过程中,直接建立a^{[l]}a^{[l+2]}之间的隔层联系。表达式如下:

z^{[l+1]} = W^{[l+1]}a^{[l]} + b^{[l+1]}

a^{[l+1]} = g(z^{[l+1]})

z^{[l+2]} = W^{[l+2]}a^{[l+1]} + b^{[l+2]}

a^{[l+2]} = g(z^{[l+2]} + a^{[l]})

构建一个残差网络就是将许多残差块堆积在一起,形成一个深度网络。

ResNets 经典论文He et al., 2015. Deep residual networks for image recognition。

在理论上,随着网络深度的增加,性能应该越来越好。但实际上,对于一个普通网络,随着神经网络层数增加,训练错误会先减少,然后开始增多。但残差网络的训练效果显示,即使网络再深,其在训练集上的表现也会越来越好。

残差网络有助于解决梯度消失和梯度爆炸问题,使得在训练更深的网络的同时,又能保证良好的性能。


4)Why ResNets work?(经典)

假设有一个大型神经网络,其输入为X,输出为 a^{[l]}。给这个神经网络额外增加两层,输出为a^{[l+2]}。将这两层看作一个具有跳远连接的残差块。为了方便说明,假设整个网络中都选用 ReLU 作为激活函数,因此输出的所有激活值都大于等于 0。

则有:

当发生梯度消失时,W^{[l+2]}\approx0b^{[l+2]}\approx0,则有:              

a^{[l+2]} = g(a^{[l]}) = ReLU(a^{[l]}) = a^{[l]}

因此,这两层额外的残差块不会降低网络性能。而如果没有发生梯度消失时,训练得到的非线性关系会使得表现效果进一步提高

注意,如果a^{[l]}a^{[l+2]}的维度不同,需要引入矩阵W_sa^{[l]}相乘,使得二者的维度相匹配。参数矩阵 W_s既可以通过模型训练得到,也可以作为固定值,仅使 a^{[l]}截断或者补零。

上图是论文提供的 CNN 中 ResNet 的一个典型结构。卷积层通常使用 Same 卷积以保持维度相同,而不同类型层之间的连接(例如卷积层和池化层),如果维度不同,则需要引入矩阵W_s


5)Networks in Networks and 1x1 Convolutions(理解)

1x1 卷积(1x1 convolution,或称为 Network in Network)指滤波器的尺寸为 1。当通道数为 1 时,1x1 卷积意味着卷积操作等同于乘积操作。

而当通道数更多时,1x1 卷积的作用实际上类似全连接层的神经网络结构,从而降低(或升高,取决于滤波器组数)数据的维度。

池化能压缩数据的高度(n_H)及宽度(n_W),而 1×1 卷积能压缩数据的通道数(n_C)。在如下图所示的例子中,用 32 个大小为 1×1×192 的滤波器进行卷积,就能使原先数据包含的 192 个通道压缩为 32 个。

虽然论文Lin et al., 2013. Network in network中关于架构的详细内容并没有得到广泛应用,但是 1x1 卷积的理念十分有影响力,许多神经网络架构(包括 Inception 网络)都受到它的影响。


6)Inception network motivation

在之前的卷积网络中,我们只能选择单一尺寸和类型的滤波器。Inception 网络的作用即是代替人工来确定卷积层中的滤波器尺寸与类型,或者确定是否需要创建卷积层或池化层

如图,Inception 网络选用不同尺寸的滤波器进行 Same 卷积,并将卷积和池化得到的输出组合拼接起来,最终让网络自己去学习需要的参数和采用的滤波器组合。

相关论文:Szegedy et al., 2014, Going Deeper with Convolutions

在提升性能的同时,Inception 网络有着较大的计算成本。下图是一个例子:

图中有 32 个滤波器,每个滤波器的大小为 5x5x192。输出大小为 28x28x32,所以需要计算 28x28x32 个数字,对于每个数,都要执行 5x5x192 次乘法运算。加法运算次数与乘法运算次数近似相等。因此,可以看作这一层的计算量为 28x28x32x5x5x192 = 1.2亿。

为了解决计算量大的问题,可以引入 1x1 卷积来减少其计算量。

对于同一个例子,我们使用 1x1 卷积把输入数据从 192 个通道减少到 16 个通道,然后对这个较小层运行 5x5 卷积,得到最终输出。这个 1x1 的卷积层通常被称作瓶颈层(Bottleneck layer)

改进后的计算量为 28x28x192x16 + 28x28x32x5x5x15 = 1.24 千万,减少了约 90%。

只要合理构建瓶颈层,就可以既显著缩小计算规模,又不会降低网络性能。


7)Inception network

上图是引入 1x1 卷积后的 Inception 模块。值得注意的是,为了将所有的输出组合起来,红色的池化层使用 Same 类型的填充(padding)来池化使得输出的宽高不变,通道数也不变。

多个 Inception 模块组成一个完整的 Inception 网络(被称为 GoogLeNet,以向 LeNet 致敬),如下图所示:

注意黑色椭圆圈出的隐藏层,这些分支都是 Softmax 的输出层,可以用来参与特征的计算及结果预测,起到调整并防止发生过拟合的效果。

经过研究者们的不断发展,Inception 模型的 V2、V3、V4 以及引入残差网络的版本被提出,这些变体都基于 Inception V1 版本的基础思想上。顺便一提,Inception 模型的名字来自电影《盗梦空间》。


8)Using open-source implementations

很多神经网络复杂细致,并充斥着参数调节的细节问题,因而很难仅通过阅读论文来重现他人的成果。想要搭建一个同样的神经网络,查看开源的实现方案会快很多。


9)Transfer Learning(理解)

在“搭建机器学习项目”课程中,迁移学习已经被提到过。计算机视觉是一个经常用到迁移学习的领域。在搭建计算机视觉的应用时,相比于从头训练权重,下载别人已经训练好的网络结构的权重,用其做预训练,然后转换到自己感兴趣的任务上,有助于加速开发。

对于已训练好的卷积神经网络,可以将所有层都看作是冻结,只需要训练与你的 Softmax 层有关的参数即可。大多数深度学习框架都允许用户指定是否训练特定层的权重。

而冻结的层由于不需要改变和训练,可以看作一个固定函数。可以将这个固定函数存入硬盘,以便后续使用,而不必每次再使用训练集进行训练了。

上述的做法适用于你只有一个较小的数据集。如果你有一个更大的数据集,应该冻结更少的层,然后训练后面的层。越多的数据意味着冻结越少的层,训练更多的层。如果有一个极大的数据集,你可以将开源的网络和它的权重整个当作初始化(代替随机初始化),然后训练整个网络。


10)Data augmentation(重点)

计算机视觉领域的应用都需要大量的数据。当数据不够时,数据增强(Data Augmentation)就有帮助。常用的数据扩增包括镜像翻转、随机裁剪、色彩转换

其中,色彩转换是对图片的 RGB 通道数值进行随意增加或者减少,改变图片色调。另外,PCA 颜色增强指更有针对性地对图片的 RGB 通道进行主成分分析(Principles Components Analysis,PCA),对主要的通道颜色进行增加或减少,可以采用高斯扰动做法来增加有效的样本数量。具体的 PCA 颜色增强做法可以查阅 AlexNet 的相关论文或者开源代码。

在构建大型神经网络的时候,数据扩增和模型训练可以由两个或多个不同的线程并行来实现。

                                                          


11)The state of computer vision

通常,学习算法有两种数据来源:

  • 被标记的数据

  • 特征工程

特征工程(Hand-engineering,又称 hacks)指精心设计的特性、网络体系结构或是系统的其他组件。特征工程是一项非常重要也比较困难的工作。在数据量不多的情况下,特征工程是获得良好表现的最佳方式。正因为数据量不能满足需要,历史上计算机视觉领域更多地依赖于手工工程。近几年数据量急剧增加,因此特征工程量大幅减少。

另外,在模型研究或者竞赛方面,有一些方法能够有助于提升神经网络模型的性能:

  • 集成(Ensembling):独立地训练几个神经网络,并平均输出它们的输出

  • Multi-crop at test time:将数据扩增应用到测试集,对结果进行平均

但是由于这些方法计算和内存成本较大,一般不适用于构建实际的生产项目。

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

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

相关文章

10种常见的软件架构模式

有没有想过要设计多大的企业规模系统?在主要的软件开发开始之前,我们必须选择一个合适的体系结构,它将为我们提供所需的功能和质量属性。因此,在将它们应用到我们的设计之前,我们应该了解不同的体系结构。 什么是架构模…

4.3)深度卷积网络:目标检测

目录 1)Object localization(重点) 2)Landmark detection 3)Object detection 4)Convolutional implementation of sliding windows 5)Bounding box prediction(重点&#xff0…

4.4)深度卷积网络:人脸识别和神经风格转换

目录 1)What is face recognition? 2)One-shot learning 3)Siamese network 4)Triplet Loss(重点) 5)Face Verification and Binary Classification 6)What is neural style …

一步步编写操作系统 35 内存为何要分页

一直以来我们都直接在内存分段机制下工作,目前未出问题看似良好,的确目前咱们的应用过于简单了,就一个loader在跑,能出什么问题呢。可是想像一下,当我们物理内存不足时会怎么办呢?比如系统里的应用程序过多…

《python深度学习》代码中文注释

《python深度学习》由Keras之父、现任Google人工智能研究员的弗朗索瓦•肖莱(François Chollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实践,包括计算机视觉、自然语言处理、生成式模型等应用。书中包含30多个代码示…

【BZOJ - 4754】独特的树叶(树哈希)

题干: JYY有两棵树A和B:树A有N个点,编号为1到N;树B有N1个点,编号为1到N1。JYY知道树B恰好是由树A加上一个叶 节点,然后将节点的编号打乱后得到的。他想知道,这个多余的叶子到底是树B中的哪一个…

一步步编写操作系统 36 一级页表与虚拟地址1

为了给大家说清楚分页机制,我们先在宏观上说下cpu地址变换过程,先让大家有个直观的印象,如果有不明白的地方也不要着急,适时地不求甚解,有助于从全局上将知识融会贯通(这句话是我即兴说的,说得多…

动手学无人驾驶(4):基于激光雷达点云数据3D目标检测

上一篇文章《动手学无人驾驶(3):基于激光雷达3D多目标追踪》介绍了3D多目标追踪,多目标追踪里使用的传感器数据为激光雷达Lidar检测到的数据,本文就介绍如何基于激光雷达点云数据进行3D目标检测。 论文地址&#xff1a…

一步步编写操作系统 37 一级页表与虚拟地址2

接上节,分页机制是建立在分段机制之上,与其脱离不了干系,即使在分页机制下的进程也要先经过逻辑上的分段才行,每加载一个进程,操作系统按照进程中各段的起始范围,在进程自己的4GB虚拟地址空间中寻找可有空间…

PointNet:3D点集分类与分割深度学习模型

之前的一篇博客《动手学无人驾驶(4):基于激光雷达点云数据3D目标检测》里介绍到了如何基于PointRCNN模型来进行3D目标检测,作者使用的主干网是PointNet,而PointNet又是基于PointNet来实现的。今天写的这篇博客就是对Po…

计算机视觉那些事儿(1):基本任务

本文主要介绍深度学习在计算机视觉领域(Computer vision)基本任务中的应用,包括分类、检测、分割(语义与实体)。 目录 引言 分类(Classification) 目标检测(Object Detection) T…

一步步编写操作系统 38 一级页表与虚拟地址3

接上,页是地址空间的计量单位,并不是专属物理地址或线性地址,只要是4KB的地址空间都可以称为一页,所以线性地址的一页也要对应物理地址的一页。一页大小为4KB,这样一来,4GB地址空间被划分成4GB/4KB1M个页&a…

《Python编程:从入门到实践》速查表

本文是Python畅销书《Python:从入门到实践》速查表。 随书配套视频观看地址:https://www.bilibili.com/video/av35698354 目录 1.Overview 2.Lists 3.Dictionaries 4.If and While Loops 5.Functions 6.Classes 7.Files and Exceptions 8.Testin…

一步步编写操作系统 39 二级页表1

前面讲述了页表的原理,并以一级页表做为原型讲述了地址转换过程。既然有了一级页表,为什么还要搞个二级页表呢?理由如下: 一级页表中最多可容纳1M(1048576)个页表项,每个页表项是4字节&#xf…

PointNet++详解与代码

在之前的一篇文章《PointNet:3D点集分类与分割深度学习模型》中分析了PointNet网络是如何进行3D点云数据分类与分割的。但是PointNet存在的一个缺点是无法获得局部特征,这使得它很难对复杂场景进行分析。在PointNet中,作者通过两个主要的方法…

一步步编写操作系统 40 内存分页下用户程序与操作系统的关系

分页的第一步要准备好一个页表,我们的页表是什么样子呢?现在我们要设计一个页表啦。 设计页表其实就是设计内存布局,不过在规划内存布局之前,我们需要了解用户进程与操作系统之间的关系。 前面讲保护模式时,我们知道…

一步步编写操作系统 41 快表tlb 简介

分页机制虽然很灵活,但您也看到了,为了实现虚拟地址到物理地址的映射,过程还是有些麻烦的。先要从CR3寄存器中获取页目录表物理地址,然后用虚拟地址的高10位乘以4的积做为在页目录表中的偏移量去寻址目录项pde,从pde中…

50个最有用的Matplotlib数据分析与可视化图

本文介绍了数据分析与可视化中最有用的50个数据分析图,共分为7大类:Correlation、Deviation、RankIng、Distribution、Composition、Change、Groups 原文链接:https://www.machinelearningplus.com/plots/top-50-matplotlib-visualizations-t…

视觉SLAM十四讲(1):预备知识

最近在学习高翔博士的《视觉SLAM十四讲》(第二版),算是初学本书,配套资源还算蛮丰富的,有代码(第一版和第二版都有),B站上也有高翔博士对第一版录制的讲解视频,真的是很贴…

一步步编写操作系统 43 汇编语言和c语言的理解

也许有的同学喜欢用汇编语言来实现操作系统,觉得用汇编来写程序似乎更简单直接,可控性比较强,有种“一切尽在掌握”的赶脚。而用c语言实现操作系统这件事,虽然轻松很多,但似乎隐约感觉到有些慌张。因为虽然c语言相对来…