###前言 在论文笔记:CNN经典结构1中主要讲了2012-2015年的一些经典CNN结构。本文主要讲解2016-2017年的一些经典CNN结构。 CIFAR和SVHN上,DenseNet-BC优于ResNeXt优于DenseNet优于WRN优于FractalNet优于ResNetv2优于ResNet,具体数据见CIFAR和SVHN在各CNN论文中的结果。ImageNet上,SENet优于DPN优于ResNeXt优于WRN优于ResNet和DenseNet。html
###WideResNet( WRN )git
- motivation:ResNet的跳链接,致使了只有少许的残差块学到了有用信息,或者大部分残差块只能提供少许的信息。因而做者探索一种新的网络WideResNet(在ResNet的基础上减少深度,增长宽度)。
- 网络结构:在ResNetv2的基础上改进,增大每一个残差块中的卷积核数量。以下两个图所示。其中B(3,3)表示一个两个3x3卷积,k表示一个宽度因子,当k为1时卷积核个数和ResNetv2相等,k越大网络越宽。另外WRN在卷积层之间加入dropout(下一个卷积层以前的bn和relu以后),以下第一个图的图(d)所示(在ResNetv2中把dropout放在恒等映射中实验发现效果很差因而放弃了dropout)。用WRN-n-k来表示一个网络,n表示卷积层的总数,k表示宽度因子。
- 训练配置:SGD,momentum为0.9,学习率为0.1,权重衰减为0.0005,batch size为128。
- 实验:在CIFAR,SVHN,COCO数据集上取得了state-of-the-art的结果,同时在ImageNet上也表现优秀(比某些ResNet表现好,并无超越ResNet的最优结果)。做者根据实验结果认为ResNet的主要能力来自于残差块,而深度的效果只是一个补充。

###FractalNetgithub
- motivation:WideResNet经过加宽ResNet获得state-of-the-art的表现,推测ResNet的主要能力来自于残差块,深度不是必要的。相比之下,分形网络则是直接认为ResNet中的残差结构也不是必要的,网络的路径长度(有效的梯度传播路径)才是训练深度网络的基本组建。
- 网络结构:如下图所示,分形网络是经过不一样长度的子路经组合,让网络自身选择合适的子路经集合,另外分形网络还提出了drop paht的方法。其中local drop就是join模块以必定几率drop每一个输入,但至少留下一个。global drop就是对整个网络只留下一列。
- 实验:在CIFAR和SVHN数据集上分形网络取得了优秀的结果(CIFAR上能够超越残差网络的表现,可是比WRN的表现差)。在ImageNet上能够达到和ResNet差很少的结果(好那么一丢丢,可是只对比了一种ResNet结构)。
- 更多细节:具体内容我在另外一篇论文笔记:分形网络中有所说起。

###DenseNet网络
- motivation之stochastic depth:这是做者黄高以前的一篇论文,由于ResNet中大部分残差块只提供少许信息,因此在ResNet基础上随机丢弃一些层,发现能够提升ResNet的泛化能力。随机丢弃一些层网络依然奏效,带来了两点启发,一是网络中的某一层能够不只仅依赖于前层特征而依赖于更前层的特征。二是ResNet具备比较明显的冗余,网络的每一层只提取了不多的有用特征。基于以上两点DenseNet提出让网络的每一层和前面的全部层相连,同时把每一层设计地特别窄,学习不多的特征图以此下降冗余性。听起来密集链接彷佛会大大增长参数量,但实际上不是,由于网络变窄了。
- motivation之设计捷径:深层网络中,输入的信息或者梯度经过不少层以后会逐渐丢失,以前的ResNet和FractalNet的一个共同特征在于,建立一个前层和后层捷径。沿着这个思路DenseNet让网络的全部层之间作一个全链接,保证全部层之间都两两链接,这么作能够增强feature的传递,更有效地利用feature(每一层能够依赖更前层的特征,每一层的特征都直接链接到输出层),减少梯度消失的问题。另外为了保留信息在链接多个输入时并无像ResNet同样使用addition,而是使用concat。
- DenseNet结构:每一层都和全部前层相链接,第一层连输入层有1个前链接,第二层就有2个前链接,那么对于L层就有1+2+...+L也就是L(1+L)/2个链接。由于feature map大小不一样的时候concat并不可行,DenseNet把网络分红了几个Dense块,中间用transition layer(用来改变feature map大小)链接起来。以下第一个图所示。Dense块中为多个“BN-ReLU-Conv3x3"(这一连串操做称为一个$H_l$的单元操做)。DenseNet的具体结构见论文阐述。
- DenseNet-BC结构:其中B表示bottleneck结构,把3x3替换成(1x1, 3x3),$H_l$单元操做为“BN-ReLU-Conv1x1-Conv3x3"。C表示压缩,在transition层设一个参数$\theta$来减少feature map个数(通道数),论文中取值为0.5,每次transition时通道数减半。结构以下第二个图所示,其中k表示Dense块中$H_l$产生的feature map个数,k越小,Dense块越窄,因为k越大会致使后层concat后通道越大,论文中也称之为growth rate。进入Dense块以前使用了2k个7x7卷积。实验中1x1的卷积产生4k个feature map。
- 实验:在CIFAR和SVHN上超越了前人的表现(超越WRN和FractalNet),在ImageNet上和ResNet达到差很少的表现但参数量不到一半,计算量为ResNet的一半。
- 训练配置:SGD,权重衰减为0.0001,momentum为0.9。CIFAT和SVHN的batch size为64,学习率为0.1,50%和75%的epoch时除以10。在CIFAR上300个epoch,在SVHN上40个epoch。ImageNet上epoch为90,batch size为256,学习率为0.1,在30轮和60轮降为原来的1/10。原生的DenseNet实现对内存的利用效率不高(大量的concat会给显存带来高负荷),做者另外写了一个技术报告来介绍如何提高DenseNet的内存使用效率,同时提供torch,pytorch,mxnet以及caffe的实现。

