Skip to content

Windxy/Classic_Network_PyTorch

Repository files navigation

Classic_Network_PyTorch

Using PyTorch to Rebuild Classic Deep Learning Network

用PyTorch重建经典的深度学习网络(注释版)

环境 requirement

pytorch == 1.2.0+

介绍 Introduction👍

名称 时间 亮点 paper链接 code链接
LeNet 1998 1.最早提出的的卷积神经网络模型,应用于手写数字分类任务
2.解释了CNN网络的主要部件包括,输入层+卷积层+池化层+全连接层+输出层
3.总结CNN三大特性核心思想:局部感受野(local receptive fields)、权值共享(shared weights)、下采样(sub-sampling)
4.稀疏连接矩阵避免了巨大的计算开销
paper-LeNet code-LeNet
AlexNet 2012 1.首次提出ReLU激活函数
2.引入局部响应归一化 LRN(Local Response Normalization) 对局部神经元的活动创建竞争机制,使其中响应比较大对值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力
3.提出数据增强(Data augmentation)和Dropout来缓解过拟合(Overfitting)
4.使用双GPU进行网络的训练
paper-AlexNet code-AlexNet
VGG16 2014 1.使用了更小的3x3卷积核,和更深的网络(两个3x3卷积核的堆叠相对于5x5卷积核的视野,三个3x3卷积核的堆叠相当于7x7卷积核的视野。这样一方面可以有更少的参数;另一方面拥有更多的非线性变换,增加了CNN对特征的学习能力。
2.使用可重复使用的卷积块来构建深度卷积神经网络引入1x1的卷积核,在不影响输入输出维度的情况下,引入非线性变换,增加网络的表达能力,降低计算量。
3.采用了Multi-ScaleMulti-Crop方法来训练和预测。可以增加训练的数据量,防止模型过拟合,提升预测准确率。
paper-VGG16 code-VGG16
NiN 2014 1.使用全局平均池化来代替全连接层,不容易过拟合,且参数更少
2.在卷积层后加入两个核大小为1×1卷积层,1×1卷积增加了非线性
3.交替使用NiN块和步幅为2的最大池化层,逐步减小高宽和增大通道数
paper-NiN code-NiN
ResNet18 2015 1.首次提出残差学习框架,利用残差结构让网络能够更深、收敛速度更快、优化更容易,同时参数相对之前的模型更少、复杂度更低
2.解决深网络退化(而非梯度消失/爆炸,这个问题已经通过normalized initialization and intermediate normalization layers等方式得到解决)、难以训练的问题
3.适用于多种计算机视觉任务
4.神经网络层数越多,效果不一定越好
paper-ResNet code-ResNet
GoogLeNet 2015 1.引入稀疏特性,提出Inception结构,融合不同感受野大小的特征信息,也就意味着不同尺度特征信息的融合
2.使用1×1的卷积进行降维同时降低参数量,GoogLeNet参数为500万个,为AlexNet参数的1/12,VGG的1/3
3.所有卷积层据使用ReLu激活函数;移除全连接层,像NIN一样使用Global Average Pooling,最后添加一个全连接层
4.相对浅层的神经网络层对模型效果有较大的贡献,训练阶段通过对Inception(4a、4d)增加两个额外的辅助分类器来增强反向传播时的梯度信号,同时避免了梯度消失,辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中,相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个网络的训练很有裨益。而在实际测试的时候,这两个额外的softmax会被去掉
paper-GoogLeNet code-GoogLeNet
HighwayNet 2015 1.受LSTM的灵感,基于门机制引入了transform gate T(x.WT)和carry gate C(x,WT),使得训练更深的网络变为可能,并且加快了网络的收敛速度
2.借用随机梯度下降策略就可以很好地进行训练(而且很快),在反向传播梯度计算的时候,部分参数为一个常系数,避免了梯度的消失,保留了关键的信息
paper-HighwayNet code-HighwayNet
DenseNet 2018 1.提出Dense块,引入了相同特征图尺寸的任意两层网络的直接连接,特点是看起来非常“密集”,特征重用
2.更强的梯度流动。由于密集连接方式,DenseNet提升了梯度的反向传播,使网络更容易训练
3.参数更少,DenseNet有效的降低了过拟合的出现,易于优化,加强了特征的传播
paper-DenseNet code-DenseNet
Inception-V3 2015 1.对于GoogLeNet网络中提出的inception结构(inceptionV1) 进行改进
2.InceptionV2:用两个 3 x 3 的卷积代替 5×5的大卷积。使用BN (BatchNormalization )方法
3.InceptionV3:提出了更多种卷积分解的方法,把大卷积因式分解为小卷积和非对称卷积
4.引入Label Smoothing,提升模型性能
paper-InceptionV3 code-InceptionV3
Inception-V4 2016 1.整个结构所使用模块和InceptionV3基本一致
2.初始的InceptionV3:3个InceptionA+5个InceptionB+3个InceptionC
3.InceptionV4:经过4个InceptionA+1个ReductionA+7个InceptionB+1个ReductionB+3个InceptionC
4.在InceptionV3原始结构的基础上增加了ReductionA和ReductionB模块,这些缩减块的加入是为了改变特征图的宽度和高度,ReductionA:尺寸从35×35缩减到17×17;ReductionB尺寸从17×17缩减到8×8。早期的版本并没有明确使用缩减块,但也实现了其功能。
paper-InceptionV4 code-InceptionV4
SqueezeNet 2016 1.主要目的是为了在达到当前主流网络的识别精度的基础上降低CNN模型的参数数量,简化网络复杂度
2.SqueezeNet在保持和 AlexNet同样的准确度上,参数比它少50倍
3.使用三个策略达到目标:1、大量使用1x1卷积核替换3x3卷积核,因为参数可以降低9倍;2、减少3x3卷积核的输入通道数(input channels),因为卷积核参数为:(number of input channels) * (number of filters) * 3 * 3;3、延迟下采样,可以给卷积层提供更大的激活图:更大的激活图保留了更多的信息,可以提供更高的分类准确率。1和2可以显著减少参数数量,3可以在参数数量受限的情况下提高准确率
4.定义了自己的卷积模块Fire Module,分为squeeze层和expand层,squeeze层只使用1×1卷积(策略1),还可以限制输入通道数量(策略3)
paper-SqueezeNet code-SqueezeNet
SE-Net(Squeeze and Excitation Network) 2017 1.引入了注意力Squeeze-and-Excitation(SE)模块
2.由于SE模块简单有效,因此可以很容易的和其他模型耦合,和ResNet耦合变成SE-ResNet,和Inception-V3耦合变成SE-Inception-V3等
paper-SENet code-SENet
MobileNetv1 2017 1.提出深度可分离卷积,即DepthWise+PointWise两种卷积方式,在性能没有急剧降低的情况下,大大降低了网络参数量
2.引用ReLU6作为激活函数,在低精度计算下能够保持更强的鲁棒性
paper-Mobilenet code-MobileNetv1
MobileNetv2 2018 1.提出反向残差块(Inverted residual block),提高了内存使用的效率,反向残差块结构相比于MobileNetV1的残差结构可以提取更多特征,线性瓶颈替代非线性ReLU可以减小特征损失。 paper-Mobilenetv2 code-Mobilenetv2
MobileNetv3 2019 1.V3在depwise conv之后,引入了SE机制的attention模块。2.基于准确性和模型容量的平衡,V3在不同stage的激活函数是不一样的,前面的stage使用RELU,后面的stage使用hard-swish,而V2一直使用RELU6作为激活函数 paper-Mobilenetv3 code-MobileNetv3
ShuffleNet 2017 1.轻量级网络,提出channel shuffle以解决group convolution带来的“信息流通不畅”问题 paper-ShuffleNet code-ShuffleNet
ResNeXt 2017 1.提出aggregrated transformations(聚合变换),用一种平行堆叠相同拓扑结构的blocks代替原来ResNet的三层卷积的block(类似Inception架构),在不明显增加参数量的情况下提升了模型的准确率,同时由于拓扑结构相同,超参数也减少了,便于模型移植。 paper-ResNeXt code-ResNeXt
Xception 2017 1.极端 Inception (Xception):Xception 是“Extreme Inception”的缩写,意味着该模型采用了更加极端的Inception结构。与Inception V3相比,其不再假设跨空间位置和跨通道之间存在相关性。
2.高效率与高准确率:由于其特殊设计,Xception网络能够以较少的参数提供与其他复杂模型相当或更好的表现,并且对内存需求也较小。
3.转移学习能力强:Francois Chollet在他们论文中指出,在ImageNet数据集上预训练过后, Xception可以用于各种下游任务,并取得很好效果。
4.全局平均池化层:最后一个卷积层后面接全局平均池化层而不是全连接层, 这样可以大幅降低模型大小并防止过拟合.
5.通过添加残差连接提高训练稳定性: Xception网络每个module之间都添加了shortcut connection, 这样可以使得梯度直接反向传播到浅层网络, 提高训练稳定性.
paper-Xception code-Xception
CBAM(Convolutional Block Attention Module) 2018 1.CBAM表示卷积模块的注意力机制模块,是一种融合通道和空间注意力的注意力模块,沿着空间和通道两个维度依次推断出注意力权重,再与原图相乘来对特征进行自适应调整
2.在SENet或ECANet的基础上,在通道注意力模块后,接入空间注意力模块,实现了通道注意力和空间注意力的双机制
3.注意力模块不再采用单一的最大池化或平均池化,而是采用最大池化和平均池化的相加或堆叠。通道注意力模块采用相加,空间注意力模块采用堆叠方式。
paper-CBAM code-CBAM
self-attention 2017 1.长距离依赖性处理:Self-Attention可以有效地捕获序列中的长距离依赖关系。传统的循环神经网络(RNN)在处理长距离依赖性时可能会遇到困难,但Self-Attention可以直接关注到任何两个位置之间的交互。
2.并行计算:与RNN等顺序处理模型不同,Self-Attention允许模型同时对所有位置进行计算,并且每个位置都考虑了其它所有位置的信息。这使得Self-Attention在GPU等并行硬件上具有更好的效率。
3.解释性强:通过查看attention权重分布,我们可以直观地理解模型做出某些预测时所关注的输入部分。
4.多头注意力机制(Multi-head attention): 这是一种扩展形式,在Transformer模型中被广泛使用。多头注意力允许模型同时学习不同类型、不同级别上下文信息。
5.驱动Transformer和BERT等先进模型:无论是NLP还是CV领域, Self-Attention都发挥了巨大作用, 它是构成Transformer网络结构核心部分,并且推动了BERT、GPT等预训练语言模型取得突破性进展。
6.减少计算复杂度: 在某些场景下,例如处理非常长序列数据时, 可以使用如局部自注意力(Local self-attention)或者稀疏自注意力(Sparse self-attention)等策略来降低计算复杂度.
paper-SelfAttention code-SelfAttention
Vision Transformer 2020 1.首次将NLP中的Transformer架构引入到图像中
2.第一步将图像分为多个patch
3.第二步引入cls_token嵌入向量,代表分类类别,和position encoding位置编码,以确定每个表征向量的位置
4.第三步送入transformer,该结构由encoder-decoder架构构成,分别都由6个自注意力和前馈神经网络构成
5.最后再送入一个前馈神经网络头中。
paper-ViT code-ViT

About

Using PyTorch to Rebuild Classic Deep Learning Network

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages