野心大一点,把各种常见的网络结构收录进来。

LeNet-5(1998)

  • LeNet 可能是最简单的 CNN 网络,也是 CNN 的开创基石。

  • LeNet-5 是 LeNet 系列最新的卷积神经网络,当时设计出来是为了识别机器所打印的字符。

AlexNet(2012)

  • AlexNet 第一次使用是在2012年的比赛中,并超过第二名 SVM 10.9个百分点。
  • 使用了更深的网络,一共包含5个卷积层和3个全连接层,在前两层的全连接层中使用了 Dropout。
  • 使用 LRN ,也就是局部响应归一化:LRN 是对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得更大,并抑制其他反馈较小的神经元。这样可以增强模型的泛化能力,同时使用归一化可以加速收敛。
  • 用了两个分支,因为当时 GPU 的显存限制,在最后的全连接层进行了特征融合,这也是第一次使用 GPU 进行网络的加速训练。
  • 使用了 ReLU 激活函数,而不是传统的 sigmoid、tanh。
  • 使用了数据增强。

VGGNet(2014)

  • VGG16 相比 AlexNet 的一个改进是采用连续的几个 3x3 的卷积核代替 AlexNet 中的较大卷积核,如 11 x 11,7 x 7,5 x 5。对于给定的感受野,即与输出有关的输入图片的局部大小,采用多个的小卷积核堆积起来是比直接采用一个大的卷积核效果要好,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且参数更少。
  • 使用了更小的卷积:3 x 3 大小、1 x 1大小的卷积核。小卷积核的感受野很小,因此可以把网络加得更深,同时使用多个小卷积核也能减少网络的参数量。
  • 可以通过两个 3 x 3 的卷积替代一个 5 x 5 的卷积,三个 3 x 3 的卷积替代一个 7 x 7 的卷积。
  • 提出感受野概念,即一个 feature map 上的一个单元对应回输入层中的区域大小。
  • VGGNet 分为 A、A-LRN、B、C、D、E 五种网络,这是为了解决当时初始化网络权重的问题,VGG 使用的是预训练的方式,即先训练一部分小网络,然后确保这部分网络收敛之后再在这个基础上逐渐加深。并且当网络在 D 阶段 (VGG-16) 效果是最好的,E 阶段 (VGG-19) 次之。另外,VGG-16 指的是网络的卷积层和全连接层的层数为16层,同理其他网络结构也是如此。
  • 简单来说,在 VGG 中,使用了3个 3 x 3 卷积核来代替 7 x 7 卷积核,使用了2个 3 x3 卷积核来代替 5 x 5 卷积核,这样做的主要目的是在保证具有相同感受野的情况下,加深了网络深度,在一定程度上可以提升卷积神经网络的准确率。  

Inception系列

Inception v1(2014)

  • Inception 是由谷歌提出的,所以也叫 GoogLeNet。引入了 Inception 模块:可以融合不同尺度的特征信息。
  • Inception 模块一共使用了4种不同大小的卷积核对输入特征图进行了特征提取。模块中的卷积步长都是1,另外为了保证特征图的大小一致,因此都设置了方式为 Same 的 padding。
  • 每个卷积层后面都接了 ReLU 激活函数。在输出前有一个 concat层,它将4组不同类型但大小相同的特征图堆叠在一起,来获得最终的输出特征图。
  • 使用 1x1 卷积进行通道数的变化以及增加非线性作用,同时减少了参数量。
  • 添加两个辅助分类器帮助训练,其中使用两个辅助的 softmax 分支有两点作用:
  • 一是为了避免梯度消失,用于向前传导梯度。如果在反向传播时有一层求导为0,那么之后的链式求导都为0。
  • 二是将中间某一层的输出当做分类,这样可以起到模型融合的作用。最后的 $loss = loss_2 + 0.3 * loss_1 + 0.3 * loss_0$。注意,在推理时,这两个辅助 softmax 分支都会被跳过。
  • 丢弃了全连接层,进而是使用平均池化层代替。研究发现,AlexNet 的最后三个全连接层的参数量占了总参数量的90%,作了移除代替操作后,发现这种方式实现的精度更高,推理也更快。

Inception -v2(2015)

  • 提出了 BN 层,每个卷积层后面都有 BN 层。

  • BN 论文提到:当使用 BN 进行训练时,可以看到一个训练示例与 mini-batch 中的其他示例一起出现,并且训练网络不再为给定的训练示例生成确定性值。 在我们的实验中,我们发现这种效果有利于网络的泛化。 虽然 Dropout 通常用于减少过拟合,但在批量归一化网络中,我们发现它可以被移除或降低强度。

  • 与 VGG 一样,通过堆叠多个小卷积来代替一个大卷积,并获得了相同大小的卷积核。

 

