人工智能三大宝,数据、网络与约束(loss)。想要训练得到一个好的神经网络模型,可以对这三块进行优化调整。就计算机视觉这块而言,自神经网络崛起后,由于可以避免手工提取特征,各种cnn模型层出不穷,无论是从深度和宽度上,还是从结构上,都有很大的发展,就自己所了解的做一些总结。
一般在性能上:
下面就具体介绍一下几个经典的CNN网络:
LeNet虽然不是CNN的起点,但却是后来CNN兴起的标志模型。LeNet-5是1998年YannLeCun设计用于手写数字识别的模型。
具体的网络结构
在当年神经网络还是MLP(Multilayer Perceptron,多层感知机)大行其道时,能设计出这样的模型已实属不易,也为后来CNN模型的发展奠定了基础。
特点:
1.相比MLP,LeNet使用了相对更少的参数,获得了更好的结果。
2.设计了maxpool来提取特征
AlexNet是Hinton和他的学生Alex在2012设计的网络,并获得了当年的ImageNet竞赛冠军。
具体网络结构
特点:
1.相比LeNet,AlexNet设计了更深层的网络。
2.在每个卷机后面添加了Relu激活函数,解决了Sigmoid的梯度消失问题,使收敛更快。
3.添加了归一化LRN(Local Response Normalization,局部响应归一化)层,使准确率更高。
4. 设计并使用了dropout层,减轻了模型的过拟合。
5.通过裁剪,旋转等方式增强了训练数据。
6.受于当时的算力限制,Alexnet创新地将图像分为上下两块分别训练,然后在全连接层合并在一起(AlexNet网络图1,可以看到有上下两部分,即最早的group convolution)。
VGGNet在2014年的ImageNet比赛中,分别在定位和分类跟踪任务中取得第一名和第二名。VGGNet主要特点:
1.探索了更深层次的网络结构图,可以看成是AlexNet的加强版本。
2.在卷机设计上,使用了更小的卷机核,验证了小尺寸的卷机核在深度网络中,不仅减少了参数,也达到了更好的效果。
(1)GoogLeNet v1(inception_v1)
GoogLeNet v1版本诞生于2014年,在ILSVRC 比赛中获得冠军,其性能与同年诞生的VGG差不多,但参数量少于VGG。该模型并没有单纯的将网络加深,而是引入了Inception概念,通过多个卷积核提取图像不同尺度的信息,最后进行融合,可以得到图像更好的表征。
主要特点为:
(2)GoogLeNet V2,V3
在2015年,同篇论文中发布了 GoogLeNet V2和V3版本。
V2特点:
V3包含了为V2规定的所有上述改进,另外还使用了以下内容:
(3)GoogLeNet V4 ,Inception-ResNet v1和v2
V4与之前的V3,V2版本主要改动有:
Inception-ResNet V1和V2特点:
随着算力的不断更新,越来越深的网络能够得到计算,但研究者发现随着网络的加深,模型变得越来越不能够训练,遇到了梯度消失或爆炸问题。在ResNet出现之前,人们通过BN,Relu等方式去缓解此问题,但仍然不能把网络做到足够深。
15年何恺明提出了ResNet网络,该思路启发于LSTM的控制门的思想:
可以看出,当T(x,WT) = 0,y=x,当T(x,WT) = 1,y= H(x,WH),
从上图可以看出:相比传统网络:y=f(x),ResNet Block公式为:y=f(x) + x,可以称之为skip connect。
Orhan等发表的论文《Skip connections eliminate singularities》提出神经网络的退化才是难以训练深层网络根本原因所在,而不是梯度消散。虽然梯度范数大,但是如果网络的可用自由度对这些范数的贡献非常不均衡,也就是每个层中只有少量的隐藏单元对不同的输入改变它们的激活值,而大部分隐藏单元对不同的输入都是相同的反应,此时整个权重矩阵的秩不高。并且随着网络层数的增加,连乘后使得整个秩变的更低。这也是我们常说的网络退化问题,虽然是一个很高维的矩阵,但是大部分维度却没有信息,表达能力没有看起来那么强大。残差连接正是强制打破了网络的对称性。总的来说一句话,打破了网络的对称性,提升了网络的表征能力。也可查看文献《Understanding and Improving Convolutional Neural Networks via Concatenated Rectified Linear Units》。
从图6.1中可以看出,DenseNet是借鉴了ResNet,是ResNet的升级版,从上述ResNet可以看到,一般每个Block会有一个skip connect,而DenseNet会在每层conv间有一个skip connect。
神经网络越深,网络的能力越强,就越有可能过度学习数据集,导致过拟合。大家应该还记得,作为第一个深层网络Alexnet网络,它提出了重要的策略dropout,对于提高模型的泛化能力非常有效。alexnet网络至今仍然可以用于很多的任务,这足以说明其鲁棒性。后来BN和数据增强等正则化策略替代dropout也在一定程度上缓解了过拟合的问题。文《Deep networks with stochastic depth》(Huang G, Sun Y, Liu Z, et al. )是DenseNet作者们早期的研究,它们通过训练时随机丢掉一些网络层,提高了ResNet的泛化性能。
从这里可以看出来一个重要特性,这也是神经网络中大家比较关心的问题,网络的冗余性绝对是存在的,而且不小,通过探索dropout值的比例对性能的影响可以去估算这个冗余。
既然丢掉某些层间连接或者整个层不影响性能,就说明这一层学习到的非线性转变很小,既然转变很小,那么每一层学习几百个通道,还有必要吗?这几百个通道,正是万恶的计算量所在。
考虑到这一点,densenet就同时做了两件事情,一是将网络中的每一层都直接与其前面层相连,提高特征的利用率;二是把网络的每一层设计得很窄,也就是卷积的输出通道数通常很小,只有几十,该层学习非常少的特征图并与输入concat使用。
这实现了资源的最大化利用和计算量的压缩。ImageNet分类数据集上达到同样的准确率,DenseNet 所需的参数量不到ResNet的一半,所需的计算量也只有ResNet的一半左右。
CSPNet在DenseNet的基础上继续改进,将block的输入分为两部分一部分讲过dense block计算,另一部分直接连接到transition layer。
CSPNet作者也设计了几种特征融合的策略,如下图所示:
图中的Transition Layer代表过渡层,主要包含瓶颈层(1x1卷积)和池化层(可选)。(a)图是原始的DenseNet的特征融合方式。(b)图是CSPDenseNet的特征融合方式(trainsition->concatenation->transition)。(c)图是Fusion First的特征融合方式(concatenation->transition)(d)图是Fusion Last的特征融合方式(transition->concatenation)
Fustion First的方式是对两个分支的feature map先进行concatenation操作,这样梯度信息可以被重用。
Fusion Last的方式是对Dense Block所在分支先进性transition操作,然后再进行concatenation, 梯度信息将被截断,因此不会重复使用梯度信息 。
这个结构要注意几点:
Non-Local Networks启发于non-local means滤波算法,该滤波算法是经典的图像去噪算法之一。在CNN模型中不论是conv层还是pool层(全局pool除外),它们对数据的感受野都是局部的。为了增大conv或pool的感受野,传统方式是增加网络的深度(网络越深,后面conv和pool的感受野越大),但这样会增加训练的难度(越深越难训练),而且降低效率(参数增加)。该论文提出的Non-local Networks可以在每层计算中参考全局信息。
该方法属于自注意力机制的范畴,
特点:
补充:
这里的Non-Local和NLP中的Self-Attention有异曲同工之妙,它们本质是一样的,NLP是当前token与上下文的关系,此处图片是当前像素与全图像素的关系。
NLP中的Self-Attention计算图如下:
NLP在计算Self-Attention时,会生成3个向量:查询向量q,键向量k和值向量v;步骤:
Non-Local与NLP self-attention的共同点:
同样的物体在图像中可能呈现出不同的大小、姿态、视角变化甚至非刚体形变,如何适应这些复杂的几何形变是物体识别的主要难点。而Deformable Conv模型尝试着解决这类问题。
首次在卷积神经网络(convolutional neutral networks,CNN)中引入了学习空间几何形变的能力,得到可变形卷积网络(deformable convolutional networks),从而更好地解决了具有空间形变的图像识别任务。研究员们通过大量的实验结果验证了该方法在复杂的计算机视觉任务(如目标检测和语义分割)上的有效性,首次表明在深度卷积神经网络(deep CNN)中学习空间上密集的几何形变是可行的。
当前深度模型对物体的几何形变适应能力几乎还是来自于数据本身的多样性,模型内部并不具有适应几何形变的机制。作者认为造成这样的问题是卷积操作本身就是固定的几何结构。
展示了卷积核大小为 3x3 的正常卷积和可变形卷积的采样方式,(a) 所示的正常卷积规律的采样 9 个点(绿点),(b)(c)(d) 为可变形卷积,在正常的采样坐标上加上一个位移量(蓝色箭头),其中(c)(d) 作为 (b) 的特殊情况,展示了可变形卷积可以作为尺度变换,比例变换和旋转变换的特殊情况作。
Dilated Convolution 被中文翻译为“空洞卷积”或“膨胀卷积”,我更倾向于称之为“膨胀卷积”。该模型最早由Fisher Yu在2016年ICLR上发表的论文《Multi-Scale Context Aggregation by Dilation Convolutions》中提出。该模型最早应用于图像分割,因为传统CNN模型需要通过pooling层来缩小图像尺寸,并扩大下一层的感受野,即进行下采样(down sampling);这一过程肯定会有信息丢失。因为图像分割是pixel-wise的,且在图像预测时还需要进行上采样(up sampling)操作,丢失的信息在上采样过程中也很难再找回。
为了解决上述问题,Fisher Yu提出了Dilated Convolution方法,通过Dilated Convolution来替代pooling层进行下采样操作,不仅扩大了感受野,也不会丢失信息。下面看一下dilated conv原始论文中的示意图:
(a)图对应3x3的1-dilated conv,和普通的卷积操作一样,(b)图对应3x3的2-dilated conv,实际的卷积kernel size还是3x3,但是空洞为1,也就是对于一个7x7的图像patch,只有9个红色的点和3x3的kernel发生卷积操作,其余的点略过。也可以理解为kernel的size为7x7,但是只有图中的9个点的权重不为0,其余都为0。 可以看到虽然kernel size只有3x3,但是这个卷积的感受野已经增大到了7x7(如果考虑到这个2-dilated conv的前一层是一个1-dilated conv的话,那么每个红点就是1-dilated的卷积输出,所以感受野为3x3,所以1-dilated和2-dilated合起来就能达到7x7的conv),(c)图是4-dilated conv操作,同理跟在两个1-dilated和2-dilated conv的后面,能达到15x15的感受野。对比传统的conv操作,3层3x3的卷积加起来,stride为1的话,只能达到(kernel-1)*layer+1=7的感受野,也就是和层数layer成线性关系,而dilated conv的感受野是指数级的增长。
SENET在ImageNet 2017中的Image Classification夺得冠军。并在CVPR 2017中发表论文《Squeeze-and-excitation networks》。作者大概总结了前人对CNN模型的改进:卷积核作为卷积神经网络的核心,通常被看做是在局部感受野上,将空间上(spatial)的信息和特征维度上(channel-wise)的信息进行聚合的信息聚合体。卷积神经网络由一系列卷积层、非线性层和下采样层构成,这样它们能够从全局感受野上去捕获图像的特征来进行图像的描述。近很多工作被提出来从空间维度层面来提升网络的性能,如Inception结构中嵌入了多尺度信息,聚合多种不同感受野上的特征来获得性能增益;还如Non-local,deformable conv,dilated conv等都是在空间层面进行改进。本文提到的SENet另辟蹊径,尝试着从channel特征中寻找优化点。作者认为在每层卷积中输出的每个channel,其信息重要性是不同的,我们需要为每个channel的feature map设置一个权重,来重新量化每个channel的特征信息。作者的设计如下图所示:
图中Fsq为Squeeze操作,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。图中Fex为Excitation操作,它是一个类似于循环神经网络中门的机制。通过参数 来为每个特征通道生成权重,其中参数 被学习用来显式地建模特征通道间的相关性。图中Fscale是一个Reweight操作。完成了每个channel的特征图权重计算。SE作为一个模块,可以跟其他CNN模型进行组合使用,下图是分别于Inception和ResNet进行组合
这些CNN模型可以直接后接上loss进行分类识别任务,也可以作为一个backbone嵌入网络中去,至于效果的话可以结合自己的场景进行合理的优化。网络模型的优化有很多,除了加宽、加深还可以进行跳跃链接,级联等,后续发现好玩的会继续跟进的。
参考链接:
https://zhuanlan.zhihu.com/p/66215918(CNN系列模型发展简述(附github代码——已全部跑通))
https://zhuanlan.zhihu.com/p/56094906(【完结】总结12大CNN主流模型架构设计思想)
https://zhuanlan.zhihu.com/p/62372897 (物体检测的轮回: anchor-based 与 anchor-free)