图像分类经典论文阅读笔记(VGGNet、Google Net、ResNet、DenseNet、SENet、ResNeXt)

注:该博客只是对图像分类经典论文阅读后遇到困惑的地方进行记录,主要记录内容都是网络框架的主干部分,并未对全文进行详细的记录。


一、Very Deep Convolutional Networks For Large-Scale Image Recognition – VGGNet

论文链接:Very Deep Convolutional Networks For Large-Scale Image Recognition

本文研究问题与主要贡献

《Very Deep Convolutional Networks For Large-Scale Image Recognition》本文研究了在大规模图像识别中,卷积网络深度对其识别精度的影响

主要贡献是使用具有非常小(3 ×3)卷积滤波器的架构对于增加了深度的网络的全面评估,这表明将通过将深度推到16-19个权重层可以实现对现有技术配置的显著改进。

文章部分要点

3.1training

训练尺度S
训练用到的224 × 224的图片是从缩放后的原始图片中裁剪出来的,而缩放不仅仅可以缩小也可以放大,记图片缩放后的最短边的长度为S,也称为训练尺度(training scale)。

S的取值:当裁剪尺寸固定为224 × 224时,原则上S可以取不小于224的任何值:对于S=224来说,裁剪将会捕获整个的图像统计数据,将会完整横跨训练图像的最小边。对于S ≫ 224,裁剪将会对应于图像的一小部分,包括一个小对象或者对象的一部分。

通俗的说,如果S的最短边为224时,那么就把长边截成224,得到224 × 224的尺寸作为输入;如果S的最短边大于224,假设S为448 × 448,那么可能截取的就是左上角这一块,只是S的一小部分(即图像的局部信息)。

训练尺度S设置方法:

这里补充两点

1、使用固定的S(单尺度的训练),本文使用了两种大小:256(应用于AlexNet,ZFNet,Sermanet)和384。

2、使用变化的S(多尺度的训练),给定一个S变化的范围[ Smin , Smax ](文章中使用的范围是[ 256 , 512 ] ),使其在这个范围中随机选值来缩放图片。

3.2testing

全连接层等效替换为卷积层进行测试

注意参数的含义:参数与输入的数据是无关的,比如25088向量是输入,不包含任何参数。

7×7×512×4096的含义 4096个神经元,每个神经元含有7×7×512也就是25088个参数,也可以把每个神经元看作是一个1×4096的向量,然后与输入的数据(这里也是一个1×4096的向量)做点乘,最终得到一个数(标量),因为有4096个神经元,最后得到一个1×4096的向量。
在这里插入图片描述

全连接等效替换卷积后,参数是一样的,第一层卷积是不滑动的,因为有4096个卷积核,所以也得到一个1×4096的向量。

第二层的输入其实是1×1×4096的,第二层卷积就是1×1×4096×1000(参数量等价),两个1×1×4096的张量做卷积,其实就是压缩通道,最后结果尺度是1×1×1,可以看作标量,因为有1000个卷积核,所以最终结果可以看作1×1000的向量。

在这里插入图片描述

目的

1.输入图像的大小不再受限制,可以兼容不同输入尺度的向量,因此可以高效地对图像作滑动窗式预测。

2.而且全连接层的计算量比较大,等效卷积层的计算量减小了,这样既达到了目的又十分高效。

top-1和 top-5误差

top-1误差:是一个多类分类误差,表示分类错误图片的比例(模型猜的最可能的结果就是正确答案的概率)

top-5误差:是竞赛评估的主要指标,表示了真实的类别不在预测到的概率最大的五个类别中的错误率(模型猜的前五个结果里面包涵正确答案的概率)

训练细节:

multi-crop:即对图像进行多样本的随机裁剪,然后通过网络预测每一个样本的结构,最终对所有结果平均。GoogleNet中使用了很多multi-crop的技巧,可以显著提升精度,因为有更精细的采样。

dense:将全连接层都变成卷积网络的那种训练方式。

论文关键思想

1.用三个3×3的卷积核代替7×7的卷积核,有的FC层还用到了1×1的卷积核。以及2×2的池化层;

2.在更深的结构中没有用到LRN(推翻了Alex),避免了部分内存和计算的增加;

3.使用了密集型训练方法(全连接->卷积层),可适应各种尺寸的图片;

4.将图像分为多个GPU批次,在多个GPU上进行训练,节省了时间。

论文评价

VGG16和VGG19经常作为迁移学习的骨干网络。将LeNet和AlexNet奠定的经典串行卷积神经网络结构的深度和性能发挥到极致。 VGG模型结构虽然简单,但臃肿复杂,参数过多(超过一亿个),速度慢,第一个全连接层占据了大量参数。

二、Going deeper with convolutions – GoogLeNet Inception V1

论文链接:Going deeper with convolutions

核心模块介绍

下图就是Inception网络架构的两个模块,(a)是原始版本,但是每个Inception模块都会增加维度,最后会导致计算爆炸。

为什么维度一定会增加?(结合后面的Concatenate操作)
因为存在一个池化层,而池化层的维度和输入的维度是一致的,所以不管其他三个卷积的卷积核个数到底是多少,最终得到的输出结果维度都会增加。
如果输入的维度是x,那么输出的维度至少也是x+3。

(b)是改进后的模块,通过加入1 x 1卷积,实现降维,可以降低参数量和计算量。(个人认为主要还是在池化后的降维对维度进行限制起到作用,而卷积前的降维只起到降低参数量和计算量的效果,最终维度还是由卷积核个数决定)

在这里插入图片描述

本文介绍Inception的主要特点是提高了网络中计算资源的利用率,设计目的是通过精细的设计,在保证计算量不变的情况下,增加深度和宽度。用到的理论知识有Hebbian原则(生物神经方面)和多尺度处理。

Hebbian原则:神经科学上的概念,简单讲就是神经元突触的‘用进废退’,两个神经元,如果总是同时兴奋,就会形成一个组合,其中一个神经元的兴奋会促进另一个的兴奋。反映在inception上就是把相关性强的特征汇聚到一起

