用于图像分类的经典的卷积神经网络CNN



在上一篇详细讲解了卷积神经网络的基本模块之后,对卷积的神经网络应该有了一个清晰的认识。后边的卷积神经网络,都是基于这些模块不断优化、改进,但是并未真正跳出这个框架。那么,这一章内容就讲一下用于图像分类的卷积神经网络的发展历程。

概览

1.计算机视觉简介:

计算机视觉是当前最热门的研究之一,是一门多学科交叉的研究,涵盖计算机科学(图形学、算法、理论研究等)、数学(信息检索、机器学习)、工程(机器人、NLP等)、生物学(神经系统科学)和心理学(认知科学)。计算机视觉中主要有五大内容,分别为图像分类、目标检测、目标跟踪、语义分割以及物体分割。针对每项内容,都有自己的基本概念及相应的适用于自己的一套典型方法。

今天要讲的是基于图像分类的经典的卷积神经网络的发展历程。

2.图像分类

在这里插入图片描述
官方定义为:给定一组图像集,其中每张图像都被标记了对应的类别。之后为一组新的测试图像集预测其标签类别,并测量预测准确性。

完整的图像分类步骤一般形式如下
1.首先,输入一组训练图像数据集;
2.然后,使用该训练集训练一个分类器,该分类器能够学习每个类别的特征;
3.最后,使用测试集来评估分类器的性能,即将预测出的结果与真实类别标记进行比较;

大多数图像分类算法都是在ImageNet数据集上训练的,该数据集由120万张的图像组成,涵盖1000个类别,该数据集也可以称作改变人工智能和世界的数据集。ImagNet 数据集让人们意识到,构建优良数据集的工作是 AI 研究的核心,数据和算法一样至关重要。为此,世界组织也举办了针对该数据集的挑战赛——ImageNet挑战赛。

而本文所讲解的适用于图像分类的经典的卷积神经网络,也是历年来的ImageNet的冠军。

本文将从经典的LeNet-5网络讲起,到了2012年,AlexNet一举夺得首届ImageNet的冠军。之后,有很多基于CNN的算法也在ImageNet上取得了特别好的成绩,比如ZFNet(2013)、GoogleNet(2014)、VGGNet(2014)、ResNet(2015)以及DenseNet(2016)等。

一、LeNet-5

这个是n多年前就有的一个CNN的经典结构,卷积神经网络的开山之作,主要是用于手写字体的识别,也是刚入门需要学习熟悉的一个网络。网络虽然简单,但是麻雀虽小五脏俱全,卷积层、池化层、全链接层一直沿用至今

1.模型架构

在这里插入图片描述
层数很浅,并且kernel大小单一,C1、C3、C5三个卷积层使用的kernel大小全部都是5×5。C5的feature map大小为1×1是因为,S4的feature map大小为5×5而kernel大小与其相同,所以卷积的结果大小是 1×1。

S2和S4两个池化层使用的window大小均为2×2,这里的池化有两种。

F6是一个有84个神经元的全连接层。

2.模型简介

用下图所示的模型,更加直观:
在这里插入图片描述

  • 第一层:输入层,图片大小为 32×32×1,其中 1 表示为黑白图像,这些手写字体包含0~9数字,也就是相当于10个类别的图片。
  • 第二层:C1,卷积层,filter 大小 5×5,filter 深度(个数)为 6,padding 为 0, 卷积步长 s=1,输出矩阵大小为 28×28×6,其中 6 表示 filter 的个数。所以共有28×28×6个神经元(32-5+1=28),参数数量为156( 5 ∗ 5 ∗ 6 + 6 = 156 5*5*6+6=156 556+6=156,6为偏置项参数),每一个单元与输入层的25个单元连接。
  • 第三层:S2,池化下采样层,平均池化,filter 大小 2×2(即 f=2),步长 s=2,no padding,输出矩阵大小为 14×14×6。
  • 第四层::C3,卷积层,filter 大小 5×5,filter 个数为 16,padding 为 0, 卷积步长 s=1,输出矩阵大小为 10×10×16,其中 16 表示 filter 的个数。
  • 第五层:S4,池化下采样层,average pooling,filter 大小 2×2(即 f=2),步长 s=2,no padding,输出矩阵大小为 5×5×16。注意,在该层结束,需要将 5×5×16 的矩阵flatten 成一个 400 维的向量。
  • 第六层:C5,卷积层,有120个特征图,每个特征图有一个神经元,卷积核大小为5×5,步长 s=1,no padding。
  • 第七层:F6,全连接层,有84个神经元,与C5层构成全连接关系,使用sigmoid激活函数。
  • 第八层:输出层,十分类任务,有10个神经元。