Inception v3(2015)

 

Inception v4(2015)

 

Xception(2015)

Inception 系列的 trick

  • 采用了标签平滑:以前构造标签的时候实际是哪一类就置1,其他类的都置为0,不够平滑,学习时就会比较艰难,而且容易导致过拟合。而标签平滑就是给真实标签一个最大值,但是也会按照概率给其他类别一些值。

  • 使用了合适的下采样方法:把特征图拆成两个部分,一部分直接进行池化来下采样,一个做两层 3 x 3 卷积的下采样,最后再把两种信息结合到一块,这样通过分开的方式相对于以前的方法可以挖掘到更多不同的信息。  

ResNet(2015)

按照传统堆叠网络的思路:如果构建更深的网络,那么网络的准确性就会越高,可是实际并不是这样。如下图,当堆叠更深的网络时,发现深网络的准确率比浅网络的准确率还要低。

image.png
image.png

按照传统方法来堆叠网络会有以下缺点:

  • 梯度消失/爆炸在一开始就会影响网络的收敛,进而导致网络难以收敛。虽然通过合适的初始化权重方式以及加入 BN 层可以解决。

  • 当构建更深的网络时,网络会出现退化现象,也就是随着网络深度的增加,准确率会达到峰值,然后逐渐下降,但是这种下降并不是由于过拟合引起的。

所以针对以上退化问题,就提出了残差结构,来解决难以优化网络的问题。

残差网络是通过构建恒等映射来处理网络的输入输出。原先的网络输入为$x$,网络输出为 $H(x)$。现在我们令 $H(x) = F(x) + x$,我们希望残差网络只需要学习这个残差 $F(x) = H(x) - x$。作者认为,学习残差 $F(x) = H(x) - x$ 会比直接学习原始特征 $H(x)$ 更快。

在残差网络中,提出了 residual 层,通过堆叠这些非线性层来拟合残差。这里还提出了快捷连接,快捷连接可以很好地执行恒等映射,并将其输出添加到堆叠层的输出。恒等快捷连接既不增加额外的参数也不增加计算复杂度。

image.png
image.png

ResNet 主要有五种不同的大小的网络,分别是:Resnet18,Resnet34,Resnet50,Resnet101,Resnet152;它们都遵循上述的结构来进行搭建,网络之间的不同主要在于中间卷积部分的block参数和个数存在差异。

Resnet18 和 Resnet34 属于小网络,搭建的时候使用左下角的结构,而使用 Resnet50,Resnet101,Resnet152 这一些大网络时,则使用右下角的结构,目的是减少运算量。

image.png
image.png

ResNet的后续改进

ResNet-B / C / D

  • ResNet-B 改进了下采样部分,来减少信息流失。为了维度一致,在每个 stage 的第一个 conv 都有下采样的步骤,所以数据进来后会先经历一个 stride = 2 的 1 x 1 卷积,将特征图的尺寸先减小为原先的一半。但是 1 x 1 卷积和 stride = 2 同时使用会导致输入特征图 3 / 4 的信息被遗漏,也就是不会被利用,因此 ResNet-B 的改进就是将下采样移到后面的3 x 3卷积里边,这样可以避免大量的信息流失。

  • ResNet-C 将网络一开始输入的 7 x 7 大卷积核换成3个 3 x 3 卷积核。

  • ResNet-D 则是在 ResNet-B 的基础上将 identity 部分的下采样交给 avgpool 去做。这样可以避免因 1 x 1 卷积和 stride 的同时出现所造成的信息流失。

Res2Net

ResNeXt(2016)

  • 传统的要提高模型的准确率,都是加深或加宽网络,但是随着超参数数量的增加(比如 channels ,filter size 等等),网络设计的难度和计算成本也会增加。因此提出的 ResNeXt 结构可以在不增加参数复杂度的前提下提高网络的准确率,同时还减少了超参数的数量。

  • ResNeXt 的本质还是分组卷积,通过改变变量基数来控制组的数量。分组卷积是介于普通卷积以及深度可分离卷积的一种折中方式,不是为每个 channel 都单独赋予一个独立的卷积核,也不是整个 feature map 都使用同一个卷积核。

  • Inception 系列网络有个问题:网络的超参数设定并不太通用,当应用在别的数据集上时需要修改许多参数,因此可扩展性一般。而 ResNext 不需要像 Inception 那样人为设计复杂的细节结构,而是每一个分支都采用相同的拓扑结构。

  • 作者归纳出了一个很通用的抽象程度很高的标准范式:split-transform-merge,是指通过在大卷积核层两侧加入 1 x 1 的网络层来控制核个数,以减少参数个数的方式。

  • 该体系结构采用 VGG / ResNet 的重复层策略,同时采用简单,扩展性高的方式:拆分转换合并策略,也就是上文提到的 split-transform-merge。网络中的一个模块执行一种转换,每个转换都是在低维的维度下进行,最终输出通过求和进行汇总。在不同的重复层之间使用 stride=2 进行降维,同时核函数的个数也会乘以2。

  • 补充ResNeXt 图像