多尺度处理:不同尺度的卷积核并行处理,如下图(注意:对Concatenate过程的输入,也就是经过中间并行处理后得到的结果长宽是一样的,深度或者说厚度可以不同)。

注意下图,下半部分就是Concatenate过程中实际尺寸示意图,各输入的长宽是相等的

在这里插入图片描述

1 x 1卷积的作用

1.降维或升维;
2.跨通道信息交融;
3.减少参数量;
4.增加模型深度,提高非线性表示能力。

global average pooling

概念:每一个维度(通道)求一个平均值作为这个通道的代表。
作用:大大减少参数量,方便迁移学习。

文章部分要点

3.Motivation and High Level Considerations—动机和高水平的考虑

本文方法核心方法是稀疏连接代替密集连接,就是引入稀疏性,用稀疏连接代替全连接层,甚至一般的卷积。

原理:如果数据集的概率分布可以由大型的,非常稀疏的深度神经网络表示,可以通过如下方式逐层
构建,分析上一层的激活输出的统计特性,并将具有高度相关性输出的神经元进行聚类,来获得一个稀疏的表示。

稀疏连接两种方法

1.空间(spatial) 维度上的稀疏连接,也就是 CNN 。其只对输入图像的局部进行卷积,而不是对整个图像进行卷积,同时参数共享降低了总参数的数目并减少了计算量。
2.在特征(feature)维度上的稀疏连接进行处理,也就是在通道的维度上进行处理。(Inception 结构的灵感来源)

从稀疏矩阵理解稀疏性:稀疏矩阵的定义:矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素的分布没有规律,则称该矩阵为稀疏矩阵。由于稀疏矩阵的特殊性质,在对稀疏矩阵进行卷积运算时往往会产生很多不必要的计算(在0值密集的区域进行卷积),这时候为了提升运算效率就可以考虑忽略矩阵中0值聚集的区域而选取出非零值聚集的区域直接卷积。
在这里插入图片描述

4.Architectural Details—架构细节

Inception主要思想
1.用密集模块去近似局部稀疏结构,聚合高相关性的特征输入到下一层。

2.平移不变性意味着网络由卷积构建块构建。只需要找到最优局部结构(就是Inception块)并在空间上重复它。

基础模块:1×1、3×3、5×5卷积,3×3最大池化。(非必须,只是为了对齐容易)

为什么分三个卷积核?
根据上一篇VGG中介绍感受野的例子,我们可以知道卷积核大的,感受野就越大。如果这个区域越大,说明我们获得的越是一个偏向全体的特征;而区域越小,说明我们获得的是一个偏向局部的特征。这样一来就可以获得不同尺度的特征。

为什么有条路是池化层?
引用论文原话:由于池化操作对于目前卷积网络的成功至关重要,因此建议在每个这样的阶段添加一个替代的并行池化路径应该具有额外的有益效果。

四条路过后为什么要合一块?
举个例子:有一个Inception结构的块,它的输入是16个通道的,输出是256个通道的。而有另外一个卷积层,设它的卷积核是5×5的,它的输入和输出也是16和256个通道。那么其实卷积层的这个输出是256个5×5尺度的信息,这样就造成了大量的冗余。但Inception输出同样是256个通道,但是它有四个尺度的信息,可能每个尺度占据64个通道,冗余信息就更少,这个输出信息也更加丰富。

Inception结构图解与参数
在这里插入图片描述

InceptionV1结构图解与参数
在这里插入图片描述

1×1卷积核的作用?
1.降维或升维;
2.减少参数量,减少计算量;
3.实现跨通道信息交融。使用1×1卷积核,其实就是对不同的通道间的信息做线性组合的一个变换过程;
4.增加模型深度,提高非线性。使用1×1卷积核的网络更深,而每一层网络后都会用Relu函数增加非线性,这样就增加了一层非线性特性。

为什么要把1ⅹ1卷积核加在3×3、5×5卷积?
为了进行降维从而减少后边大卷积核的参数量。

既然5×5那么大,为何不全部替换成1×1?
虽然1x1可以解决参数量的问题,但是它同时局限了感受野的范围,所以要做到感受野和参数量的权衡,虽然5x5和3x3的参数量大,但是他们卷积效果也好,我们只在某些时候引入1x1卷积,起到降维/通道聚合等作用。

效果:
加入1×1卷积层,总的卷积参数量已经大大低于之前的初始化Inception模块;
在最大池化层之后也加入了1×1的卷积层,所以最终输出的特征图的深度也降低了,这样也降低了该单元之后的网络结构的计算量;

5.GoogLeNet

辅助分类器
目的:根据实验数据,发现神经网络的中间层也具有很强的识别能力,为了利用中间层抽象的特征,在某些中间层中添加含有多层的分类器。

如下图所示,红色边框内部代表添加的辅助分类器。GoogLeNet中共增加了两个辅助的softmax分支。

image-20240604154234248

辅助分类器作用

一是为了避免梯度消失,用于向前传导梯度。反向传播时如果有一层求导为0,链式求导结果则为0。

二是将中间某一层输出用作分类,起到模型融合作用。实际测试时,这两个辅助softmax分支会被去掉。

GoogleNet总结
(1)卷积 -> 池化 ->卷积 ->池化 -> 9个inception堆叠 (中间两个池化) -> 池化 -> dropout -> 线性层 -> softmax。用了7个模型,网络共22层。

(2)所有的卷积以及降维投影,都使用Relu()作为激活函数。

(3)将全连接层用平均池化层代替后,top-1提高了大约0.6%,之前的VGG Alex等这里都是三个全连接层。(在平均池化层之后,还是添加了一个全连接层,是为了大家做finetune(微调))

(4)最后一层依旧使用dropout防止过拟合。

(5)为了在浅层使特征更加有区分性,帮助反向传播,解决梯度消失。增加了两个辅助分类器 L=L(最后)+0.3xL(辅1)+0.3xL(辅2),测试阶段去掉辅助分类器。