3.模型特点

  • 如果输入层不算神经网络的层数,那么 LeNet-5 是一个 7 层的网络。(有些地方也可能把 卷积和池化 当作一个
    layer)(LeNet-5 名字中的“5”也可以理解为整个网络中含可训练参数的层数为 5。)
  • LeNet-5 大约有 60,000 个参数。
  • 随着网络越来越深,图像的高度和宽度在缩小,与此同时,图像的 channel 数量一直在增加。
  • 现在常用的 LeNet-5 结构和 Yann LeCun 教授在 1998
    年论文中提出的结构在某些地方有区别,比如激活函数的使用,现在一般使用 ReLU 作为激活函数,输出层一般选择 softmax。

LeNet有一个很有趣的地方,就是S2层与C3层的连接方式,在原文里,这个方式称为“Locally Connect”
在这里插入图片描述
规定左上角为(0,0),右下角为(15,5),那么在(n,m)位置的“X”表示S2层的第m个feature map与C3层的第n个kernel进行卷积操作。例如说,C3层的第0个kernel只与S2层的前三个feature map有连接,与其余三个feature map是没有连接的;C3层的第15个kernel与S2层的所有feature map都有连接。

二、AlexNet

AlexNet(论文原文下载)在2012年的ImageNet竞赛上以,比以往最低错误率低10个百分点的成绩夺冠。在测试集上Top-1和Top-5的错误率为37.5%和17.0%。
在这里插入图片描述

1.网络架构

在这里插入图片描述

2.模型介绍

在这里插入图片描述
注:上图的结构简图是从下往上看。

网络的输入为150,528(224x224x3)维,各层的神经元数量为:
253,440=>186,624=>64,896=>64,896=>43,264=>4096=>4096=>1000(ImageNet有1000个类)

举个例子,计算一个186,624是怎么来的:27x27x256=186,624

举个例子,怎么计算feature map尺寸:
在这里插入图片描述
224为输入大小,11为kernel大小,4为stride。

AlexNet包含了8个学习层——5个卷积层(卷积+非线性激活+Max Pooling)和3个全连接层,最后一层是1000维的softmax层。

  • 输入层:图像大小为 227×227×3,其中 3 表示输入图像的 channel 数(R,G,B)为 3。
  • 卷积层:filter 大小 11×11,filter 个数 96,卷积步长 s=4。(filter 大小只列出了宽和高,filter矩阵的 channel 数和输入图片的 channel 数一样,在这里没有列出)
  • 池化层:max pooling,filter 大小 3×3,步长 s=2。
  • 卷积层:filter 大小 5×5,filter 个数 256,步长 s=1,padding 使用 same convolution,即使得卷积层输出图像和输入图像在宽和高上保持不变。
  • 池化层:max pooling,filter 大小 3×3,步长 s=2。
  • 卷积层:filter 大小 3×3,filter 个数 384,步长 s=1,padding 使用 same convolution。
  • 卷积层:filter 大小 3×3,filter 个数 384,步长 s=1,padding 使用 same convolution。
  • 卷积层:filter 大小 3×3,filter 个数 256,步长 s=1,padding 使用 same convolution。
  • 池化层:max pooling,filter 大小 3×3,步长 s=2;池化操作结束后,将大小为 6×6×256 的输出矩阵 flatten 成一个 9216 维的向量。
  • 全连接层:neuron 数量为 4096。
  • 全连接层:neuron 数量为 4096。
  • 全连接层,输出层:softmax 激活函数,neuron 数量为 1000,代表 1000 个类别。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.模型特点

  • 大约 60million 个参数

  • 使用 ReLU 作为激活函数,缓解了Sigmoid在网络较深时的梯度弥散问题。
    在这里插入图片描述

  • 提出了局部响应归一化层(Local Response Normalization Layer),LRN层只存在于第一层卷积层和第二层卷积层的激活函数后面,引入这一层的主要目的,主要是为了防止过拟合,增加模型的泛化能力。具体方法是在某一确定位置(x,y)将前后各2/n个feature map求和作为下一层的输入。;
    在这里插入图片描述

  • 采用了重叠池化(Overlapping Pooling):特征的丰富性。通过设置s<z,则获得重合池化结果。本方法设置s=2,z=3,则获得重叠池化结果。错误率top-1和top-5分别降低了0.4%和0.3%。论文也指出,这种池化只能“稍微”减轻过拟合。

  • 避免过拟合的方法
    1)数据增广
    label-preserving transformations
    (1) 从256256图像中生成5个224224大小的块;并水平翻转。共10块。
    (2) 对于每一个训练图像,增加一个基于PCA的值:
    在这里插入图片描述
    2)Dropout:训练时间仅仅为原始训练的一般。
    Dropout的目的是在指数级子网络的深度神经网络中近似Bagging。也就是说,在训练时,每次Dropout后,训练的网络是整个深度神经网络的其中一个子网络。在测试时,将dropout层取消,这样得到的前向传播结果其实就是若干个子网络前向传播综合结果的一种近似。

  • AlexNet在两个GPU上运行,加速运行
    在这里插入图片描述

