可参考:DenseNet 简介
论文:Densely Connected Convolutional Networks
这篇论文是CVPR2017 的best paper,主要探讨了如何改进网络结构提升网络性能的方法,提出了dense block,密集连接的概念。
DenseNet具有以下一些优点:
作者提到关于网络结构的改进主要有两个方向,一是更深的网络,另一个是更宽的网络。
更深的网络作者主要提到了以下三个:
这篇论文主要探讨如何训练很深的网络,主要思想可以看下面的公式。
可以看到该网络是通过添加两个非线性变换T和C来改变层与层之间的连接方式,增强了网络的稀疏性。如果T=C=1,就是残差网络。
HighWay Networks中的思想在残差网络中得到了进一步的验证。
这里的F(x)对应着上面的H(x)。这个网络也是解决如何训练更深网络的问题,大家讲得很多,这里就不赘述了。
这篇论文的第一作者和本文是同一个人,该论文提出了随机深度,是在ResNets的基础上进行改进的。具体原理看下面的公式。
残差块可以用公式表达成:
本文通过增加一个可训练参数b来实现随机丢弃一些层:
顺便一提,作者之所以想到密集连接这一连接方式也是基于上面的思想:通过对前面的层到后面的层建立short connections来提升网络性能。
更宽的网络作者提到了GoogLet,ResNets in ResNet,FractalNets。
下图是GoogLeNet的残差块,采用了NIN的概念,改变层的内部结构,拓展网络的宽度。Inception block和Dense block的共同之处是都选用的concat来拼接特征图,而不是resNet的求和。另外提到的两个网络我没有看相关文献。
作者说Dense Networks不是从深度和宽度来改善网络架构的,而是通过特征复用(feature reuse),来生成一种容易训练的,十分紧凑的并且参数效率很高的模型。(这里的几个形容词论文中都有详细介绍,甚至图表描述)
此外,作者还提到了其它的一些网络结构创新的论文,包括NIN论文。没有一一阅读,太多了……
1、密集块和密集连接(dense block and dense connectivity)
先说密集连接。所谓密集连接就是密集块内的每一层都会接收到前面所有层输出的特征图,换种说法也就是,每一层输出的特征图都会传到后面的所有层,可以看Figure 1中的连接。然后,层与层之间具体是如何连接的呢?看下面的公式(2)和H函数的说明:先将前面所有层的feature map concat起来形成一个tensor,然后送入BN层进行批正则化操作,然后接一个ReLu激活函数进行非线性激活,最后接一个3*3的卷积
再说生长率(grouth rate)的概念,也就是Figure 1中的k,指的是每一层输出的特征图的个数,也就是我们常说的channels。对于一个dense block,它的H是固定的,所以每一层输出的特征图个数也都是一样的。对于第l层,它就会接收到k0+(l-1)*k个特征图。
2、denseNets的结构
由于一个dense block内部的特征图尺寸始终是不变的,为了采用下采样层来缩小特征图尺寸,本文将一个Dense Networks划分成了多个连接在一起的Dense Block,各个dense block之间用过渡层连接。过渡层就是用来缩小特征图尺寸的,通过一个BN层接一个1*1卷积最后接一个2*2平均池化层实现尺寸减半。其中1*1conv作为瓶颈层(bottleneck layer)来减少特征图的数量。
具体的网络结构看下图:
在讨论部分,作者探讨了为什么dense networks能有效提升性能的原因。这部分看小标题和相应的图表就能看懂,不写了。
——————————————————————————————————————————————————————
分割线
——————————————————————————————————————————————————————
下面是对我目前了解到的分类网络的汇总
1、经典的分类网络:
2、相关的演变
下表是keras的application版块目前实现的各个模型比较,可以看到NasNet准确率是最高的,但是模型很大,预测很慢。