image-20240604175553944

论文关键思想

论文思想

1.使用更宽更深的网络,提升网络性能;
2.用稀疏连接代替密集连接,减少计算资源需求;
3.既利用稀疏性又使用稠密计算(1ⅹ1卷积的应用),提高计算资源利用率;
4.引入了Inception,重复叠加,找到最优结构。

论文贡献:

1.引入Inception结构(融合不同的特征信息)
2.使用1×1的卷积核进行降维以及映射处理
3.添加两个辅助分类器帮助训练
4.丢弃全连接层,使用平均池化层(大大减少模型参数)

论文评价

使用Inception模块,引入并行结构和不同尺寸的卷积核,对传统的串行堆叠CNN充分分解、解耦。 加入1 x 1卷积,降低参数量和计算量。辅助分类头将梯度注入网络浅层实现正则化,实现多层次预测。 其后续变种包括BN-Inception、Inception-V2、V3、V4、Inception-ResNet、Xception。

三、Rethinking the Inception Architecture for Computer Vision – Inception V3

论文链接:Rethinking the Inception Architecture for Computer Vision

《Going deeper with convolutions》本篇论文主要是改进了Inception模块,降低了计算量的同时,增加了模型的性能。

核心点:在加宽和加深网络的同时,我们要考虑计算的效率,探索了可分离卷积和正则化去提高计算效率。

文章部分要点

2.General Design Principles—通用设计原则

原则一:要避免过度的降维和压缩特征导致特征表达瓶颈,特别是在网络的浅层。
做法:feature map 长宽大小应随网络加深缓慢减小(不能猛减)。
原因:过度的降维或者收缩特征将造成一定程度的信息丢失(信息相关性丢失)

为何特别是网络的浅层?
因为在网络的浅层丢失的原图信息还不是很多,仍然保留信息的稀疏性。如果在浅层就进行过度地压缩和降维,会对后面提取特征等工作是有负面影响的。
原则二:特征越多,收敛越快
理解:这里的特征多不是说特征图像多,而是说相互独立的特征多,特征分解的彻底。
举例:人脸特征分解成人脸、人左眼、人右眼、鼻子、嘴巴、眉毛等等独立特征会比单纯的一张大脸特征收敛的快。(赫布原理)
原则三:大卷积核的卷积之前可以先降维,这个操作并不会造成太多的损失。
原因:InceptionV1中使用的模块里有 3×3和5×5的卷积,并且在他们之前有使用1×1的卷积,这样的降维操作对于邻近单元的强相关性中损失的特征信息很少。
举例:每一层输出的feature map上每一个相邻的像素,它们的感受野是相邻且有一部分是重合的,即它们高度相关;若将它们进行1x1卷积后,特征信息是可以得到保证,因为1x1卷积后的feature map是能够实现跨通道的信息交融。
原则四:均衡网络中的深度和宽度。
深度就是指层数的多少,宽度指每一层中卷积核的个数,也就是提取到的特征数。
让深度和宽度并行提升,成比例的提升,能提高性能和计算效率。
可以让计算量在每一层上均匀分配,VGG那第一层全连接层的数据堆积就属于不均匀分配的情况。

3.Factorizing Convolutions with Large Filter Size—分解大卷积核的卷积 重点

3.1Factorization into smaller convolutions—分解成更小的卷积

方法
将一个5×5的卷积换成两个3×3卷积,同理7×7卷积可以用3个3×3卷积。

原因
相邻感受野的权值共享(共享卷积核,即卷积核内的数值都是一样的,用同一个卷积核),所以减少了很多计算量。

这种分解替代会影响网络的表达能力吗?
直观的看是可行的,从结果看也是可行的。但是要问严谨的数学原理,确实难以解释。

如果我们的目标是分解计算的线性部分,是否会建议保留第一层的线性激活性(比如5×5用2个3×3代替,那第一个3×3卷积核的非线性激活函数是否保留)?
对于分解后的激活函数,作者通过实验证明,保留对于原图的第一次3 ×3卷积的激活函数有较好效果(一层卷积变成两层了,增加了非线性变换,增强模型非线性表达能力),用BN后效果更好。

下图是实验结果图,蓝色曲线为保留ReLu函数,红色虚线为去掉第一层卷积的激活函数。

image-20240604184833039

3.2. Spatial Factorization into Asymmetric Convolutions—非对称分解卷积

将3x3卷积可分解为1x3和3x1两个不对称卷积(空间可分离卷积)

流程如下图:

假设原始为3×3的图,先使用3× 1的卷积核去卷积,得到一个feature map,图中第二层;

然后再用1× 3的卷积核对刚才得到的feature map做卷积得到1×1的feature map,图中最上层。

image-20240604185319713

结果
在输入和输出等同的情况下,参数降低33%(将3x3卷积核分解为两个2x2卷积核,只是降低了11%)

结论
(1)这种分解 (n ×n 分解成了 n×1 和1 ×n) ,n 越大节省的运算量越大。

(2)这种分解在前面的层效果不好,使用feature map大小在12-20之间。

5.Efficient Grid Size Reduction—高效下降特征图尺寸

并行执行(卷积C+池化P),再进行feature map的堆叠。

inception并行模块结构图: 左边两路卷积,右边池化。最后再叠加,可以在不丢失信息的情况下减小参数量。

下图中,左边是从操作角度表示,右边是grid size表示,两者其实表示是相同的操作:在扩充通道的同时下采样,又保证了计算效率。

image-20240604190218687

7.Model Regularization via Label Smoothing(LSR)——通过标签平滑进行模型正则化

one-hot是什么?
独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。(简单地说,就是对于多分类向量,计算机中往往用[0, 1, 3]等此类离散的、随机的而非有序(连续)的向量表示,而one-hot vector 对应的向量便可表示为[0, 1, 0],即对于长度为n 的数组,只有一个元素是1,其余都为0。因此表征我们已知样本属于某一类别的概率是为1的确定事件,属于其他类别的概率则均为0。)