三、VGGNet

“VGG”由牛津大学的Oxford Visual Geometry Group提出,它探索了卷积神经网络的深度和其性能之间的关系,通过反复的堆叠33的小型卷积核和22的最大池化层,成功的构建了16~19层深的卷积神经网络。并在ImageNet2014挑战赛中,击败了许多著名算法,并获得亚军,在top5上的错误率为7.5%,第一名是GoogLeNet。但是VGG模型在多个迁移学习任务中的表现要优于googLeNet。而且,从图像中提取CNN特征,VGG模型是首选算法,而且很有研究价值。
在这里插入图片描述

1.模型架构

VGG16的网络结构:
在这里插入图片描述
这个系列网络是在AlexNet的基础上进行的修改;训练图像大小为224*224。
所有的图像都减去了所有训练图像的均值。
在这里插入图片描述

2.模型简介

VGGNet的网络结构如下图所示。VGGNet包含很多级别的网络,深度从11层到19层不等,比较常用的是VGGNet-16和VGGNet-19。VGGNet把网络分成了5段,每段都把多个3*3的卷积网络串联在一起,每段卷积后面接一个最大池化层,最后面是3个全连接层和一个softmax层。

在这里插入图片描述

3.模型特点

  • VGGNet与AlexNet很相似,都是卷积池化-卷积池化-…-全连接的套路,不同的是kernel大小,卷积stride,网络深度。

  • VGGNet将小卷积核带入人们的视线,分析一下大小卷积核的区别与优劣:
    在上面提到的AlexNet中第一个卷积层使用的kernel大小为11x11,stride为4,C3和C5层中使用的都是5x5的卷积核;而出现在VGGNet中大多数的卷积核都是大小为3x3,stride为1的。
    在这里插入图片描述
    直观上我们会觉得大的卷积核更好,因为它可以提取到更大区域内的信息,但是实际上,大卷积核可以用多个小卷积核进行代替。例如,一个5x5的卷积核就可以用两个串联的3x3卷积核来代替,一个7x7的卷积核就可以用三个串联的3x3卷积核来代替。这样的替代方式有两点好处:

1)、减少了参数个数:
两个串联的小卷积核需要3x3x2=18个参数,一个5x5的卷积核则有25个参数。
三个串联的小卷积核需要3x3x3=27个参数,一个7x7的卷积核则有49个参数。
大大减少了参数的数量。

2)、引入了更多的非线性:
多少个串联的小卷积核就对应着多少次激活(activation)的过程,而一个大的卷积核就只有一次激活的过程。引入了更多的非线性变换,也就意味着模型的表达能力会更强,可以去拟合更高维的分布。

  • VGG-16 中的 16 表示整个网络中有 trainable 参数的层数为 16 层。(trainable 参数指的是可以通过 back-propagation 更新的参数)
  • VGG-16 大约有 138million 个参数。
  • VGG-16 中所有卷积层 filter 宽和高都是 3,步长为 1,padding 都使用 same convolution;所有池化层的 filter 宽和高都是 2,步长都是 2。
    – 通过Multi-Scale方法(训练和预测都使用)对数据进行数据增强处理,将原始图像缩放到不同尺寸S,然后再随机裁剪成224 * 224的图片,这样能增加很多数据量,对于防止过拟合有很不错的效果。