ResNeSt(2020)

  • ResNeSt 全名叫做 Split-Attention Networks,使用了模型的拆分注意力网络。

  • split(multi - brach),也叫分组再拆。即在同一层中使用多个卷积核来分别提取多样化的特征。

    • 这里使用两个拆分方式:cardinality 和 radix。首先会平均分成 k 个 cardinality,之后再分成 R 个 radix,因此最后特征图的数量是G = K x R 。

    • cardinality 层级:调整 Conv2d 中的 groups 参数将输入特征分成 Cardinality = K 组。

    • radix 层级:先使用了一个 3 x 3 的 conv2d 将通道数增加到 channels * radix 后,再用 split 将特征层分成 radix 组再给后面输入。

  • Channel-attention:引入软注意力机制实现特征通道之间的权重分配,这里使用 r-softmax 来计算权重,最后把每一组所对应的特征层与 atten 系数相乘再求和。

  • split-attention block:在 SplAtConv2d 模块中包括三组 conv2d,其中卷积核分别为 3 x 3, 1 x 1, 1 x 1,通道数为 64 -> 128, 64 -> 32, 32 -> 128。SplAtConv2d 的运算方式:

    • 通过 conv 将通道数乘以 radix 系数;

    • 通过 split 操作将特征分成 radix 组数据 splited 特征,并将通过跨多个拆分的元素相加后进行 avg_pooling 操作得到中间 gap 特征;

    • 然后通过 fc1 压缩通道数,通过 fc2 将通道数提升到 in_channels * radix 的 atten 特征;

    • 通过split操作将 atten 分成 radix 组的 attens 特征,将 attens 与 splited 对应通道相乘,再相加最终得到与输入特征维度相同的特征层。

 

  • 平均下采样:当迁移学习的下游应用是密集的预测任务(例如检测或分段)时,保留空间信息就变得至关重要。卷积层需要使用零填充策略来处理特征图边界,这在转移到其他密集的预测任务时通常不是最佳的。 而不是在过渡块(对空间分辨率进行下采样)上使用分步卷积,因此这里使用内核大小为 3 x 3 的平均池化层。

  • 使用了以下tricks:

    • 基于 resnet-d:将第一个 7 x 7 卷积层替换为三个连续的 3 x 3 卷积层

    • 基于 resnet-d:对于步长为2的过渡块,在 1 x 1 卷积层之前,将 2 x 2 平均池化层添加到快捷连接

    • Large Mini-batch Distributed Training

    • Label Smoothing

    • Auto Augmentation

    • Mixup Training

    • Large Crop Size

    • Regularization

  • 补充框架图

 

同样值得关注的模型

DenseNet(2016)

  • 与 Resnet 进行短路连接的元素级别相加方式不同,ResNet 是通过 Add 相加,而 DenseNet 是通过 concat 不同层之间的特征图。

  • 在 DenseNet 中,对于一个 L 层的网络,那么就有 L x(L + 1)/ 2 个密集连接。由于存在密集连接,DenseNet 提升了梯度的反向传播效果,使网络更加容易训练,也使得每层都可以和最后的误差进行直通。

  • 因为 DenseNet 要进行许多连接,所以它们层与层之间的特征维度就会比较小,即网络比较窄。

  • 因为要进行 concat 连接,所以特征图大小需要保持一致,DenseNet 网络中采用了 DenseBlock + Transition连接方式。

  • DenseBlock 是包含很多层的模块,其中每个层的特征图维度都需要保持一致,以及层与层之间采用了密集连接的方式。在深层时,输入会非常大,所以 DenseBlock 会采用 bottleneck 的方式来减少参数量。主要是在原有的结构中增加 1 x 1 卷积,而 Transition 结构通过连接两个相邻的 DenseBlock,以及增加一个 pooling 来降低特征图的大小,这样起到压缩模型的作用。  