one-hot缺点?
One-hot的思想是预测正确标签的概率尽可能趋向1,那么正确类别对应的分数logit会一味增加直到正无穷。
1.过拟合:因为模型使得正确标签的概率足够大,模型死记硬背;
2.降低模型的泛化能力,降低了网络的适应性;
3.鼓励模型过于自信,不计一切增大某一类的logit。

LSR是什么?
在深度学习样本训练的过程中,我们采用one-hot标签去进行计算交叉熵损失时,只考虑到训练样本中正确的标签位置(one-hot标签为1的位置)的损失,而忽略了错误标签位置(one-hot标签为0的位置)的损失。这样一来,模型可以在训练集上拟合的很好,但由于其他错误标签位置的损失没有计算,导致预测的时候,预测错误的概率增大。Label Smoothing Regularization(LSR)标签平滑正则化,机器学习中的一种正则化方法,是一种通过在输出y中添加噪声,实现对模型进行约束,降低模型过拟合(overfitting)程度的一种约束方法(regularization methed)。

LSR的实质?
标签平滑的实质就是促使神经网络中进行softmax激活函数激活之后的分类概率结果向正确分类靠近,即正确的分类概率输出大(对应的one-hot标签为1位置的softmax概率大),并且同样尽可能的远离错误分类(对应的one-hot标签为0位置的softmax概率小),即错误的分类概率输出小。

Label smooth代码实现

例: (1,0,0,0),当 e = 0.1 时,Label smooth就是(0.9,0.03333,0.03333,0.03333) 。

Label smooth是弱化正确标签,通过引入e(常量<1),也就是label_smoothing,正确答案的标签中,正确答案的概率为1 - e,非正确答案为e/(k-1),其中k表示分类的个数,k-1也可以直接替换成k。

new_labels = (1.0 - label_smoothing) * one_hot_labels + label_smoothing / num_classes

参数

label_smoothing = 0.1

num_classes = 1000

结果
Label smooth提高了网络精度0.2%

好处:正确答案会有上界,不会一直到正无穷。

客观理解:比如我们的正确标签是猫脸,但在现实中豹子、老虎的脸其实跟猫是有一定相似性的,因此也应该得到一定的分数。

InceptionV3网络结构

InceptionV3=inceptionV2+RMSProp优化+LSR+BN-auxilary

image-20240604191706007

论文关键思想

论文思想

1.卷积核分解:(1)将大的卷积核分解成小的(2)非对称分解;
2.并行执行(卷积C+池化P),再进行feature map的堆叠;
3.标签平滑(LSR)进行模型正则化;
4.辅助分类器:在本文中,作者纠正了辅助分类器的作用,靠近输入辅助分类器(加不加没有影响),但是靠近输出的辅助分类器(加上BN后)可以起到正则化的作用。

论文贡献

1.改进原有的Inception-V1结构,使得CNN模型在分类任务上获得更高的性能;
2.提出了四大设计原则;
3.分解大filters,使其小型化、多层化,提出了“非对称卷积”;
4.优化inception v1的auxiliary classifiers,并造了新的带BN的辅助分类器;
5.使用新的 inception并行模块解决了传统采样层的问题;
6.inceptionV3 = inceptionV2+RMSProp+LSR+BN-aux。

论文评价

本论文在GoogLeNet和BN-Inception的基础上,对Inception模块的结构、性能、参数量和计算效率进行了重新思考和重新设计。 提出四大设计原则,将5x5卷积分解为两个3x3卷积,将3x3卷积分解为1x3和3x1两个不对称卷积。 提出Inception V2和Inception V3模型,取得3.5%的Top-5错误率,获得ImageNet 2015图像分类竞赛亚军(冠军为ResNet)。 Inception V3具有强大的图像特征抽取和分类性能,是常用的迁移学习主干网络基模型。

卷积核分解递进图示

初始结构

image-20240604185624970

5×5卷积用两个3×3卷积替代:减少参数量

image-20240604180617045

用不对称卷积替代:减少参数量

image-20240604180839364

分解方法变体

可以理解成上面这个是在深度上分解,而下面这个是在宽度上分解。

通常应用在最后的输出分类层之前,用该模块扩展特征维度生成高维稀疏特征(增加特征个数,符合本文提出的原则二)。

image-20240604185702882

四、Deep Residual Learning for Image Recognition – ResNet

论文链接:Deep Residual Learning for Image Recognition

摘要

本文提出了一种残差学习框架,用来重构非常深的网络,使网络的训练更加简化,该框架能够将层作为输入学习残差函数,因此在学习过程中不是学习未知的函数(不是拟合一个完整的分布),而是拟合上一层网络输出的残差。

残差:预测值和真实值之间的偏差。

文章部分要点

1.introduction
模型的深度对模型最终的效果发挥着至关重要的作用,在ImageNet竞赛的参赛模型都趋向于“更深”。

问题一: 模型深度太大时,会存在梯度消失/梯度爆炸的问题,最终会导致网络难以收敛。
梯度消失/梯度爆炸概念:二者问题问题都是因为网络太深,网络权值更新不稳定造成的。本质上是因为梯度反向传播中的连乘效应(小于1连续相乘多次)。
梯度消失时,越靠近输入层的参数w越是几乎纹丝不动;梯度爆炸时,越是靠近输入层的参数w越是上蹿下跳。
解决方法:归一初始化(normalized initialization)和中间归一化(intermediate normalization)+BN,加快网络收敛。

问题二: 随着网络深度的增加,准确率达到饱和然后迅速退化,如下图所示。
网络退化概念:神经网络随着层数加深,首先训练准确率会逐渐趋于饱和;若层数继续加深,反而训练准确率下降,效果不好了。
网络退化现象:网络变深之后性能还不如浅层的网络,深层网络无论是在训练集还是测试集上误差都比浅层网络高。

为什么会出现网络退化?
由于非线性激活函数Relu的存在,每次输入到输出的过程都几乎是不可逆的,这也造成了许多不可逆的信息损失。一个特征的一些有用的信息损失了,得到的结果肯定不尽人意。说通俗一点就是中间商赚差价。层数增多之后,信息在中间层损失掉了。