四、GoogLeNet

2014年,GoogLeNet原文下载地址和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名、VGG获得了第二名,这两类模型结构的共同特点是层次更深了。VGG继承了LeNet以及AlexNet的一些框架结构(详见 大话CNN经典模型:VGGNet),而GoogLeNet则做了更加大胆的网络结构尝试,虽然深度只有22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数又是AlexNet的3倍,因此在内存或计算资源有限时,GoogleNet是比较好的选择;从模型结果来看,GoogLeNet的性能却更加优越。

小知识:GoogLeNet是谷歌(Google)研究出来的深度网络结构,为什么不叫“GoogleNet”,而叫“GoogLeNet”,据说是为了向“LeNet”致敬,因此取名为“GoogLeNet”
在这里插入图片描述

1. 网络架构

为了减少网络参数,需要稀疏链接,大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。有没有一种方法既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,就如人类的大脑是可以看做是神经元的重复堆积,因此,GoogLeNet团队提出了Inception网络结构,就是构造一种“基础神经元”结构,来搭建一个稀疏性、高计算性能的网络结构。

什么是Inception呢?
Inception历经了V1、V2、V3、V4等多个版本的发展,不断趋于完善,下面仅介绍V1。

一、Inception V1
通过设计一个稀疏网络结构,但是能够产生稠密的数据,既能增加神经网络表现,又能保证计算资源的使用效率。谷歌提出了最原始Inception的基本结构:
在这里插入图片描述
该结构将CNN中常用的卷积(1x1,3x3,5x5)、池化操作(3x3)堆叠在一起(卷积、池化后的尺寸相同,将通道相加),一方面增加了网络的宽度,另一方面也增加了网络对尺度的适应性。

网络卷积层中的网络能够提取输入的每一个细节信息,同时5x5的滤波器也能够覆盖大部分接受层的的输入。还可以进行一个池化操作,以减少空间大小,降低过度拟合。在这些层之上,在每一个卷积层后都要做一个ReLU操作,以增加网络的非线性特征。

然而这个Inception原始版本,所有的卷积核都在上一层的所有输出上来做,而那个5x5的卷积核所需的计算量就太大了,造成了特征图的厚度很大,为了避免这种情况,在3x3前、5x5前、max pooling后分别加上了1x1的卷积核,以起到了降低特征图厚度的作用,这也就形成了Inception v1的网络结构,如下图所示:
在这里插入图片描述
1x1的卷积核有什么用呢?

1x1卷积的主要目的是为了减少维度,还用于修正线性激活(ReLU)。比如,上一层的输出为100x100x128,经过具有256个通道的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256,其中,卷积层的参数为128x5x5x256= 819200。而假如上一层输出先经过具有32个通道的1x1卷积层,再经过具有256个输出的5x5卷积层,那么输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256= 204800,大约减少了4倍。

基于Inception构建了GoogLeNet的网络结构如下(共22层):
在这里插入图片描述
对上图说明如下:
(1)GoogLeNet采用了模块化的结构(Inception结构),方便增添和修改;
(2)网络最后采用了average pooling(平均池化)来代替全连接层,该想法来自NIN(Network in Network),事实证明这样可以将准确率提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便对输出进行灵活调整;
(3)虽然移除了全连接,但是网络中依然使用了Dropout ;
(4)为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)。辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中,这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个网络的训练很有裨益。而在实际测试的时候,这两个额外的softmax会被去掉。

GoogLeNet的网络结构图细节如下:
在这里插入图片描述

2、模型解析

GoogLeNet网络结构明细表解析如下:
输入:原始输入图像为224x224x3,且都进行了零均值化的预处理操作(图像每个像素减去均值)。

第一层(卷积层):使用7x7的卷积核(滑动步长2,padding为3),64通道,输出为112x112x64,卷积后进行ReLU操作,经过3x3的max pooling(步长为2),输出为((112 - 3+1)/2)+1=56,即56x56x64,再进行ReLU操作。

第二层(卷积层):使用3x3的卷积核(滑动步长为1,padding为1),192通道,输出为56x56x192,卷积后进行ReLU操作,经过3x3的max pooling(步长为2),输出为((56 - 3+1)/2)+1=28,即28x28x192,再进行ReLU操作