###ResNeXt(2016年ImageNet分类任务的亚军)mvc
- motivation:视觉识别的研究已经从“人工设计的特征工程”转移到“网络结构设计的网络工程”上。因而做者同时借鉴了VGG和ResNet的“堆叠相同shape子结构”思想和Inception的"split-transform-merge"思想,提出了ResNeXt的结构,把ResNet中残差块的结构改为以下第一个图的图右那种结构,相似Inception块,可是里面的每一个小块又是相同的结构,并且最后是addition而不是concat,经过堆叠这样的ResNeXt块来构建ResNeXt网络。
- 网络结构:以下第二个图所示,三个子图的结构是等价的,最后一个子图用了组卷积技术使得结构更加紧凑简洁,模型实现使用的是最后一个子图的结构。BN-Relu的使用遵循的是原始的ResNetv1,在每一个卷积后加BN-Relu,到block的输出时(最后一个BN-Relu)把relu放在addition的后面。shortcut都用恒等映射,除了要用映射(projection)增维的时候。
- ImageNet预处理和预测:预处理遵循VGG的作法来裁剪图像,全部消融学习(ablation study)中使用single-crop-224进行预测。
- ImageNet训练配置:SGD,batch size为256,权重衰减为0.0001,momentum为0.9,学习率为0.1,遵循ResNet的实现作三次除以10的衰减,何凯明初始化。
- 实验:实验表示,保持一样的复杂度,增长“cardinality”(这个词下图中有解释,相同于一个ResNeXt块的分支数)能够提升准确率,另外,增长模型容量时,增长“cardinality”比增长深度或宽度更加有效。101-layer ResNeXt准确率比ResNet-200更高,同时花费一半的复杂度(Flops)。

###DPN(2017年ImageNet定位任务的冠军)ide
- motivation:结合ResNet的优势(重用特征)和DenseNet的优势(在重用特征上存在冗余,可是利于探索新特征),提出一种新的网络结构,称为对偶路径网络(Dual Path Network)。
- 网络结构:如下图所示,d和e等价,网络分为residual path和densely connected path在卷积块最后的1x1将输出切为两路,一路连到residual path上加起来,一路练到densely connected path上concat起来。
- 实验:ImageNet(分类)上表现超过ResNeXt,并且模型更小,计算复杂度更低。另外在VOC 2007的目标检测结果和VOC 2012的语义分割结果也超越了DenseNet,ResNet和ResNeXt。

###SENet(2017年ImageNet分类任务的冠军)性能
- motivation:已经不少工做在空间维度上提高网络性能,好比Inception嵌入多尺度信息,聚合多种不一样感觉野上的特征来得到性能增益。那么网络是否能够从其它层面去提高性能,好比考虑特征通道之间的关系,基于这一点做者提出了SENet(Squeeze-and-Excitation Network),经过学习的方式获取每一个通道的重要程度,从而进行特征重标定。
- 网络结构:以下第一个图所示,$F_{tr}$表示transformation(好比一系列的卷积操做),$F_{sq}$表示squeeze操做,产生一个通道描述符,表征特征通道上响应的全局分布。$F_{ex}$表示excitation操做,经过参数w来为每一个特征通道生成权重,建模特征通道间的重要性。$F_{scale}$表示一个reweight操做,将excitation输出的权重(特征通道的重要性)逐个乘到先前的特征,完成特征重标定。
- SE-ResNet模块:以下第二个图是SE嵌入到ResNet中的一个例子,这里使用全局均值池化做为squeeze操做,使用两个FC组成的bottleneck结构做为excitation操做。SE能够嵌入到任意网络中获得不一样种类的SENet,好比SE-ReNeXt,SE-BN-Inception,SE-Inception-ResNet-v2等等。
- 训练配置:跟随VGG的标准设定进行数据加强。输入图像使用通道均值相减。使用了数据平衡策略用于mini-batch采样(这个策略引用于另外一篇论文Relay bp for effective learning of deep cnn)。SGD,momentum为0.9,mini-batch为1024,学习率0.6,每30轮除以10,训练100轮,何凯明初始化。预测时使用center crop。
- 实验:ImageNet分类中,在ResNet,ResNeXt,VGG,BN-Inception,Inception-ResNet-v2,mobileNet,shuffleNet上都作了实验,发现加入SE后表现提高。此外还在场景分类和目标检测中作了实验,加入SE后表现提高。


###参考文献学习
- WRN(2016 BMVC):Wide Residual Networks(模型源码-torch实现)
- FractalNet:(2017 ICLR):FractalNet: Ultra-Deep Neural Networks without Residuals(模型源码-caffe实现)
- DenseNet(2017 CVPR):Densely Connected Convolutional Networks(模型源码-torch实现)
- ResNeXt(2017 CVPR):Aggregated Residual Transformations for Deep Neural Networks(模型源码-torch实现)
- DPN(2017 NIPS):Dual Path Networks(模型源码-mxnet实现)
- SENet(2018 CVPR):Squeeze-and-Excitation Networks(模型源码-caffe实现)