ResNet:解决这种问题,用来作为骨干网络,提取特征,后面可以做检测、分类等,不只是图像,在语音、3D等方面都有很多建树,迁移能力很强。

注意:网络退化既不是梯度消失和梯度爆炸(不会收敛),也不是过拟合(训练集误差很低,而测试集很高)。

image-20240605121305184

3.Deep Residual Learning—深度残差学习

在ResNet中,残差结构的输出,也就是传递给下一层的输入是H(x)=F(x)+x,因此拟合的是残差F(x)=H(x)-x

image-20240605144413664

残差模块:shortcut connection作为恒等映射;另一条路负责拟合相对于原始网络的残差,去纠正原始网络的偏差,而不是让整体网络去拟合全部的底层映射,这样网络只需要纠正偏差。

本质
(1)加了残差结构后,给了输入x一个多的选择。若神经网络学习到这层的参数是冗余的时候,它可以选择直接走这条“跳接”曲线(shortcut connection),跳过这个冗余层,而不需要再去拟合参数使得H(x)=F(x)=x。(在神经网络中,什么都不做是非常难的,因此如果此时输入已经达到预期的最好效果,这一层中的任何变化做的都是负功)
(2)直观上看,加了恒等映射后,深层网络至少不会比浅层网络更差。
(3)在Resnet中,只需要把F(x)变为0即可,输出变为F(x)+x=0+x=x很明显,将网络的输出优化为0比将其做一个恒等变换要容易得多。

为什么H(x)=F(x)+x中F(x)为0才有效?
模型在训练过程中,F(x)是训练出来的,如果F(x)对于提高模型的训练精度无作用,自然梯度下降算法就调整该部分的参数,使该部分的效果趋近于0,这样整个模型就不会出现深度越深反而效果越差的情况了。

注:残差学习可以基于全连接层,当然可以用于卷积层。在最后的加法中就是对应channel间的两个feature map逐元素相加。同时,如果在相加时维度不统一,需要给x执行一个线性映射来匹配维度。

结果:

(1)残差网络的结构更利于优化收敛;

(2)解决了退化问题;

(3)残差网络可以在扩展网络深度的同时,提高网络性能。

Network Architectures—网络架构

Plain网络
plain网络结构主要受VGG网络的启发。 卷积层主要为3*3的卷积核,直接通过stride为2的卷积层来进行下采样。在网络的最后是一个全局的平均pooling层和一个1000类的包含softmax的全连接层。加权层的层数为34。

两条设计准则:

1.同样输出大小的特征图,有着相同数量的卷积核;
2.如果特征图大小减半,为了保证相同的时间复杂度,卷积核个数加倍。

残差网络
在plain网络的基础上,加入shortcuts连接,就变成了相应的残差网络。

如下图所示,实线代表维度一样,直接相加 。虚线代表维度不一样(出现了下采样,步长为2的卷积),使用残差网络。

调整维度的方法(两种):

1.zero-padding:对多出来的通道padding补零填充,这种方法不会引入额外的参数;
2.线性投影变换:用1*1卷积升维,是需要学习的参数,精度比zero-padding更好,但是耗时更长,占用更多内存。

image-20240605145316216

注:在网络实现过程中没有使用dropout,原因是BN和dropout不能混合使用,一山不容二虎,这两种方法单独时效果更好。有相关研究从方差偏移的角度进行了论证。

论文思想与贡献

ResNet 其实就是通过shortcut connections,将x直接传递到后面的层,使得网络可以很容易的学习恒等变换,从而解决网络退化的问题,同时也使得学习效率更高。

本文贡献

1.研究深度模型中的退化问题,提出了ResNet网络;
2.提出了残差学习,助力深度模型的学习,且没有增加学习的参数;
3.ResNet为目标检测和目标定位提供了优化思路。

ResNet解决网络退化的机理

回答1:深层梯度回传顺畅

恒等映射这一路的梯度是1,把深层梯度注入底层,防止梯度消失。

没有中间商层层盘剥。

回答2:类比其它机器学习模型

集成学习boosting,每一个弱分类器拟合“前面的模型与GT之差”。(详见下图解释)

长短时记忆神经网络LSTM的遗忘门。

Relu激活函数。(x > 0 输出x,x < 0 输出0,本质上也是一种残差,重要时输出,不要时置0)

拟合误差的理解:在下图a是初始的分类结果,从图b可以看出有两蓝和一红出错,这时着重对这三个错误分类的样本进行分类(修正上一次分类器的错误);

通过一个弱分类器得到图c的结果,这时候上次的三个错误已经被修正了,但是出现了两个蓝的样本分类错误,继续修正;

因此得到e的结果,最后把三次分类的结果集成在一起,把三次分类的决策边界划在一个图中,弱分类器变成的强分类器

image-20240605123208476

image-20240605123702328

回答3:传统线性结构网络难以拟合“恒等映射”

什么都不做有时很重要。

skip connection可以让模型自行选择要不要更新。

弥补了高度非线性造成的不可逆的信息损失。(MobileNet V2)

回答4:ResNet反向传播传回的梯度相关性好(保留相邻像素之间的相关性) 神经网络的可解释性分析,打破深度学习的黑箱子

论文链接:The Shattered Gradients Problem: lf resnets are the answer, then what isthe question?

网络加深,相邻像素回传回来的梯度相关性越来越低,最后接近白噪声。但相邻像素之间具有局部相关性,相邻像素的梯度也应该局部相关。相邻像素不想关的白噪声梯度只意味着随机扰动,并无拟合。ResNet梯度,保持了梯度相关性。

五、Densely connected convolutional networks – DenseNet

论文链接:Densely connected convolutional networks

摘要

本文引入稠密卷积网络(DenseNet),它以前馈的方式,将每层与每层都连接起来,有n(n+1)/2条连接(其中n为网络层数)。每一层都从前面的所有层获得额外的输入,并将自己的特征映射传递给后面的所有层。