3a、第三层(Inception 3a层):分为四个分支,采用不同尺度的卷积核来进行处理
(1)64个1x1的卷积核,然后RuLU,输出28x28x64
(2)96个1x1的卷积核,作为3x3卷积核之前的降维,变成28x28x96,然后进行ReLU计算,再进行128个3x3的卷积(padding为1),输出28x28x128
(3)16个1x1的卷积核,作为5x5卷积核之前的降维,变成28x28x16,进行ReLU计算后,再进行32个5x5的卷积(padding为2),输出28x28x32
(4)pool层,使用3x3的核(padding为1),输出28x28x192,然后进行32个1x1的卷积,输出28x28x32。
将四个结果进行连接,对这四部分输出结果的第三维并联,即64+128+32+32=256,最终输出28x28x256

3b、第三层(Inception 3b层):
(1)128个1x1的卷积核,然后RuLU,输出28x28x128
(2)128个1x1的卷积核,作为3x3卷积核之前的降维,变成28x28x128,进行ReLU,再进行192个3x3的卷积(padding为1),输出28x28x192
(3)32个1x1的卷积核,作为5x5卷积核之前的降维,变成28x28x32,进行ReLU计算后,再进行96个5x5的卷积(padding为2),输出28x28x96
(4)pool层,使用3x3的核(padding为1),输出28x28x256,然后进行64个1x1的卷积,输出28x28x64。
将四个结果进行连接,对这四部分输出结果的第三维并联,即128+192+96+64=480,最终输出输出为28x28x480

第四层(4a,4b,4c,4d,4e)、第五层(5a,5b)……,与3a、3b类似,在此就不再重复。

3、模型特点

借助稀疏结构,GoogLeNet可以更少的参数构建更深的网络,其在ImageNet上的分类精度比VGG更高,且训练速度更快。
但是,当网络继续变深的时候,就会变得过于复杂。

2014至2016年,GoogLeNet团队发表了多篇关于GoogLeNet的经典论文《Going deeper with convolutions》、《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》、《Rethinking the Inception Architecture for Computer Vision》、《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》,在这些论文中对Inception v1、Inception v2、Inception v3、Inception v4 等思想和技术原理进行了详细的介绍,建议阅读这些论文以全面了解GoogLeNet。

五、ResNet(深度残差网络)

**动机:**直观上,面对复杂问题,越深的网络往往有更好的性能。然而,实际发现,随着网络的加深,出现了训练集准确率下降的现象。
在这里插入图片描述
从上面两个图可以看出,在网络很深的时候(56层相比20层),模型效果却越来越差了(误差率越高),并不是网络越深越好。

通过实验可以发现:随着网络层级的不断增加,模型精度不断得到提升,而当网络层级增加到一定的数目以后,训练精度和测试精度迅速下降,这说明当网络变得很深以后,深度网络就变得更加难以训练了。

原因:梯度消失,当网络达到一定深度后,网络训练的性能将恶化。

为了解决以上问题,微软研究院的Kaiming He等四名华人提出了ResNet(Residual Neural Network),通过使用ResNet Unit成功训练出了152层的神经网络,并在ILSVRC2015比赛中取得冠军,在top5上的错误率为3.57%,同时参数量比VGGNet低,效果非常突出。ResNet的结构可以极快的加速神经网络的训练,模型的准确率也有比较大的提升。同时ResNet的推广性非常好,甚至可以直接用到InceptionNet网络中。
在这里插入图片描述

1、模型解析

假设现有一个比较浅的网络(Shallow Net)已达到了饱和的准确率,这时在它后面再加上几个恒等映射层(Identity mapping,也即y=x,输出等于输入),这样就增加了网络的深度,并且起码误差不会增加,也即更深的网络不应该带来训练集上误差的上升。而这里提到的使用恒等映射直接将前一层输出传到后面的思想,便是著名深度残差网络ResNet的灵感来源。

ResNet引入了残差网络结构(residual network),通过这种残差网络结构,可以把网络层弄的很深(据说目前可以达到1000多层),并且最终的分类效果也非常好,残差网络的基本结构如下图所示,很明显,该图是带有跳跃结构的:
在这里插入图片描述
ResNet相当于将学习目标改变了,不再是学习一个完整的输出,而是目标值H(X)和x的差值,也就是所谓的残差F(x) := H(x)-x,因此,后面的训练目标就是要将残差结果逼近于0,使到随着网络加深,准确率不下降。

