DenseNet 论文阅读笔记

05 Densely Connected Convolutional Networks

Motivation

如果有shortcut:CNN可以更深、更准确、更好训练

DenseNet:将每一层都连接起来。connects each layer to every other layer in a feed-forward fashion

advantage:

​ 1)减缓梯度消失问题

​ 2)加强特征传播

​ 3)特征重用

​ 4)大大减少参数量

当CNN变得越来越深:当关于输入或梯度的信息传过太多层之后,可能会消失或被清洗掉(也就是说,层数太多了之后,有用的信息可能会消失)

问题的解决方法的关键:create short paths from early layers to later layers

connect all layers (with matching feature-map sizes) directly with each other

与resnet不同,对来自不同层的特征不使用加法来结合它们,而是将它们拼接起来

需要更少的参数,没有必要重新学习冗余的特征映射

​ 明确区分了被添加到网络中的信息和被保存的信息

​ 网络的每一层都很窄,feature map的数量都很小

​ adding only a small set of feature-maps to the ‘collective knowledge’ of the network and keep the remaining feature-maps unchanged

​ the final classifier makes a decision based on all feature-maps in the network

每一层都可以和loss function的梯度以及输入直接连接

dense connection还有一定的正则化效果,防止过拟合

Stochastic depth: 训练中随机舍弃掉resnet的一些层,说明了不是所有的层都是被需要的,并且resnet结构包含相当一部分的冗余信息

怎么提升网络?让网络更深(skip connections),让网络更宽

DenseNet采用的思路跟上面两个都不一样:通过特征重用利用网络的潜力

将不同层学到的特征图拼接到一起,可以增加后续的层的输入的多样性

跟resnet比:densenet是把特征图拼起来而不是加起来

跟InceptionNet比:都是将特征图拼接起来,但是densenet在结构上会更加简单更具效率

DenseNets

resnet:是通过加法来做的,可能会阻碍信息在网络中的流动

Hl(·)被定义为一系列操作:batch normalization,ReLU,3*3conv

将整个网络分割成很多个dense blocks,在每个block里面的layer都是一个维度的,这样就可以拼接起来。block之间的层称为transition layers,包含conv和pooling(实验中具体为:bn,1*1conv,2*2 average pooling)

Densenet跟别的现有结构的很大不同就是,densenet很窄(即宽度小,每层的feature map少)。因为可以使用前面的层的信息,即访问整个网络的’collective knowledge’。每个layer相当于把自己的k个feature-map写到整个网络的global state里去。因为每层都可以去访问这个网络的global state,所以就没必要把冗余的信息重复写到每一层里去了

Bottleneck layers

​ 输入的维度可能很高(拼接的),所以用1*1卷积来减少输入的feature-map的数量

​ Bottleneck layer:BN—ReLU—1*1Conv—BN—ReLU—3*3Conv

densenet-B: with bottleneck layers

Compression

densenet-C: with θ<1 (reduce the number of feature-maps at transition layers)

Experiment

densenet的naive实现可能会造成内存上的低效、浪费,所以需要一些额外的trick

在没有Compression和bottleneck的时候,随着层数L和k(growth rate)的增加,性能也会增加,这大约可以归因于模型的容量增加。这表明densenet可以利用更大、更深的model的能力,也表明它们不会被resnet的优化问题和过拟合问题困扰

densenet-BC: most param-efficient

因为对参数的高效利用:overfitting的风险更小。即使在没有使用data augmentation的实验中,性能的增长也是明显的。

跟resnet相比,获得差不多的性能的前提下,densenet用的参数量和计算量会更少

跟resnet比:concatenation instead of summation

这造成了以下的不同:

​ 1)model compactness:可以从之前的每一个layer得到feature-map的输入,特征重用,导致模型更紧凑

​ densenet-BC is the most parameter efficient variant of DenseNet

​ 2)implicit deep supervision:

​ individual layers receive additional supervision from the loss function through the shorter connections.

​ 隐式的强监督模型,loss function的误差可以很容易地传到较早的层,这样较早的层就可以很直接地从loss function和分类结果获得监督

​ a single classififier on top of the network provides direct supervision to all layers through at most two or three transition layers

​ 3)stochastic vs deterministic connection:

​ 在stochastic depth中,一些层被随即丢弃,这样周围的层就会直接相连。由于pooling layers不会被丢弃,所以在densenet的connectivity机制里,同一个block里的两个层是很不容易被直接连接的(除非它们中间的所有层都恰好被随机丢弃了)。这似乎也能解释densenet的正则化作用

​ 4)feature reuse:(analyze by heat map)

​ 每个层都将权重散布到同一个block里的别的层中去,说明前面的层提取到的feature的确有被后面的层用到

​ 整个网络前面的层的信息只通过少量的transition层流动到最后面的层

​ transition层有许多冗余特征,这也是被压缩的点

​ 更高阶的特征还是会出现在net的较深层,尽管classification layer会用到所有层的权重,但主要还是来自于最后一个feature map

densenet:网络越深性能越好,without any signs of performance degradation or overfitting

怎么提升net的性能?提高深度或者扩大宽度。层数越多意味着能够提取到不同的特征就越丰富,这些特征也越抽象越具有语义信息

这会引出来一些问题:数据经过太多层之后,可能会消失(梯度消失)。还可能出现层越多性能越差的情况(性能退化)

这个问题的解决方法主要是加入一些shortcut,例如resnet等。主要的思想就是让数据有一条从early layer到later layer的shortpath

densenet也是加shortcut的一种方法,但是跟resnet有所不同

densenet采用一种非常密集的连接方式,是在每一层之间建立连接,做feature map的拼接。这样每一层的宽度可以更小,节省了参数量

DenseNet层非常狭窄,只向网络的集合知识(collective knowledge)中添加一小组特征映射,并保持其余的特征映射不变,最终分类器根据网络中的所有特征映射做出决策。

每个denseblock的feature map被拼接在一起,经过降采样后送入下一个denseblock。所以说feature map的concatenate操作只存在于每个denseblock的内部

densenet似乎在小模型的场景下的优势更大,性能提升更明显

一个缺点是训练起来比较慢,因为需要频繁访问内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值