ResNet和对比:

ResNet从深度方向出发,通过建立前面层与后面层之间的"短路连接"或“捷径",从而能训练出更深的CNN网络。
DenseNet从特征入手,通过对前面所有层与后面层的密集连接,来极致利用训练过程中的所有特征,进而达到更好的效果和减少参数。

image-20240605154139184

在DenseNet中,一个更激进的密集连接机制被设计用来充分利用特征。简单来说就是每一层的特征都被保存下来,在后面的每次卷积操作中用到。因此,每一层的网络结构都用到了前面的所有信息(包括卷积操作前和卷积操作后的信息)。

注意:

在Resnet网络结构中,网路的残差连接是+操作。即:两个数据规模是相同的,得到的数据跟前面的数据规模也是相同的,结果是点对点位置的相加。
而DenseNet网络中,是合并操作,直接concat来自不同层的特征图,在channel维度上连接在一起,这可以实现特征重用(即对不同“级别”的特征——不同表征进行总体性地再探索),这一特点是DenseNet与ResNet最主要的区别。(DenseNet中各个层的特征图大小是相同的,否则无法执行concat操作)

网络结构

DenseNet的网络结构主要由DenseBlock+Transition组成

DenseBlock(定义了输入输出如何连接) 是包含很多层的模块,每个层的特征图大小相同,层与层之间采用稠密连接方式。

Transition模块(控制通道数) 是连接两个相邻的Dense Block,并且通过Pooling使特征图大小降低。

DenseBlock

DenseBlock中采用BN+ReLU+3×3的Conv的结构(如下图),常规的结构顺序一般是3×3的Conv+BN+ReLU。

原因:卷积层的输入包含了它前面所有层的输出特征,它们来自不同层的输出,因此数值分布差异比较大,所以它们在输入到下一个卷积层时,必须先经过BN层将其数值进行标准化,然后再进行卷积操作。

image-20240605162111378

并且,为了减少参数,一般还会先加一个1x1conv来减少参数量,所以DenseBlock中的每一层采用BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv的结构(或者BottleNeck,如下图),也叫做DenseNet-B

image-20240605163554973

Growth rate—增长率

假设输入层特征图的channel数为k0,DenseBlock中每层经过卷积后输出K个特征图,也就是特征图的channel数为K,那么在第n层中,输入的channel数为K0+(n−1)K,,K就是网络的增长率。

通过控制k的大小,可以控制每一层特征图的channel(也就是几个特征图)输出到全局中被利用。增长率控制了每一层向全局状态贡献的新信息的数量,随着层数增加,尽管k设定得较小,DenseBlock中每一层输入依旧会越来越多。一旦写入全局状态,就可以从网络中的任何地方访问它,并且与传统的网络体系结构不同,无需将其逐层复制。

为什么DenseNet参数量很少,在有限卷积个数通过特征重用也能够有大量的特征数?
因为Dense连接的缘故,每个块的输出channel都是固定为K的,但是输出channel却在不断变多。**每个块的卷积的个数都可以固定为K,**而不用像其他网络指定卷积核的个数为128、256、512、1024等特别多。

Transition层

因为特征图在各层中的尺寸不同,不能满足concat操作的需求,因此Transition层会连接两个相邻的DenseBlock层,整合上一个DenseBlock获得的特征,缩小上一个DenseBlock的宽高,达到下采样效果,特征图的宽高减半。

Transition结构为BN+ReLU+1x1 Conv+2x2 AveragePooling,主要就是卷积和池化操作(如下图)。因此,Transition层可以起到压缩模型的作用 。

image-20240605163953975

θ是压缩因子,取值(0,1],当θ=1时,转换层的输入和输出特征数(维度)不变,即无压缩;当θ <1时,DenseNet称为DenseNet-C(文中使用θ=0.5),假如输入特征图维度为m,输出维度为⌊θm⌋;对于使用bottleneck层的DenseBlock结构和压缩系数小于1的Transition组合结构称为DenseNet-BC,后面在使用的DenseNet默认都是DenseNet-BC,因为它的效果最好。

DenseNet-B已经压缩了,为啥还要提出个DenseNet-C?
瓶颈层是指用于dense block内的H(⋅)压缩,而压缩是指在转换层进行压缩。

论文贡献

DenseNet优点如下:

1.相比ResNet拥有更少的参数数量,计算效率更高,达到同样的准确率需要更少的参数量;
2.传播与预测都保留了低层次的特征,在以前的卷积神经网络中,最终输出只会利用最高层次的特征,而DenseNet实现特征重用,同时利用低层次和高层次的特征;
3.具有一定的正则化效果,保存了低维度的特征,可以减少训练集规模较小的任务的过拟合风险;
4.由于密集连接的存在,缓解了梯度消失/爆炸和网络退化的问题,增强了信息的传播。 特征重用实现了梯度的提前传播,也至少保留了前面网络的能力,不至于变弱(最少也是个恒等变换)

不足:

特别消耗显存:由于需要进行多次Concatnate操作,数据需要被复制多次,显存容易增加得很快,需要一定的显存优化技术。因此在训练过程中,训练的时间要比Resnet作为backbone长很多。所以相对而言,ResNet更常用。

六Squeeze-and-Excitation Networks – SENet

论文链接:Squeeze-and-Excitation Networks

简介

作者的动机是希望显式地建模特征通道之间的相互依赖关系。另外,作者并未引入新的空间维度来进行特征通道间的融合,而是采用了一种全新的「特征重标定」策略。具体来说,就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。SENet的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。SE block嵌在原有的一些分类网络中不可避免地增加了一些参数和计算量,但是在效果面前还是可以接受的 。Sequeeze-and-Excitation(SE) block并不是一个完整的网络结构,而是一个子结构,可以嵌到其他分类或检测模型中。

注意力:可以被解释为一种将可用的计算资源分配偏向于信号中信息最有用的部分的方法。