在这里插入图片描述
从图可以看出,怎么有一些“shortcut connections(捷径连接)”是实线,有一些是虚线,有什么区别呢?

  • 实线的Connection部分,表示通道相同,如上图的第一个粉色矩形和第三个粉色矩形,都是3x3x64的特征图,由于通道相同,所以采用计算方式为H(x)=F(x)+x。
  • 虚线的的Connection部分,表示通道不同,如上图的第一个绿色矩形和第三个绿色矩形,分别是3x3x64和3x3x128的特征图,通道不同,采用的计算方式为H(x)=F(x)+Wx,其中W是卷积操作,用来调整x维度的。

经检验,深度残差网络的确解决了退化问题,在plain上观测到明显的退化现象,而且ResNet上不仅没有退化,34层网络的效果反而比18层的更好,同时,ResNet的收敛速度比plain的要快得多。
在这里插入图片描述
在ResNet的作者的第二篇相关论文《Identity Mappings in Deep Residual Networks》中,提出了ResNet V2。ResNet V2 和 ResNet V1 的主要区别在于,作者通过研究 ResNet 残差学习单元的传播公式,发现前馈和反馈信号可以直接传输,因此“shortcut connection”(捷径连接)的非线性激活函数(如ReLU)替换为 Identity Mappings。同时,ResNet V2 在每一层中都使用了 Batch Normalization。这样处理后,新的残差学习单元比以前更容易训练且泛化性更强。

2、模型特点

  • 提出残差学习的思想:传统的卷积网络或者全连接网络在信息传递的时候或多或少会存在信息丢失,损耗等问题,同时还有导致梯度消失或者梯度爆炸,导致很深的网络无法训练。ResNet在一定程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络只需要学习输入、输出差别的那一部分,简化学习目标和难度。
  • shortcut(或者skip connections):ResNet最大的区别在于有很多的旁路将输入直接连接到后面的层。

六、DenseNet

作为CVPR2017年的Best Paper, DenseNet脱离了加深网络层数(ResNet)和加宽网络结构(Inception)来提升网络性能的定式思维,从特征的角度考虑,通过特征重用和旁路(Bypass)设置,既大幅度减少了网络的参数量,又在一定程度上缓解了gradient vanishing问题的产生。结合信息流和特征复用的假设,DenseNet当之无愧成为2017年计算机视觉顶会的年度最佳论文。可以说DenseNet吸收了ResNet最精华的部分,并在此上做了更加创新的工作,使得网络性能进一步提升。

1.模型架构

DenseNet 是一种具有密集连接的卷积神经网络。在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集,而该层所学习的特征图也会被直接传给其后面所有层作为输入。
在这里插入图片描述

  • 闪光点:密集连接:缓解梯度消失问题,加强特征传播,鼓励特征复用,极大的减少了参数量。

DenseNet 比其他网络效率更高,其关键就在于网络每层计算量的减少以及特征的重复利用。DenseNet则是让l层的输入直接影响到之后的所有层,它的输出为:xl=Hl([X0,X1,…,xl−1]),其中[x0,x1,…,xl−1]就是将之前的feature map以通道的维度进行合并。并且由于每一层都包含之前所有层的输出信息,因此其只需要很少的特征图就够了,这也是为什么DneseNet的参数量较其他模型大大减少的原因。这种dense connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深网络不是问题。
在这里插入图片描述
在这里插入图片描述

2.模型特点

DenseNet作为另一种拥有较深层数的卷积神经网络,具有如下优点:

  • 相比ResNet拥有更少的参数数量.
  • 旁路加强了特征的重用.
  • 网络更易于训练,并具有一定的正则效果.
  • 缓解了gradient vanishing和model degradation的问题.
  • 可以提取更加多样化的特征,由于 DenseNet 中的每一层都接收前面的所有层作为输入,因此特征更加多样化,并且倾向于有更丰富的模式。
  • 强化特征传播,并且支持特征重用。

