目录
6)、Skip Connection可以实现不同分辨率特征的组合
四、论文笔记-Deep Residual Learning for Image Recognition
3.2 Identity Mapping by Shortcuts
4.3 Object Detection on PASCAL and MS COCO
一、ResNet算法概述
1、网络退化问题
神经网络的深度越深不一定性能就越好,在上图中展示了一种网络退化现象(degradation),网络越深并性能并不一定会变好,56层的网络在训练集和测试集上的误差都比20层的网络高,注意的是,这个现象既不是梯度消失或梯度爆炸,也不是过拟合,而ResNet就是解决了网络退化现象。
2、ResNet的残差模块
ResNet网络引入了一个残差模块,将模型的输入或一个层的输入分成了两个路径,短路连接Shortcut Connection(跳跃连接Skip Connection)将输入数据X原封不动地(恒等映射Identity)传到输出口,主路是两层神经网络。
残差模块的含义:
不需要拟合真正底层的分布,只需要拟合在原来的输入恒等映射基础上进行的修正残差,也就是偏移量,使得模型在对输入的X进行卷积的时候起码不会比原来的X差,只会在输入X的基础上进行优化,最差情况下残差为0,保底还是原来的X。
残差的含义:
预测值和真实值之间的偏差,网络是去拟合这个偏差,而恒等映射就是预测的值在加上偏差之后尽可能接近真实值。
3、整体框架
加上残差模块之后,深层网络就解决了退化现象,通过尽可能的加深网络层级,提升模型的表示能力和特征提取能力。当然也不能无限制的堆叠网络,容易造成过拟合的现象。
notes:
骨干网络是用于提取图像特征,用这个特征进行目标检测、目标定位、图像分类、图像分割等工作。
1)、Block:
在神经网络中,"block"通常指的是一个模块,它是网络中的一个组成部分,可以自包含地执行某种特定功能。一个block通常由一系列层(或子模块)组成,并且可能具有层与层之间的连接方式。
在深度学习中,常见的一些block模块包括:
-
基本层:例如卷积层、池化层、全连接层等,它们是构建神经网络的基本组成单元。
-
规范化层:例如批量标准化层(Batch Normalization)、层归一化(Layer Normalization)等,用于提高网络的训练稳定性和收敛速度。
-
残差连接(Residual Connection):通过将输入与输出相加,实现跳跃连接,用于缓解网络的退化问题。
-
注意力机制(Attention Mechanism):用于选择网络中不同部分的重要性或权重,以便网络更关注重要的特征。
-
深度可分离卷积(Depthwise Separable Convolution):将卷积操作分解为深度卷积和逐点卷积,减少参数数量,提高模型的效率。
-
残差模块(Residual Block):由多个卷积层和跳跃连接组成的模块,用于构建深层神经网络,如ResNet。
这些block模块可以根据具体任务的需求进行组合和堆叠,以构建更复杂的网络架构。它们提供了一种模块化的方法,使得网络的设计、训练和调整更加灵活和高效。
2)、mAP指标:
mAP(mean Average Precision)是一种广泛应用于目标检测任务中的评估指标。它用于衡量模型在多个类别上的准确性和召回率的综合表现。
在目标检测任务中,模型需要识别图像中的不同目标,并给出它们的位置和类别。mAP通过计算在不同IoU(Intersection over Union)阈值下的平均准确率(AP)来评估模型的性能。
准确率(Precision)是指在模型预测为正例的样本中,实际为正例的比例,而召回率(Recall)是指在实际为正例的样本中,被模型预测为正例的比例。AP衡量的是在不同的置信度或阈值下,模型的准确率和召回率之间的权衡。
3)、mAP计算步骤如下:
-
对每个类别计算AP:首先,将所有的预测结果按照置信度排序。然后,对于每个置信度阈值,计算准确率和召回率,并计算出对应的AP。
-
计算mAP:将所有类别的AP取平均,得到mAP。
mAP是一个常用的目标检测评估指标,它可以综合考虑模型的准确性和召回率,并且考虑了不同置信度或阈值下的性能变化。较高的mAP值表示模型在目标检测任务上具有更好的性能。
二、网络退化问题(Degradation)
1、定义
在神经网络中,"degradation"(退化)指的是当网络的深度增加时,性能反而下降的现象。具体来说,随着网络层数的增加,训练误差会逐渐减小,但验证误差却会先减小后增大,导致模型的性能退化。
网络退化问题的原因有以下几点:
-
梯度消失(Gradient Vanishing):在深层网络中,反向传播算法可能会导致梯度逐渐变小,使得参数更新很小或无法更新,从而降低网络的学习能力。
-
梯度爆炸(Gradient Exploding):反向传播算法中梯度的值可能会因层数增加而变得非常大,导致参数更新过大,网络无法收敛。
-
参数分布偏移(Parameter Distribution Shift):网络的深度增加可能会导致参数分布的偏移,使得网络学习到的特征变得不稳定,影响模型的性能。
-
信息丢失(Information Loss):在深层网络中,信息传递会变得更加困难,可能导致一些重要的特征在网络层间难以传递,从而影响模型的性能。
为了解决网络退化问题,研究者提出了一系列的方法和思想,包括使用残差连接(Residual Connection)来解决梯度消失问题、使用规范化层(Normalization)来提高网络的稳定性、使用注意力机制(Attention Mechanism)来提高网络的注意力等。这些技术都旨在改善深层网络的训练和性能,并解决网络退化问题。
2、ResNet解决网络退化的机理
1)、深层梯度回传顺畅
恒等映射这一路的梯度是1,把深层梯度注入底层,防止梯度消失。没有中间层的削减。
底层的信号传到深层,也可以把深层的梯度传回底层,有效防止梯度消失,传统的线性的神经网络,特别是用Sigmoid激活函数的神经网络里,梯度回传时层层变小。
2)、类比其他机器学习模型
- 集成学习boosting,每一个弱分类器拟合“前面的模型与标签值(Ground Truth)之差”
- 长短时记忆神经网络LSTM的遗忘门
- ReLu激活函数--有用时输出x,无用时置为0
3)、传统线性结构网络难以拟合“恒等映射”
- 什么都不做有时很重要
- Skip Connection可以让模型自行选择要不要更新
- 弥补了高度非线性造成的不可逆的信息损失(输出很难反推回输入),如MobileNet V2
4)、ResNet反向传播传回的梯度相关性好
网络加深,相邻像素回传回来的梯度相关性越来越低,最后接近白噪声。但相邻像素之间具有局部相关性,相邻像素的梯度也应该局部相关。
相邻像素不相关的白噪声梯度只意味着随机扰动,并无拟合。
ResNet梯度相关性衰减从增加为。保持了梯度相关性。
5)、ResNet相当于几个浅层网络的集成
- 个潜在路径(类似Dropout)
- 测试阶段去掉某几个残差块几乎不影响性能
6)、Skip Connection可以实现不同分辨率特征的组合
- 类似于特征金字塔FPN(Feature Pyramid)
- DenseNet
三、ResNet网络详解
1、网络详解
- 随着网络层数加深会出现两个问题:(1)、梯度消失或梯度爆炸;(2)、网络退化问题。通常对数据进行标准化处理、权重初始化、和BN来处理第(1)个问题;通过增加残差模块解决第(2)个问题。
- 残差分支与shortcut分支的输出特征矩阵维度大小必须相同。
- 通过1X1卷积层来进行升维和降维。
2、Batch Normalization
通过使用Batch Normalization可以加速网络的收敛并提升准确率,调整特征图满足均值为0,方差为1的分布规律,目的是调整输入的一批数据的一层内的特征数据的分布,并不是单独去调整某一个图像的特征图。计算每一个通道所对应的均值和方差,注意是指一批数据同一个通道的所有数据的均值和方差。
“对于一个拥有d维的输入x,我们将对它的每一个维度进行标准化处理。” 假设我们输入的x是RGB三通道的彩色图像,那么这里的d就是输入图像的channels即d=3,,其中就代表我们的R通道所对应的特征矩阵,依此类推。标准化处理也就是分别对我们的R通道,G通道,B通道进行处理。
3、迁移学习
使用迁移学习的优势:
- 能够快速训练出一个理想的结果
- 当数据集较小的时候也能训练出理想的结果
常见的迁移学习方式:
- 载入权重后训练所有参数
- 载入权重后只训练最后几层参数
- 载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层
四、论文笔记-Deep Residual Learning for Image Recognition
0. Abstract
深度神经网络非常难以训练,为了解决这个问题,提出了残差学习的框架,用于解决非常深网络的训练问题。原来是网络直接去拟合一个分布,现在是网络去拟合相对于上一层输出的残差。
神经网络的深度是非常重要的,网络越深能提取的特征的层次就越丰富。
1. Introduction
深度网络一般是整合了底层、中层和高层的不同尺度特征,用这个特征,后边接上分类器进行端到端的构建模型,特征的层次是十分重要的,可以通过把模型堆深来提升特征的丰富程度。
当然直接简单堆深网络是不行的,需要解决梯度消失和梯度爆炸问题,梯度消失和梯度爆炸会阻碍模型训练时的收敛。但是梯度消失和梯度爆炸可以通过归一化技巧(Batch Normalization)或权重初始化技巧(Xavier初始化和MSRA初始化)解决。
当网络变深时,会出现退化问题(Degradation),模型在训练集和测试集上的误差都变高了,都比浅层网络要差,这种现象既不是由梯度消失和梯度爆炸产生的,也不是由过拟合导致的。
解决方案:一条路径是恒等映射,另一条路是拷贝了同样的浅层模型(shallower model)。这中模型可以保证加深模型至少不会在训练集上的表现得更差,但这种递归结构的网络很难被优化。
在本文中提出了一个深度残差学习的框架,模型不需要直接去拟合底层的映射,而是让它拟合相对于输入的残差。
过去:直接拟合底层映射,现在:,通过拟合残差相对于x的残差,假设拟合残差比直接拟合底层映射要容易,极端的情况下,如果恒等映射足够好的话,残差模块可以把所有权重学成0,,这样整个模块输入和输出就一样,底层映射就是恒等映射。
恒等映射既不会引入额外的参数量,也不会引入额外的计算量(加法可以忽略不计),加了恒等映射之后模型的大小几乎没变,同样可以用随机梯度下降(SGD)和反向传播方法端到端地训练。
评价模型的性能:(1)、残差网络易于优化收敛;(2)、解决了退化问题;(3)、可以构造很深的模型,准确率大大提升。
特别深的网络提取的特征同样可以迁移泛化到其他的计算机视觉任务上。
2. Related Work
Residual Representation
残差表示,在对像素层面进行的图像工程以及计算机图形学领域(如何在计算机中表示各种维度的图形),需要解决偏微分方程的问题,被采用一种多重网络的方法,将问题分解成若干子问题,每个子问题都是求得一个相对于粗粒度来说更细粒度的残差进行求解。多重网格的替代方法是用级联基预处理方法,也是为了求出两种尺度的残差。
一个好的重构和预处理能够简化预处理流程
Shortcut Connections
把网络中不同层连起来。在GoogLeNet中有一些层是通过辅助分类器连接到底层,希望在训练的时候引入多个输出头,来把损失函数的梯度尽可能的注入到底层,后来被证实无效。通过Shortcut Connection整合梯度和反向传回来的误差是很重要的。GoogLeNet中inception结构也是包含一些shortcut connection连接。
同时进行的研究是门控函数(highway networks),门控函数扮演残差角色,深层网络性能提升不明显。在循环神经网络,如LSTM中有很多门控单元,这些门是数据驱动的,需要一些学习到的权重参数去控制,但是ResNet中的shortcut connection就是恒等映射,没有参数,永远会被学习到。
3. Deep Residual Learning
3.1 Residual Learning
假设是真正底层需要拟合的从输入到输出的映射,有可能是被网络的一个模块学习到的,也可能是整个网络学习到的最终的映射。根据万能近似定理(Universal Approximation Theorem),只要有一个隐含层神经网络,理论上可以拟合任何函数。ResNet不是让网络直接拟合,而是拟合的残差,最终结果是。本质是传统多层网络难以拟合恒等映射,加了恒等映射之后深层网络至少不会比浅层更差,如果恒等映射已经最优,残差模块只需要拟合0映射。
在实际情况下,恒等映射都不是最优的,残差分支需要对数据进行修正处理,后边的网络只需要拟合前边的输出与真实的期望标签的残差扰动就可以。
图7的实验表明了残差模块因为扰动小,输出的响应会更小。
3.2 Identity Mapping by Shortcuts
在每一个模块都使用了残差学习,数学表示为,中输入为x,先经过一轮卷积过后进行激活函数处理,通常采用ReLu激活函数,之后在进行一次卷积,x为恒等映射。如果卷积层之后加了Batch Normalization项则不需要偏置项。然后把残差和输入进行逐元素相加(element-wise addition)。之后将结果再进行一次非线性激活操作。
其中和的维度必须一样,若维度不一样,比如有下采样的层,可以对shortcut connection在进行一次线性变换,变成和残差模块同样维度大小;也可以用一个相同大小的方阵;最后发现恒等映射是最好的。
shortcut connection没有引入参数和计算复杂度,提供了一个控制变量对比的条件,把带残差的网络和普通网络进行对比,是相同的参数和复杂性的,可以公平的对比(加法可以忽略不计)。
残差模块通常包含两层或者三层,但是残差分支如果只有一层神经网络,表现得就类似于线性层,就丢失了神经网络的优势。
在上边提到的残差模块的神经网络是全连接神经网络,当然也可以是卷积神经网络,残差就可以表示成多层的卷积神经网络,最后逐元素的加法可以表示成两个特征图逐通道逐元素的相加。
消融实验:
消融实验(Ablation Study)是指通过逐步去除模型中的某些组件或特性,来评估这些组件对模型性能的贡献程度的一种实验方法。消融实验常常用于深度学习领域,有助于理解模型中各个部分的作用,揭示模型效果的关键因素,并为模型设计和优化提供指导。
3.3 Network Architectures
Plain Network
类似VGG网络,所有的卷积层都是3X3卷积,并且遵守两个设计原则:(1)、在每一个block内,卷积核的个数不变;(2)、特征图大小减半的时候,卷积核的个数X2。VGG使用池化进行下采样,本文使用步长为2的卷积进行下采样。在VGG中最后是全连接层,而且VGG的大部分参数都是全连接层导致的,为了取代全连接层,本文使用了全局平均池化(Global average pooling),把每一个通道求一个平均值,代替全连接层,最后加上Softmax得到归一化概率。
Residual Network
基于普通网络(Plain Network),添加残差模块,当下采样时匹配维度的方案有两种:(1)、对恒等映射分支缺失的通道做padding填充补0;(2)、对恒等映射分支做1X1的卷积升维。
notes:
所有都是3X3卷积,每个block中的卷积核个数相等,下一个block特征图大小减半,通道数数量翻倍,block之间通过下采样连接。
“/2”表示通过步长为2的卷积进行下采样,取代原来的pooling层。最后通过avg pooling取代全连接层。
实线shortcut connection代表维度相同的直接加,虚线shortcut connection表示出现了下采样,出现了步长为2的卷积,需要让残差分支和恒等映射分支的数据大小一致。
3.4 Implementation
同AlexNet和VGG遵循一个训练范式,训练阶段在图像增强的时候,图形分别被随机压缩到[256,480]像素之间做尺度增强,用224X224大小在图像上随机裁出小图,再水平镜像做图像的增强。在不同尺度不同位置不同水平镜像来做图像增强。对训练集中所有图像的每个像素的均值求出来,训练时每个像素减去均值,减去均值可以去掉或者弱化图像中占大部分的背景的影响。在每一个卷积层后边和激活函数之前使用batch normalization,遵循P-ReLu的权重初始化方法来从头训练所有的plain/residual网络。随机梯度下降(SGD)的mini-batch size是256,学习率从0.1开始,遇到瓶颈就除以10。训练60万个迭代轮次,L2正则化是0.0001,动量是0.9。没有使用drop-out(和batch normalization不相容)。
测试阶段遵循一张图片裁剪10个小图(10-crop testing),使用了多尺度裁剪和特征融合(fully-convolutional form),把图像缩放到不同尺度再输入到模型里,把多尺度{224,256,384,480,640}预测结果进行汇总,最终结果对多个尺寸图像的结果求平均值。
4. Experiments
4.1 ImageNet Classification
2012年的ImageNet数据集包含1000个类别,128万张训练图像,5万张验证图,最后是10万张测试图。
Plain Network
推测深度的普通网络在收敛的速度上呈指数型降低,不利于训练误差的降低。网络退化现象不能通过延长训练时间增加迭代次数来解决。
数据本身决定了该类问题的上限,模型只是逼近这个上限;模型结构本身决定了模型的上限,训练调参只是在逼近这个上限。
Residual Network
带了残差模块之后,发现34层的网络表现比18层的要好,证明网络退化现象没有出现。
残差分支出现下采样,对于shortcut connection使用zero-padding,没有产生额外参数。
根据实验得出三种现象:(1)、34层的网咯表现比18层的效果好,验证集和训练集误差都很小,泛化性能很好,网络退化问题得以解决,层数越深性能越好;(2)、带残差的网络比不带残差的网络效果要好,残差学习可用于搭建非常深的网络;(3)、带残差的网络收敛速度更快。
Identity vs. Projection Shortcuts
在下采样的时候用恒等连接还是经过其他处理的对比。
普通残差模块在shortcut connection上没有其他处理只用恒等映射。做了三个对比试验:
A-所有shortcut用恒等映射,升维用zero-padding;B-平常的shortcut用恒等映射 ,升维用1X1卷积;C-所有的shortcut都用1X1卷积。
A、B、C方案都比普通网络Plain Network要好;B比A好,A在升维时用padding补零,相当于丢失了shortcut分支的信息,没有进行残差学习;C比B好,C的13个非下采样残差模块的shortcut都有参数,模型表示能力强;A B C相差不多,说明恒等映射的shortcut足以解决退化问题。
Deeper Bottleneck Architectures
输入输出都是高维,中间是低维的。通过1X1卷积降维,然后3X3卷积处理,之后用1X1卷积升维,可以减少计算量和参数量。
无参数的恒等映射shortcut对bottleneck结构十分重要,如果shortcut使用其他的映射,会造成时间复杂度/计算量,模型尺寸/参数量都会翻倍。
50-layer ResNet
将34层网络中的两层的残差模块换成了三层的bottleneck残差模块变成50层,下采样使用B方案,普通shortcut使用恒等映射,下采样使用1X1卷积。
101-layer and 152-layer ResNets
用三层的bottleneck残差模块构建,虽然深度显著增加,但是152-ResNet计算量仍然比VGG-16或VGG-19的计算量要低。网络加深对模型的性能提升是有用的,并且没有发现出现网络退化现象。
4.2 CIFAR-10 and Analysis
每张图像[32X32X3]大小,包含5万张训练图片,1万张测试图片,10个测试类别。
目的是实现极深的网络,而不是单纯的刷分。
网络的输入是[32X32]图像,图像做了预处理。第一个层是3X3卷积层,之后堆了6n个层,分别在三个特征图尺度上进行卷积,最后连接GAP层取代全连接层,接一个10个神经元的全连接层和Softmax进行分类,总共有6n+2个带权重的层。下采样使用步长为2的卷积。残差模块是两层卷积层连接,下采样A方案,用padding补零,所有shortcut用恒等映射。所以带残差的网络和普通网络具有同样的深度宽度、参数量和计算量。
训练时,L2正则化0.0001,动量0.9,权重初始化,batch normalization,mini-batch是128,在两个GPU上并行训练.起始学习率是0.1,在3万2、4万8迭代的时候学习率逐渐除以10。最终在6万4迭代次数终止。
图像增强方法:分别在每个图像周围补四圈padding,用32X32大小随即在图像上进行剪裁,或者水平翻转来在训练时做图像增强。测试时用原始32X32图片进行测试。
将模型的大小,得到20,32,44和56层的网络。
Analysis of Layer Responses
对每层响应大小进行分析,因为残差模块的残差分支是在修正输入,研究一下修正的幅度大还是小。上图表示了各层输出响应的标准差,因为使用了batch normalization做了处理,均值都为0,标准差衡量了数据分布的离散程度,标准差(std)越大就证明输出的响应越大,这个响应是每一层3X3卷积层batch normalization之后,激活函数之前的标准差。
网络越深输出的响应就越小。
Exploring Over 1000 layers
设计了一个n=200的有1202层的网络,证实了没有优化的困难,在训练误差上<0.1%.最终测试集上结果也不错,并没有产生过拟合现象。但是测试集上性能不如ResNet-110.是因为CIFAR-10数据集太小了,1202层网络参数量,拟合空间,表示能力过于强大,对小数据集没有必要,容易过拟合。应该使用如maxout/dropout非常强的正则化,而不是仅使用深而窄的网络结构起到正则化的效果。
4.3 Object Detection on PASCAL and MS COCO
ResNet可以迁移到其他计算机视觉任务中。在目标检测任务中,使用了Faster R-CNN两阶段目标及检测框架,把VGG-16骨干网络换成了ResNet-101网络。对于目标检测任务,先用骨干网络提取图像中的特征,再用特征完成各种任务。