什么是注意力机制?
在神经网络学习中,一般而言模型的参数越多则模型的表达能力越强,模型所存储的信息量也越大,但这会带来信息过载的问题。那么通过引入注意力机制,在众多的输入信息中聚焦于对当前任务更为关键的信息,降低对其他信息的关注度,甚至过滤掉无关信息,就可以解决信息过载问题,并提高任务处理的效率和准确性。
举个例子:我们人类第一眼看到某个区域的过程其实就是一个注意力机制的应用过程,他可以让我们的大脑更加集中在该区域,并投入更多的关注。

本文SE模块包含一个轻量级的门控机制,该机制通过以计算效率高的方式建模通道关系来增强网络的表示能力。

Squeeze-and-Excitation Blocks 结构

下图是SE 模块的玩则会那个示意图,下面来逐步分析该模块的执行过程和作用。

image-20240605192918023

3.1 Transformation(Ftr)—传统卷积操作

下图红框内部就是一个传统的卷积操作。给定一个输入 x,其特征通道数为 c1,通过一系列卷积等一般变换后得到一个特征通道数为 c2的特征图。

然后会经过三个操作来重标定前面得到的特征。

image-20240605192947873

3.2 Squeeze: Global Information Embedding(Fsq)—压缩:全局信息嵌入

第二步是Squeeze操作,如下图蓝框内所示,从空间维度进行特征压缩,每个二维的特征变成了1×1的像素点,这个点某种程度上具有全局的感受野。具体操作就是对每个通道都进行全局平均池化(GAP),最后结果就是包含全局信息的W×H×C2 的特征图被压缩成一个1×1×C2的特征向量,屏蔽掉空间上的分布信息,更好的利用通道间的相关性。

输出的维度和输入的特征通道数相匹配。

经Squeeze操作对Uc进行全局平均池化(GAP)得到特征信息分布的局部描述算子,可以理解为在该层得到的C2个特征图的数值分布情况(也就做全局信息)。

image-20240605193424286

3.3 Excitation: Adaptive Recalibration(Fex)—激励:自适应重新校准

第三步是Excitation 操作,它是一个类似于循环神经网络中门的机制,来完全捕获通道依赖关系。通过参数 w 来为每个特征通道生成权重,其中参数 w 被学习用来显式地建模特征通道间的相关性。

本文中采用两个全连接层+两个激活函数组成的结构(FC1层:ReLU (δ;FC2层:Sigmoid(σ)),用来捕获每个特征通道的权重值(输出个数和输入个数是相同的)。

基于特征通道间的相关性,每个特征通道生成一个权重,用来代表特征通道的重要程度。由原本全为白色的C2个通道的特征,得到带有不同深浅程度的颜色的特征向量(如下图橙框内所示),代表了不同的重要程度。

image-20240605194830952

经过Excitation得到的权重向量,就是这篇文章的核心,代表了哪些特征是更应该被关注的,也就是注意力机制的体现。通俗的讲,在人感知周围世界的时候,你会很主要关注其中的一些内容,而这些内容和你想看到,想感知到的东西有关,这个东西叫做goal——目标,你的注意力就会被这个目标来牵引着走。

同时需要注意, 在具体执行过程中有一个缩放参数r(如下图),在文中取的是16,这个参数的目的是为了减少channel个数从而降低计算量。

image-20240605195745338

加入全连接层的作用?
这是为了利用通道间的相关性来训练出真正的scale。一次mini-batch个样本的squeeze输出并不代表通道真实要调整的scale值,真实的scale要基于全部数据集来训练得出,而不是基于单个batch,所以后面要加个全连接层来进行训练。(融合各通道的feature map信息,因为前面的squeeze都是在某个channel的feature map里面操作。)

为什么加两个全连接层?
应该是类似bottleneck的设计,增加非线性(model capacity),减少参数和运算量,不压缩的话这块儿的参数量和运算量会多r^2倍,比如1024个特征到1024个特征,直接全连接运算量是1024×1024,如果中间插入一个256层,那么它的运算量是1024×256×2,运算量降低了一半。
这样做比直接用一个 Fully Connected 层的好处在于:1)具有更多的非线性,可以更好地拟合通道间复杂的相关性;2)极大地减少了参数量和计算量。然后通过一个 Sigmoid 的门获得 0~1 之间归一化的权重,最后通过一个 Scale 的操作来将归一化后的权重加权到每个通道的特征上。

为什么前面用ReLU激活,后面为什么要改用Sigmoid呢?
1.具有更多的非线性:可以更好地拟合通道间复杂的相关性;
2.极大地减少了参数量和计算量:降维参数 r 用于控制第一个FC层中的神经元个数,在论文中也是经过多次对比实验得出r=16 时,模型得到的效果是最好的;
3.由于Sigmoid函数图像的特点,它的值域在0—1之间,那么这样很符合概率分布的特点,最后能够获得 在0—1 之间归一化的权重参数,这样的话再通过乘法逐通道加权到先前的特征图上,使得有用的信息的注意力更趋向于1,而没有用的信息则更趋向于0,得到最后带有注意力权重的特征图。

3.4 Scale:Reweight(Fscale )—权重

最后是一个 Reweight 的操作,将 Excitation 执行后得到的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上(具体操作W×H×C2的每个通道上的每个像素点分别乘上对应的权重),完成在通道维度上的对原始特征的重标定。

SENet通常作为一个即插即用的模块嵌入到现有的网络中,也就是我们经常说的给网络中的某个模块增加注意力机制。

image-20240605200946579

论文思想与贡献

核心思想:增强有用信息,抑制不重要信息,具体通过Squeeze和Excitation操作实现。

具体贡献

1.引入了一种叫做SE block的新的结构单元,它能够建模特征图通道间的相互依赖关系;
2.用来增强CNN的表征质量;
3.基于深度学习网络提出了注意力机制;
4.该模块可以很容易到嵌入到大多数CNN,任何层次,任何深度,从早期阶段到后期阶段都可以嵌入,即插即用。

七、Aggregated Residual Transformations for Deep Neural Networks – ResNeXt