系列相关论文:
系列相关论文:
1.BP神经网络的详细推导
2.卷积神经网络CNN模块化剖析
3.神经⽹络可以计算任何函数的可视化证明

  • 29
    点赞
  • 432
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我会用中文回答你的问题。 要写一个识别的卷积神经网络CNN)来识别图像的话,需要以下步骤: 1. 收集和准备数据集:首先需要准备一个图像数据集,并将其分成训练集和测试集。数据集应包含您要识别的对象或场景的图像。 2. 构建CNN模型:可以使用Python编程语言中的深度学习框架(如TensorFlow或PyTorch)来构建CNN模型。您需要定义层数,每层的卷积核大小,激活函数,优化器等等。这需要一定的深度学习知识。 3. 训练CNN模型:使用训练集数据训练CNN模型。这将涉及将数据输入到CNN模型中,并将其与实际标签进行比较。然后,通过计算损失函数来优化CNN模型参数,使其更好地匹配标签。 4. 测试CNN模型:将测试集数据输入到训练后的CNN模型中,以验证其性能。您可以计算准确度、精确度、召回率和F1分数等指标来评估CNN模型的性能。 5. 优化CNN模型:根据测试结果对CNN模型进行优化。您可以尝试添加或删除某些层,调整参数,更改优化器或损失函数等。 需要注意的是,构建一个高性能的CNN模型需要大量的计算资源和深度学习知识。因此,您可能需要花费一些时间来学习这些概念,并使用适当的工具和资源来帮助您构建一个高性能的模型。 ### 回答2: 卷积神经网络(Convolutional Neural Network,CNN)是一种常用于图像识别任务的深度学习模型。下面我将以300字左右为您介绍如何构建一个简单的图片识别的卷积神经网络。 首先,您需要导入Python深度学习库,如TensorFlow或PyTorch。接下来,您需要准备一个包含标记好的图像数据集,其中每个图像都有对应的标签。数据集可以分为训练集和测试集。 然后,您可以开始构建卷积神经网络模型。模型可以包含多个卷积层和池化层,用于提取图像特征。您可以选择不同的卷积核大小和池化方式,根据任务的需求进行调整。 在卷积层和池化层之后,您可以添加全连接层用于分类。全连接层将提取的特征输入到神经网络中,通过多个神经元对图像进行分类。 为了提高模型的准确性,您可以在训练过程中使用反向传播算法进行权重更新。您可以定义损失函数(如交叉熵损失)来衡量模型的误差,并使用优化算法(如随机梯度下降)来最小化损失函数。 训练过程中,您可以将数据集分成小批量进行训练,这样可以更好地利用计算资源和加速训练过程。一般会迭代多个epoch,每个epoch包含多个小批量的训练。 最后,您可以使用测试集评估模型的性能。通过比较模型的预测结果和真实标签,可以计算出模型的准确率、精确率和召回率等指标。 总结来说,构建一个图片识别的卷积神经网络需要准备数据集、构建模型、定义损失函数和优化算法以及评估模型的性能。不同的任务可能需要不同的网络架构和训练方法,您可以根据具体的需求进行调整和优化。祝您成功! ### 回答3: 卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,可以用于图像识别和分类任务。下面是一个基本的图片识别的卷积神经网络模型的示例: 1. 数据准备: 首先,需要准备图像数据集作为训练数据。数据集应包含带有标签的图像样本,例如有狗和猫的图像数据集。 2. 模型构建: - 输入层:将图像的像素值作为输入。 - 卷积层:通过一系列卷积核(滤波器),对输入图像进行特征提取与转换。每个卷积核学习提取不同的特征,例如边缘、纹理等。 - 池化层:对卷积层的输出进行下采样,减少特征图维度,提取主要特征。 - 扁平层:将池化层的输出展开为一维向量,作为全连接层的输入。 - 全连接层:将扁平层的输出与权重进行矩阵乘法运算,并通过激活函数进行非线性转换。 - 输出层:经过全连接层的处理后,输出每个类别的概率或判断结果。 3. 模型训练: - 随机初始化模型的权重参数。 - 将图像数据输入模型,并计算输出结果。 - 根据输出结果与真实标签之间的差异,使用损失函数衡量模型的预测误差。 - 使用反向传播算法,根据损失函数的梯度逐层更新模型参数。 - 迭代以上步骤,直到模型收敛或达到训练次数上限。 4. 模型测试: - 使用测试数据集对训练好的模型进行性能评估,计算准确率、精确率等指标。 注意:以上是一个基本的卷积神经网络模型架构,具体的模型设计和参数设置需要根据实际问题进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值