本文为总结今年来的卷积神经网络,主要按照时间线和方法类似程度的顺序总结。
开篇先前说下概要,然后展开详细介绍,主要是在densenet、resnext、senet这三个网络上介绍,前面的一系列网络大概讲一下思想。
1、时间轴
时间 | 团队 | 论文 |
---|---|---|
2014.09 | Inception v1 | |
2015.02 | Inception v2 | |
2015.12 | Inception v3 | |
2016.02 | Inception v4 | |
时间 | 团队 | 论文 |
2015.12 | microsoft | ResNet |
2016.11 | UCSD & Facebook | ResNext |
时间 | 团队 | 论文 |
2016.08 | CORNELL & Tsinghua & Facebook | DenseNet |
2017.09 | momenta | SENet |
2、关于模型改进的一些个人总结
论文链接:https://arxiv.org/pdf/1409.4842.pdf
传统网络都是通过层的叠加,增加网络深度,这篇论文提出从网络宽度上改进,通过concat操作,将经过不同kernel尺度的feature map进行concat,增加网络对尺度的适应性、增加网络的宽度,提高了网络内部资源的利用率。
inception block结构如下图所示:
网络中除了添加inception block之外,还使用global average pooling代替了全连接层,可以减少参数量,保留显著特征,降低特征维度。
参考链接:
论文链接:https://arxiv.org/pdf/1502.03167.pdf
首次提出BN层,减少Internal Covariate Shift,具体BN层的解释可以参考以前的博客,将每一次一个batch中的数据分布控制在均值为0,方差为1。
就是添加了BN层
参考链接:
论文链接:https://arxiv.org/pdf/1512.00567.pdf
1、卷积核进行分解:使用两个3x3卷积核代替5x5卷积核,三个3x3卷积核代替7x7卷积核,减少参数量,加快计算。(两个3x3与一个5x5作用是一样的,其感受野都是5)
2、进一步将nxn卷积核分解为1xn和nx1卷积核;
3、减少feature map的size,增加channel数;
参考链接:https://www.cnblogs.com/eniac1946/p/8669937.html
论文链接:https://arxiv.org/pdf/1602.07261.pdf
基于inception v3的基础上,引入残差结构,提出了inception-resnet-v1和inception-resnet-v2,并修改inception模块提出了inception v4结构。基于inception v4的网络实验发现在不引入残差结构的基础上也能达到和inception-resnet-v2结构相似的结果,从而认为何凯明等人认为的:“要想得到深度卷积网络必须使用残差结构”这一观点是不完全正确的。
参考链接:
1、https://www.cnblogs.com/shouhuxianjian/p/7786760.html
2、https://blog.csdn.net/loveliuzz/article/details/79135583
论文链接:https://arxiv.org/pdf/1512.03385v1.pdf
第一次提出残差结构,主要解决两个问题
如下图,本来要学习H(x),现在转换为F(x)+x,二者效果相同,但是优化难度下降,并且因为多了一个x,使得求导时总有1,避免了梯度消失问题。
进一步拓展残差结构:
1、首先是vgg网络、plain 网络和残差网络的结构比较;
2、本文中的网络结构
参考链接:
论文链接::https://arxiv.org/pdf/1611.05431.pdf
主要是采用了VGG堆叠思想和Inception的split-transform-merge思想,在不增加参数复杂度的前提下提高准确率。
对比于之前提高准确率的方法,大都是在depth和width上改进,本文提出一种新的方式,命名为cardinality,基数。即得到上一次feature map后,假设cardinality=32,则取32组1x1卷积核,每组4个,分别进行卷积,得到32组feature map,然后再分别进行3x3卷积,最后再通过1x1卷积把通道数还原回来。
具体残差结构如下所示:
上图右图中可以进行变体,下图中这三种结构是完全相等的,
1、网络结构
resnext与resnet50/101参数量差不多,但是准确率却提升了。
增加Cardinality和增加深度或宽度的对比实验,证明增加Cardinality确实效果比较好。
参考链接:https://blog.csdn.net/u014380165/article/details/71667916
论文链接:https://arxiv.org/pdf/1608.06993.pdf
densenet紧接着在resnet之后提出,结合了resnet的思想。网络改进除了像resnet和inception在深度和宽度上做文章外,densenet通过利用feature来减少参数的同时提高效果,对feature进行有效利用并加强feature的传递。
主要思想是将每一层都与后面的层连接起来,如果一个网络中有L层,那么会有L(L+1)/2个连接,具体连接如下图所示:
引用参考链接中的一段话:
DenseNet的一个优点是网络更窄,参数更少,很大一部分原因得益于这种dense block的设计,后面有提到在dense block中每个卷积层的输出feature map的数量都很小(小于100),而不是像其他网络一样动不动就几百上千的宽度。同时这种连接方式使得特征和梯度的传递更加有效,网络也就更加容易训练。原文的一句话非常喜欢:Each layer has direct access to the gradients from the loss function and the original input signal, leading to an implicit deep supervision.直接解释了为什么这个网络的效果会很好。前面提到过梯度消失问题在网络深度越深的时候越容易出现,原因就是输入信息和梯度信息在很多层之间传递导致的,而现在这种dense connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深网络不是问题。另外作者还观察到这种dense connection有正则化的效果,因此对于过拟合有一定的抑制作用,博主认为是因为参数减少了(后面会介绍为什么参数会减少),所以过拟合现象减轻。
给出resnet和resnext两个结构的公式比较:
resnet:前一层经过非线性变换后与前一层相加得到本层的结果。
densenet:前n层所有的结果进行concat,然后再进行非线性转换。
为了保证feature map的channel不会太大,而且size要保持统一才能concat,将上述作为一个dense block,每个block之间通过池化层相连。
1、引入dense block后的结构图
2、网络结构,图中k表示每个dense block中每层输出的feature map个数
3、bottleneck layer和translation layer
此外,在dense block中引入bottleneck layer,即卷积3x3前增加1x1卷积,以此来减少feature map数量。结构为:
BN -> Relu -> Conv 1x1 -> BN -> Relu -> Conv 3x3
由于feature map通道数量可能还是很大,在每个dense block之间,增加了translation layer,通过1x1卷积核来实现。
BN -> Relu -> Conv 1x1 -> Pooling
参考链接:https://blog.csdn.net/u014380165/article/details/75142664
论文链接:https://arxiv.org/pdf/1709.01507.pdf
从特征通道之间的关系入手,对特征通道之间的关系进行建模表示,根据重要程度增强有用的特征、抑制没有用的特征。
个人感觉像是在通道上做权重,类似于通道上的attention。
主要分为两个过程,如下图所示,squeeze挤压和excitation激励。
如下图所示,对通道进行了挤压,即通过全局平均池化,将shape为[H, W, C]的feature map变为[1, 1, C]。
顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野,这一点在很多任务中都是非常有用的。
得到挤压后的feature map后,进行激励,使用sigmoid函数。。
首先通过一个全连接层进行降维,即如下公式中的W1z,然后经过relu激活函数。即δ(W1z),再经过全连接进行升维,即W2(δ(W1z)),然后通过sigmoid进行权重激活。
它是一个类似于循环神经网络中门的机制。通过参数 w 来为每个特征通道生成权重,其中参数 w 被学习用来显式地建模特征通道间的相关性。
最后通过scale相乘,得到se block的结果。
将 Excitation 的输出的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。
block结构图如下所示:
进一步,变为残差se block,
整个网路结构如下图所示:分别为resnet-50,se-resnet-50,se-resnext-50;
在主流网络上进行了复现,并加了se block结构后进行了比较。
参考链接:
1、https://blog.csdn.net/xjz18298268521/article/details/79078551
2、http://www.sohu.com/a/161633191_465975