densenet网络结构_DenseNet轻量型网络

conDenseNet

问题来源

  • DenseNet的连接十分冗余,对其进行剪枝成为共识。这样可以增强正则化减少参数与计算量。
  • 将运用Group-Conv在
    卷积上会导致精度下降。作者推断是因为:输入特征有内在的顺序(多层特征图的集合,有前后关系);因为是不同层的特征,所以特征更加分散。
  • 作者将输入特征重新排序,然后再运用Group-Conv,可以减缓负面效应,但是效率不大。
    基于上面的分析与实验,作者提出了Learned Group-Conv(从静态组织变成动态学习).

Learned Group Conv

在训练过程对每组连接进行剪枝,在测试时,采用传统组卷积实现方法,保证高效计算。整个过程分为两个阶段:condensing stage和optimization stage.

05cff3a277414c0cde43d2f6c802e875.png

                     图1

condensing stage

  1. 如上图所示,输出分为G(这里为3)组。将所有输入与所有输出连接在一起。
  2. 将网络训练
    个轮回,其中M是训练的总轮回数, C是浓缩因子(Condensation Factor,最终每个输出通道与输入特征的连接数变为原始连接数的
    )。训练完之后, 分别对每个组内不重要的连接进行剪枝,剪枝方法如下,通过下式求出每个输入通道的重要性:

其中

表示的第i个输入通道到第j个输出通道的权重,
表示每组输出通道的个数。这里用L1表示重要性。
根据重要性去掉组内原来的
个输入。对每个组都进行上述剪枝。这样C-1次之后,每组的连接数就变成了原来的
.

注意: 虽然上面的剪枝方法合理,但是对于某组,可能存在某个输入通道特征总体重要性低,但是对于某个输出通道重要的情形,因此去掉这个输入可能导致模型的精度下降。为了减缓这种情况的发生,作者在损失函数上加入了一个正则项(Group Lasso)。来促使在同一组内相同输入特征层对不同输出层有着相同的贡献。这样裁剪的时候,就不会对精度有较大的影响。正则式如下(这样可以保证同一组内,同一输入对于不同的输出贡献是差不多的,平滑的):

29830b8a90e98465ad4e32f4813dbcac.png

3. 重复上面训练与剪枝的过程C-1次,这样每个组内的输入层数量变为原来的

,同时训练次数也变成了总数的一半,剩下的一半是优化阶段的训练总数。

optimization stage

  1. 如图1所示,再对新组织的网络进行训练优化。
  2. 测试时:去掉减掉的连接; 建立index Layer:根据连接情况对特征进行选择与重新排序,得到新的输入层。然后按照传统Group-Conv的方法进行高效实现。

整体框架

相对于DenseNet其在总体结构上有两点改变: 随着深度的增加,增长率也增加。变化规律为:

,需要注意
的设置应该能够保证被分组。 原来的密集连接是一个block,而这里是在block间也进行了密集连接,同时还包括了输入。如下图所示:

1a3a6a4332552545161d9fa32426c9a3.png

其详细结构如下,其中L-Conv(1)是指可学习的分组卷积,G-Conv(3)是指标准分组卷积(这里分成的是四个组):

b9700c844ac562d1c2f2d4b0f313f800.png

其中每个组(L-Conv(1)--->G-Conv(3))的具体操作如下所示:

8079ca4c5f6bad36b40309a1ecdf7655.png

注意到上面在1x1卷积之后还有一个打乱操作,这样可以加强信息之间的交流。其实验对比结果如下:

f0de9e23dd34d8eed23962da07c1f105.png

实验与分析

  • 验证每个因素对模型的影响---LGC(可学习的组卷积),IGR(指数级增长通道数),FDC(全部稠密连接):

819a9d153da36e332f7c05df71eea242.png

可以看到可学习组卷积对模型性能的提升尤其关键。

  • 把可学习的分组卷积方法当做是一个剪枝的方法,其方法与目前最好的剪枝在相同压缩比下精度的变化:

e21e49425fca0c70dbbec6d6dc92bae6.png

实验结果表明:动态剪枝的方法比静态好,实际上很多关于压缩的论文都有实验证明这一点(再训练会提高精度)。

  • 为了验证裁剪的连接不是因为其初始化值的原因,作者用了三个不同随机因子随机化并训练了Model(1),Model(2), Model(3),并对强度进行可视化。第一行图展示的对于层中个group的连接情况(显示的连接强度的平均值,其中白色是指被减掉的连接),同一层不同group连续展开。第二行图显示的是层与层之间的连接强度。灰色的线表示的是做池化的地方:

1ac24f553e4fc93ff56ef85faceaa8c8.png

总结与细节

  • 作者采用特殊的正则化项来对网络进行特定的约束值得学习。
  • 这里的浓缩因子C没有必要和分组数G一样,但是实验说明一样的组合,一般效率最好。
  • 作者在训练时,去掉分支并没有真的去掉这些连接,而是通过Mask的方法进行实现,
  • 从上面的可视化可以看出:前面特征的学习不同层之间的联系比较紧密,后面的特征学习只和最近的层有较强的联系。

PeleeNet

目标识别框架

其在目标识别框架上的改变主要有以下三点:
1. 如下图所示,将dense layer变成2-way dense layer,注意其开始的输入都是一样的(前面所有层输出的连接),产生分组效果是后面的卷积:

71399e7ada6807a1d85b898797a8f189.png

2. 改进输入到Stage1之前的处理:

0ff67bcb555b936bac727d84f7486cc0.png

3. 在Transition Layer不对特征层进行压缩.

最终模型的整体框架如下:

76b85e5269f828848a4c79dd1fd6739f.png

这些改进的效果实验情况如下(2way-dense_layer的效果最好):

7bd192204199624c9cedcf649d17402d.png

和其他先进结构的比较如下:

d5dbb98c03b006bc7bac43a9e4377be2.png

目标检测框架

其目标检测框架是SSD上进行改进的。主要的改进有以下三点:

1. 特征图的选择去掉了38, 剩下了19,10,5,3,1.减少了很多计算量。

2. 从特征图到最后的预测中间添上了一个ResBlock,增加了预测精度。其具体结构如下:

eda1845866ef6e1704c7b338a4a6b9af.png

3. 在最后预测的计算过程中,将

的卷积核变成
的卷积核。在没有降低精度的前提下,减少了计算量。

目标检测总体框架图如下所示:

70eeef6b0aacc2146aa43e1d35c43917.png

上述各点对模型影响如下实验室所示:

07ae330db1401381c29cbb589fa47846.png

与各个先进模型的对比实验:

6ef9efa9f82ec60508013fb54b6c32c9.png

实验与分析

下面展示的是模型在FP16上的运行速度与精度的实验,第一张图展示的各个模型在精度与速度的情况。第二图展示的是在FP16上增速情况。

ffc5ed87e07f14a183bca3723830d5d4.png

总结与细节

  1. 在网络结构设定时,对bottlenck进行了改进,使之中间层的通道数不会大于输入层。
  2. 其堆叠的顺序是Conv+BN+ReLU,这样的好处在于测试的时候可以将Conv与BN结合一起计算(fuse)。降低推断时间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值