神经网络Backbone
主要有三个发展方向:
Deeper:网络层数更深,代表网络VggNet
Module: 采用模块化的网络结构(Inception),代表网络GoogleNet
Faster: 轻量级网络模型,适合于移动端设备,代表网络MobileNet和ShuffleNet
Functional: 功能型网络,针对特定使用场景而发展出来。如检测模型YOLO,Faster RCNN;分割模型FCN, UNet
神经网络基本构成
1卷积层:普通卷积 和空洞卷积(增大感受野)
2激活函数:sigmoid/softmax sigmoid函数两侧导数接近0,误差反向传播难以传递至前面网络层 relu缓解梯度消失 softmax多物体分类
3池化层 降低特征图参数量,提升速度,增加感受野(降采样)
4Dropout:防止过拟合(多模型的平均 减少神经元依赖 生物进化)
5BN层 缓解梯度消失,模型稳定
6全连接层:分类(参数大 全平均池化代替,GAP 实现降维,减少参数,特征提取与分类合并,去除全连接实现任意尺度输入图像)
Lenet-5
LeNet-5是LeCun在1998年的论文中Gradient-Based Learning Applied to Document Recognition 提出的网络模型
AlexNet
AlexNet是Alex Krizhevsky在2012的文章ImageNet Classification with Deep Convolutional Neural Networks中提出,其结构模型如下(分上下两部分卷积,计算力不足,放在两块GPU上)
AlexNet网络结构如下:
AlexNet的特色:
(1) Training on Multiple Gpus: 受于当时的算力限制,Alexnet创新地将图像分为上下两块分别训练,然后在全连接层合并在一起
(2) ReLU Nonlinearity: 采用ReLU激活函数代替Sigmoid或tanh, 解决了梯度饱和的问题
(3)Local Response Normalization: 局部响应归一化,
(4) Data Augmentation: 扩增数据,减小过拟合:第一种是 抠图(从256x256抠出224x224)加上水平反转。第二种是 改变RGB颜色通道强度。
(5) Dropout: 以一定概率舍弃神经元输出,减小过拟合
ZFNet
ZFNet是2013年的论文Visualizing and Understanding Convolutional Networks中提出,是2013年ILSVRC的冠军。
使用反卷积(Deconvnet),可视化特征图(feature map),通过可视化Alex-net指出了Alex-net的一些不足,最后修改网络结构,使得分类结果提升;是CNN领域可视化理解的开山之作,作者通过可视化解释了为什么CNN有非常好的性能、如何提高CNN性能,然后进行调整网络,提高了精度
ZFNet通过修改结构中的超参数来实现对AlexNet的改良,具体说来就是增加了中间卷积层的尺寸,让第一层的步长和滤波器尺寸更小
VGG(走向深度)
VGGNet是2014年论文Very Deep Convolutional Networks for Large-scale Image Recognition 中提出,2014年的ImageNet比赛中,分别在定位和分类跟踪任务中取得第一名和第二名,其主要的贡献是展示出网络的深度(depth)是算法优良性能的关键部分
卷积神经网络的深度增加和小卷积核的使用对网络的最终分类识别效果有很大的作用
VGG网络结构
为什么3个3x3的卷积可以代替7x7的卷积
3个3x3的卷积,使用了3个非线性激活函数,增加了非线性表达能力,使得分割平面更具有可分性,减少参数个数。
1x1卷积核的作用
不影响感受野的情况下,增加模型的非线性性
1x1卷机相当于线性变换,非线性激活函数起到非线性作用
VGGNet的特色
结构简洁
小卷积核和多卷积核
GoogLeNet(inception 纵横交错)
GoogLetNet V1是在2014年论文Going deeper with convolutions中提出的,ILSVRC 2014的胜利者。相比于VGG,其并不是单纯的将网络加深,还引入了Inception模块的概念,最终性能和VGG差不多,但参数量更少
Inception提出原因:传统网络为了减少参数量,减小过拟合,将全连接和一般卷积转化为随机稀疏连接,但是计算机硬件对非均匀稀疏数据的计算效率差,为了既保持网络结构的稀疏性,又能利用密集矩阵的高计算你性能,**Inception网络结构的主要思想是寻找用密集成分来近似最优局部稀疏连接,通过构造一种“基础神经元”结构,来搭建一个稀疏性、高计算性能的网络结构
GoogLeNet V1网络特色
采用Inception模块化结构,方便添加修改,使用不同卷积核进行卷积运算,还有一个最大池化,级联送入下一层
Average Pool 来代替全连接层,实际在最后一层还是添加了一个全连接层,方便做finetune
另外增加了两个辅助的softmax分支,作用有两点,一是为了避免梯度消失,二是将中间某一层输出用作分类,起到模型融合作用
GoogLeNet V2网络
两个33卷积代替一个55卷积,降低参数量
滤波器大小nxn的卷积分解为1xn和nx1卷积的组合,但在网络的前期使用这种分解效果并不好,在中度大小的特征图(feature map)上使用效果才会更好
为了同时保持特征表示并降低计算量,将池化和卷积并行执行再合并
ResNet(里程碑的残差结构)
shortcut connection,也是文中提到identity mapping
它对每层的输入做一个reference(X), 学习形成残差函数, 而不是学习一些没有reference(X)的函数。这种残差函数更容易优化,能使网络层数大大加深
由上图,我们可以清楚的看到“实线”和“虚线”两种连接方式, 实线的Connection部分 (第一个粉色矩形和第三个粉色矩形) 都是执行3x3x64的卷积,他们的channel个数一致,所以采用计算方式:
Y = F(x) + x,虚线的Connection部分 (第一个绿色矩形和第三个绿色矩形) 分别是3x3x64和3x3x128的卷积操作,他们的channel个数不同(64和128),所以采用计算方式: y=F(x)+Wx 。其中W是卷积操作,用来调整x的channel维度
残差两种结构
这两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),一般称整个结构为一个”building block“。其中右图又称为”bottleneck design”,就是为了降低参数的数目**
ResNet50和ResNet101
Resnext-50与 ResNet 相比,相同的参数个数,结果更好:一个 101 层的 ResNeXt 网络,和 200 层的 ResNet 准确度差不多,但是计算量只有后者的一半
提出cardinality 的概念,在上图左右有相同的参数个数,其中左边是 ResNet 的一个区块,右边的 ResNeXt 中每个分支一模一样,分支的个数就是 cardinality。此处借鉴了 GoogLeNet 的 split-transform-merge,和 VGG/ResNets 的 repeat layer。
所谓 split-transform-merge 是指通过在大卷积核层两侧加入 1x1 的网络层,控制核个数,减少参数个数的方式
ResNetV2
1)反向传播基本符合假设,信息传递无阻碍;2)BN层作为pre-activation,起到了正则化的作用;
ResNeXt
ResNet 的变种,其实就是在ResNet 的block 中,由一条残差路径变成了多条残差路径
Densnet(多重残差) 强化前后层信息流通,一定程度缓解过拟合
DenseNet网络是在2017的论文 Densely Connected Convolutional Networks 中提出,与ResNet一致,也采用shortcut连接,但是其将前面所有层与后面层密集连接(dense connection), 另外其采用channel concatenate来实现特征重用(代替ResNet的Element-wise addition)。其整体网络结构如下图所示:
下列优点:减轻了vanishing-gradient(梯度消失),加强了feature的传递,更有效地利用了feature.较少了参数数量
结构参数如下:
FPN 特征金字塔
增强语义信息,改善多尺度问题
FPN将深层的语义信息传到底层,补充浅层语义信息,从而获得高分辨率、强语义的特征,小目标检测和分割领域有出色表现
DPN
在图d中,左边为DenseNet,右边为ResNeXt (看上去更像ResNet,但实际是经过group操作的)。在图d中,左右两边进行相加操作,然后进行33卷积,11维度变换,然后进行通道分裂,左边与左边的原输入进行合并操作,右边与右边的原输入进行相加操作,如此,就形成了一个block。
Ghostnet(CVPR 2020)
廉价操作生成更多的特征图
应用一系列线性变换,以很小的代价生成许多能从原始特征发掘所需信息的“幻影”特征图(Ghost feature maps)
提出并非所有特征图都要用卷积操作来得到,“幻影”特征图可以用更廉价的操作来生成
Ghost bottleneck(G-bneck)
第一个Ghost模块用作扩展层,增加了通道数,输出通道数与输入通道数之比称为expansion ratio
第二个Ghost模块减少通道数,以与shortcut路径匹配,第二个Ghost模块之后不使用ReLU,其他层在每层之后都应用了批量归一化(BN)和ReLU非线性激活
基于Ghost bottleneck,作者遵循MobileNetV3的基本体系结构的优势,然后使用Ghost bottleneck替换MobileNetV3中的bottleneck
Ghost模块具有两个超参数
1)S生成 m=n/s 个内在特征图
2)计算幻影特征图的线性运算的dd 深度卷积核的大小
darknet53
YOLO采用DarkNet
基本由11与3*3卷积构成,因为网络中有53个卷积层,所以叫做Darknet-53(不包含残差层里的2个卷积)。
VoVNet
DenseNet来说,其核心模块就是Dense Block,这种密集连接会聚合前面所有的layer,这导致每个layer的输入channel数线性增长,带来的问题就是输入和输出channel数不一致,如前面所述,此时的MAC不是最优的,由于输入channel数较大,DenseNet采用了1x1卷积层先压缩特征,这个额外层的引入对GPU高效计算不利,虽然DenseNet的FLOPs和模型参数都不大,但是推理却并不高效,当输入较大时往往需要更多的显存和推理时间.
OSA(One-Shot Aggregation)模块,就是只在最后一次性聚合前面所有的layer。
每个layer的输入channel数是固定的,这里可以让输出channel数和输入一致而取得最小的MAC,而且也不再需要1x1卷积层来压缩特征,所以OSA模块是GPU计算高效的。
VoVNet由OSA模块构成,主要有三种不同的配置,如下表所示
VoVNetV2引入了ResNet的残差连接和SENet的SE模块
SENet
对于卷积操作,很大一部分工作是提高感受野,即空间上融合更多特征融合,或者是提取多尺度空间信息,对于channel维度的特征融合,卷积操作基本上默认对输入特征图的所有channel进行融合。
MobileNet网络中的组卷积(Group Convolution)和深度可分离卷积(Depthwise Separable Convolution)对channel进行分组也主要是为了使模型更加轻量级,减少计算量。SENet网络的创新点在于关注channel之间的关系,希望模型可以自动学习到不同channel特征的重要程度。为此,SENet提出了Squeeze-and-Excitation (SE)模块.
SE模块首先对卷积得到的特征图进行Squeeze操作,得到channel级的全局特征,然后对全局特征进行Excitation操作,学习各个channel间的关系,也得到不同channel的权重,最后乘以原来的特征图得到最终特征。本质上,SE模块是在channel维度上做attention或者gating操作,这种注意力机制让模型可以更加关注信息量最大的channel特征,而抑制那些不重要的channel特征。另外一点是SE模块是通用的,这意味着其可以嵌入到现有的网络架构中
Hourglass
Hourglass子网络
Hourglass核心部件,由Residual模块组成。根据阶数不同,有不同的复杂程度
一阶Hourglass
上半路在原尺度进行,下半路经历了先降采样(红色/2)再升采样(红色2)的过程。降采样使用max pooling,升采样使用最近邻插值
二阶Hourglass
把一阶模块的灰框内部分替换成一个一阶Hourglass(输入通道256,输出通道N),得到二阶Hourglass
*四阶Hourglass
每次降采样之前,分出上半路保留原尺度信息;
每次升采样之后,和上一个尺度的数据相加;
两次降采样之间,使用三个Residual模块提取特征;
两次相加之间,使用一个Residual模块提取特征。
Detnet(专注检测)
大物体难以定位 :大物体对应较深特征图检测,网络下采样率较大,物体的边缘难以精确预测,增加回归边界难度
小物体难以检测
下采样率大造成小物体的在深特征图不可见,fpn虽然从较浅层特征图检测小物体,但浅层语义信息若,融合深层特征上采样增加物体检测难度
detnet引入空洞卷积,模型兼具有感视野和分辨能力
DetNet的stage5与ResNet50不同,同时增加了额外的stage6,其设计细节如下:
1)stage4-6这三个stage的stride都是16,也就是这三个stage的特征图都是原图尺寸的1/16,而原本的ResNet50的stage5的特征图是原图尺寸的1/32;
2)提出了dilated bottleneck,分成A和B两种,具体的使用顺序如图D;
3)使用dilation技术的目的是增大感受野(保证了特征图的尺寸),然而考虑到计算量和内存,stage5和stage6保持了相同的通道数目(256的输入通道,而不是像传统的backbone一样,每个阶段通道数增加一倍)
具体结构如下:
senet
最后一届ImageNet冠军模型:SENet
SENet网络的创新点在于关注channel之间的关系,希望模型可以自动学习到不同channel特征的重要程度。为此,SENet提出了Squeeze-and-Excitation (SE)模块,如下图所示:
本质上,SE模块是在channel维度上做attention或者gating操作,这种注意力机制让模型可以更加关注信息量最大的channel特征,而抑制那些不重要的channel特征。