论文链接:Aggregated Residual Transformations for Deep Neural Networks

简介

本文提出了一个简单架构,采用 VGG/ResNets 重复相同网络层的策略,同时借鉴Inception的多分枝结构,在每层网络中通过拆分、转换、合并最后得到特征图。简单来说,ResNeXt模型就是采用ResNets(网络重复)+ Inception(Split + Transfrom + Merge)的策略,形成的结构简单、参数量少、性能良好的多分枝网络。

image-20240605223745234

文章重要内容笔记

Inception回顾

Inception系列:采用多分支结构Split- Transform-Merge(分割-变换-聚合)

1) Split:将向量x分成低维嵌入表示;(由1x1卷积降维)

2) Transform:每个低维特征经过一个线性变换;(再由3x3或者5x5的卷积进一步提取特征)

3) Merge:通过单位加合成最后的输出;(最后拼接各分支的特征)

不足:每个映射变换要量身定制卷积核数量、尺寸,模块在每一阶段都要改变。尤其将 Inception 模型用于新的数据或者任务时如何修改并不清晰。(对输入维度和输出维度的定制困难)

3.1. Template—模型

模型设计两个原则

(1)如果输出的空间尺寸一样,那么模块的超参数(宽度和卷积核尺寸)也是一样的。

(2)每当空间分辨率/2(降采样),则卷积核的宽度*2。这样保持模块计算复杂度。

32 指进入网络的第一个ResNeXt基本结构的分组数量C(即基数)为32

4d 表示depth即每一个分组的通道数为4(所以第一个基本结构输入通道数为128)

可以看到ResNet-50和ResNeXt-50(32x4d)拥有相同的参数,但是精度却更高。

3.2. Revisiting Simple Neurons—回顾单个神经元

单个神经元是构建全链接和卷积网络层的基础元素。

具体操作:

分割(Splitting): 把输入x分解为D个元素,可以理解为低维嵌入。

变换(Transforming): 每个元素进行变换,乘权重wi进行缩放。

聚合(Aggregating): 对D个变换后的结果进行求和。

image-20240605223808487

3.3. Aggregated Transformations—聚合变换

在本文中,对变换函数的设计进行了简化:每个分支的拓扑结构都是相同的,从下图可以看出来,纵向每个结构是一样的。

具体操作

Splitting: 通过1×1卷积实现低维嵌入,256个通道变成4个通道,总共32个分支(cardinality = 32)

Transforming: 每个分支进行变换(对网络层对数据操作)

Aggregating: 对32个分支得到的变换结果—特征图,进行聚合

image-20240605224737033

这里cardinality 是一个重要参数,表示分支的数量,通过简化设计策略,可以很容易得到cardinality;另外还有一个重要参数width,表示了网络的宽度,在进行网络设计时需要结合实际情况对cardinality和width进行调整。

对于这个结构本文还衍生出了其他两种等价的结构,如下图(a)、(b)和©都是等价的,(a)和(b)很好理解,都是先分割,然后单独卷积,(a)是升维后再相加,(b)是进行concat后再进行升维(注意相加维度是不变的,因此(a)第一次相加后维度还是256,而(b)concat维度是改变的4×32=128,升维是从128升到256)

image-20240605225255978

©是分组卷积。将各分支的第一个1×1卷积融合成一个卷积,此时已经降维成128维度;

再通过3×3卷积采用group(分组)卷积的形式,分组数cardinality为32,分组操作可以看下图,对卷积核进行分组,每组负责对不同的维度卷积,其实就是分割维度,最后再把各组从维度方向进行拼接,即做concat操作,那么(128,3×3,128)就很好理解,其实就是(b)中的第二行和第三行操作,是完全等价的。接着通过1x1卷积对它进行升维,最后将它的输出与我们的输入进行相加得到最后输出。

image-20240605230909386

分组操作的优点

1.减少参数量,分成G组,则该层的参数量减为原来的1/G;
2.让网络学习到不同的特征,每组卷积学习到的特征不一样,获得更丰富的信息;
3.分组卷积可以看做是对原来的特征图进行了一个dropout,有正则的效果。

三个结构为什么等价?
(1)b和c等价

第一层:

过程:首先从(b)到©这个过程,对于(b)中第一层通过包括32个分支,每个分支(path)卷积核个数为4的1x1卷积,对于每个path而言它的卷积核大小都是1x1,channel为256,又由于我们path的个数为32,就可以简单将他们合并在一起,变为( c)图中第一层了。

参数:

(b)第一层 256×1×1×4×32=32768

(c)第一层 256×1×1×128=32768

第二层:

过程:和group卷积其实是一样的,对于每个path可以理解为一个group,每个组的输入输出channel为原来的1/group,对于每个组采用3x3的卷积核,卷积之后将特征矩阵进行concate拼接,所以图(b)第二层也是与图©第二层 group为32的组卷积也是等价的。

参数:

(b)第二层 4×3×3×4×32=4608

(c)第二层 128/32×3×3×128 = 4608

(2)a和b等价

过程:在(a)中,4维特征图通过1x1卷积变为256维,然后32个256维数据求和,而在(b)中,是先将4维数据concat成128维,在利用1x1卷积,实际上也就是求和过程。

参数:

(a)第三层 4×1×1×256×32=32768

(b)第三层 128×1×1×256 = 32768

论文贡献

1.提炼VGG、ResNet和Inception系列的优秀思想,结合得到一个新的优秀网络结构;
2.处理相同尺寸的特征图时,采用同样大小、数量的卷积核,由于拓扑结构相同,超参数也减少了,便于模型移植;
3.特征图分辨率长宽降低2倍时,特征图通道数(卷积核数量)翻倍;
4.提出cardinality来衡量模型复杂度,实验表明cardinality比模型深度、宽度更高效。

本文图片素材和部分笔记内容摘录自同济子豪兄路人贾’ω’霹雳吧啦Wz等几位大佬。


赶在端午之前论文笔记整理完,终于能好好过个节了!

端午快乐!!!

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值