SqueezeNet(2017)——通道压缩和扩展的图像分类算法

  • 重要的轻量化模型

  • 采用 1 x 1 卷积来代替 3 x 3 卷积,减少了大约是9倍的卷积核参数数量,同时也可以改变通道数,增加网络的非线性作用。

  • 延迟网络的降采样操作。作者认为较大的 feature map 含有较多的信息,因此将降采样操作下移,这样可以保留更多的信息。注意这样的操作虽然会提升网络的精度,但是它也有一个非常严重的缺点:就是会增加网络的计算量。

  • 使用压缩扩展结构(Fire Moudule),该模块先进行压缩(Squeeze)再进行扩展(Expand)操作。 压缩部分由一系列 1 x 1 的卷积堆积而成,减少特征图数量,而扩展部分则是由一组连续的 1 x 1 卷积和一组连续的 3 x 3 卷积 concat 组成,还原特征图数量。在压缩完后,网络会再使用多个尺寸的卷积,以达到扩展的目的。  

MobileNet(2017、2018、)——深度可分离算法

  • MobileNet v1:提出了 Depthwise Separable Convolutions(深度可分离卷积)
  • MobileNet v2:提出了 Bottleneck Residual Block(瓶颈残差模块)
  • MobileNet v3:使用了 NAS 和 NetAdapt 算法搜索最优的模型结构,同时对模型一些结构进行了改进,例如在 MobileNet v2 的 Bottleneck Residual Block 基础上引入 Squeeze-and-Excitation

 

UNet 系列

#重要框架

UNet(2015)

UNet 常见改进

UNet+、UNet++、UNet3+

SwinUNet

Swin-UNet 由慕尼黑工业大学、复旦和华为于2021年5月提出1

SwinUNet
SwinUNet

TransUNet(2021)

‌‌‌‌  Chen于2021年在提出TransUNet2,比transformer和Unet都要好,可作为医学图像分割的替代方案。transformer从cnn的特征图编码图像块,作为输入序列,用于提取全局特征。解码器上采样编码特征,与高分辨率CNN特征结合,进行精确定位。

TransUNet框架图
TransUNet框架图

Attention UNet

#重要框架 Attention UNet是由等人提出的3。它是UNet非常重要的改进版本之一。

作者在摘要与简介中很清楚的表明了要解决的问题以及要达到的目标。具体如下所示:

  • 抑制输入图像中的不相关区域,同时突出特定局部区域的显著特征;

  • 用soft-attention 代替hard-attention的思路(注意:sorf-attention可微,可以微分的attention就可以通过神经网络算出梯度并且前向传播和后向反馈来学习得到attention的权重);

  • 集成到标准UNet网络结构中时要简单方便、计算开销小,最重要的是提高模型的灵敏度和预测的精度;

  • 提出attention gate的模型,它会自动学习区分目标的外形和尺寸。

思考:

目标检测中值得关注的框架

RCNN(2013)

RCNN是将CNN引入目标检测的开山之作,由Girshick在2013年提出4。 经典的目标检测算法使用滑动窗法依次判断所有可能的区域。本文则(采用Selective Search方法)预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上(采用CNN)提取特征,进行判断。

RCNN算法分为4个步骤

  1. 候选区域(region proposal)生成: 一张图像生成1K~2K个候选区域 (采用Selective Search 方法)
  2. 特征提取: 对每个候选区域,使用深度卷积网络提取特征 (CNN)
  3. 类别判断: 特征送入每一类的SVM 分类器,判别是否属于该类
  4. 位置精修: 使用回归器精细修正候选框位置

Selective Search 主要思想:

  1. 使用一种过分割手段,将图像分割成小区域 (1k~2k 个)
  2. 查看现有小区域,按照合并规则合并可能性最高的相邻两个区域。重复直到整张图像合并成一个区域位置
  3. 输出所有曾经存在过的区域,所谓候选区域

其中合并规则如下: 优先合并以下四种区域:

  • 颜色(颜色直方图)相近的
  • 纹理(梯度直方图)相近的
  • 合并后总面积小的: 保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域 (例:设有区域a-b-c-d-e-f-g-h。较好的合并方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh。 不好的合并方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh)
  • 合并后,总面积在其BBOX中所占比例大的: 保证合并后形状规则。

 

image.png
image.png

SPPNet

是由何恺明团队在2018年提出的模型4

Fast RCNN

Faster RCNN

Mask RCNN(2018)

Mask RCNN 。

ASPP