轻量级网络之CondenseNet

轻量级网络之CondenseNet

CondenseNet: An Efficient DenseNet using Learned Group Convolutions
2018CVPR的网络,文章的贡献从名字就能清晰明了的Get。利用可学习分组卷积,对DenseNet的进行轻量化改造。


首先看一下是如何替换网络中的普通卷积:A是原来的卷积,在B中被替换成分组卷积,其中1x1的分组卷积是可以学习分组的;注意在1x1分组卷积前多插入了一层Permute,作者想要在DenseNet的卷积操作中引入group,在3x3卷积中问题不大,但是在1x1卷积中发现直接这样做对最后的结果影响较大,作者推测原因是:一般1x1卷积层的作用是对前面层的输出特征做channel上的融合,因此如果加入group,那么融合的输入就少了许多,因此输出的多样性就得不到保证。所以如果能弄个ShuffleNet那样的shuffle操作,就能增加输出多样性。因此作者通过添加Permute层(该层是变换通道顺序的作用,类似shuffle操作),这可以在一定程度上降低在1x1卷积中引入group操作对结果的影响。
在测试阶段,则采用C的结构。这里1x1分组卷积也变成普通的分组卷积,而在前面加入Index层(类似于0,1掩码)来选择特征分组。这样的话,在GPU上运算会更快。
在这里插入图片描述


最重要的问题就是如何学习分组?
在这里插入图片描述

自学习分组卷积(Learned Group Convolution)可以分成两个阶段:浓缩(Condensing)阶段和优化(Optimizing)阶段。其中浓缩阶段用于剪枝没用的特征,优化阶段用于优化剪枝之后的网络。

  • 浓缩(Condensing):图中分组数 G=3,浓缩率 C=3,即只保留原来1/3的特征。一共会有C-1个浓缩阶段,第一个浓缩阶段(图中最左侧)初始化是普通的卷积网络,在训练该网络时使用了分组lasso正则项,这样学到的特征会呈现结构化稀疏分布,好处是在后面剪枝部分不会过分的影响精度。在每次浓缩阶段训练完成之后会有1/C的特征被剪枝掉。也就是经过C-1个浓缩阶段后,仅有1/C的特征被保留下来

  • 优化(Optimizing):它会针对剪枝之后的网络单独做权值优化。其实就是继续训练,微调参数。用于优化阶段的总Epoch数和浓缩阶段是相同的C-1。如果说一共是M个epoch,就会被2(C-1)均分。

下图是C=4,M=300的曲线。300/(4-1)=100,每次剪枝的时候Loss都会震动,最后一次loss震动的比较剧烈是因为一半的特征被剪枝掉。训练使用cosine学习率退火。
在这里插入图片描述


浓缩时,如何减枝

在这里插入图片描述


网络框架:
在DenseNet基础上进行结构化改进。之前的DenseNet中,每个block内采用密集连接形式,且每层的输出通道数是固定的k,又叫增长因子。在CondenseNet中,作者认为“远亲不如近邻”,也就是挨得比较近的层的输出特征更重要。所以,采用按照指数递增的k值,每个block内k值固定,block数越大k值越大。另外,层与层之间均采用密集连接,而不仅局限于block内了。

在这里插入图片描述

DenseNet传送门:CNN卷积神经网络之DenseNet


效果:
相比于DenseNet:CondenseNet在相同的精度水平下,计算量是前者的十分之一。
相比于MobileNet和ShuffleNet:相同的精度水平下,计算量是前两者的二分之一。在相同的计算量下,top-1误差比前两者低3%。

上一篇:轻量级网络之MobileNet v1
下一篇:轻量级网络之MobileNet v2

猜你喜欢

转载自blog.csdn.net/qq_41917697/article/details/122674050
今日推荐