综述
LeNet:5层轻量级网络,一般用来验证小型数据;经典的手写数字识别模型
AlexNet/VGGNet:把网络层数加深;
GoogLeNet/Inception:结合1x1卷积并采用带有不同kernel和池化的多分支策略进行特征提取;
ResNet:Residual block,使训练更深层的网络变得可能;
RexNeXt:引入组卷积,在精度基本不降的情况下速度超过ResNet;
DenseNet:主要是特征复用的思想,参数量虽小计算量不敢恭维;
Res2Net:基于ResNet引入多尺度;
SENet:基于通道矫正,强化重要特征,抑制非重要特征,重点是轻便可以随意嵌入;
SKNet:引入特征图注意力,使卷积核的感受野能够自适应
DCNet:引入可变形卷积,提高了泛化能力;
SqueezeNet、ShuffleNet、MobileNet:轻量级网络;
CSPNet:利用跨阶段特征融合策略和截断梯度流来增强不同层次特征的可变性解决冗余梯度信息,提高推理速度;
EfficientNet:E0-E7的进化之路号称无人能敌,配合谷歌刚出的Lite,实现精度、延迟两不误的移动端新SOTA;
RegNet:FBAI力作,号称超越EfficientNet,GPU上提速5倍的神作;
ResNeSt:刚出来的Backbone,乍眼一看是一个ResNeXt和SKNet的结合体,论文写着刷爆各大榜单;具体效果还未使用不从得知,直观感觉是个好的神器,留待时间去考证
LeNet-5

网络结构如上,基本不会用到,了解即可
AlexNet
- 成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。
- 训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。
- 在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
- 出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。(后来好像被证明没用)
- 用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。AlexNet使用了两块GTX 580 GPU进行训练,单个GTX 580只有3GB显存,这限制了可训练的网络的最大规模。因此作者将AlexNet分布在两个GPU上,在每个GPU的显存中储存一半的神经元的参数。因为GPU之间通信方便,可以互相访问显存,而不需要通过主机内存,所以同时使用多块GPU也是非常高效的。同时,AlexNet的设计让GPU之间的通信只在网络的某些层进行,控制了通信的性能损耗。
- 数据增强,随机地从256256的原始图像中截取224224大小的区域(以及水平翻转的镜像),相当于增加了2*(256-224)^2=2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力。进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。同时,AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%。
Group convolution 分组卷积,最早在AlexNet中出现,由于当时的硬件资源有限,训练AlexNet时卷积操作不能全部放在同一个GPU处理,因此作者把feature maps分给多个GPU分别进行处理,最后把多个GPU的结果进行融合。
VGG-16
- 16个权重层,也是VGG16名称的来源
- conv3-64表示,kernel size为3x3,64个filter,stride=1,padding=same,池化层均为2
参数很多很大!
size一直除2,channel一直乘2
ResNet
随着网络层数增加,会出现退化degradation现象,loss饱和后反而增加了
当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果我们把低层的特征传到高层,那么效果应该至少不比浅层的网络效果差,或者说如果一个VGG-100网络在第98层使用的是和VGG-16第14层一模一样的特征,那么VGG-100的效果应该会和VGG-16的效果相同。所以,我们可以在VGG-100的98层和14层之间添加一条直接映射(Identity Mapping)来达到此效果。
从信息论的角度讲,由于DPI(数据处理不等式)的存在,在前向传输的过程中,随着层数的加深,Feature Map包含的图像信息会逐层减少,而ResNet的直接映射的加入,保证了
层的网络一定比
层包含更多的图像信息。
$x_{l+1}=x_l+F(x_l,W_l)$

左边的叫Basic block,右边的叫Bottleneck block

这张图tql太厉害了!!!

ResNet由一个输入端、四个后续阶段和输出层组成。
输入端:
减少宽和高为原来的1/4,并增加通道大小为64.
四个后续阶段Stage1、Stage2、Stage3、Stage4:
从stage2开始,先是一个下采样块,然后剩下的是残差块。每个bottleneck最后一个卷积的输出通道都是前两个的四倍。
人们可以在每个阶段改变剩余残差块的数量,以获得不同的ResNet模型,如ResNet-50和ResNet-152,其中的数字表示网络中卷积层的数量。

ResNet-B
修改了下采样顺序。将下采样操作放到非1 × 1卷积层。1 × 1卷积层等价于对输入feature maps沿着channel维度做加权求和,因此设置stride为2会导致丢失3/4的特征信息。对于3 × 3的卷积层,设置stride为2不会丢失特征信息
ResNet-C
1个7x7的卷积核参数量是1个3x3卷积核的5.4倍。所以用三个3x3卷积核替代一个7x7卷积核显然更好。
ResNet-D
受ResNet-B的启发,我们注意到下采样块路径B中的1 × 1卷积也忽略了3/4的输入特征映射。从经验上看,我们发现在卷积前添加一个stride=2的2×2平均池化层,将1x1卷积stride改为1,在实际应用中效果很好,对计算成本的影响很小。
GoogleNet/InceptionV3
https://zhuanlan.zhihu.com/p/36878362
在Inception网络中,作者提出利用2个3×3卷积核的组合比1个5×5卷积核的效果更佳,同时参数量(3×3×2+1 VS 5×5×1+1)被降低,因此后来3×3卷积核被广泛应用在各种模型中。
怎样才能减少卷积层参数量?– Bottleneck 1x1卷积核
每层卷积只能用一种尺寸的卷积核?– Inception结构
Xception
卷积操作时所有通道都只能用同一个过滤器吗?– DepthWise操作
DenseNet
https://blog.csdn.net/u014380165/article/details/75142664
https://zhuanlan.zhihu.com/p/43057737
DCNet
卷积核形状一定是矩形吗?– Deformable convolution 可变形卷积核
SqueezeNet
通道间的特征都是平等的吗? – SEnet