查看原文
其他

【源头活水】CVPR2021 | 密集连接网络中的稀疏特征重激活

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

作者:知乎—yll
地址:https://zhuanlan.zhihu.com/p/364846540

本文主要介绍了我们被CVPR2021接受的文章:CondenseNet V2: Sparse Feature Reactivation for Deep Networks

论文:https://arxiv.org/abs/2104.04382

代码:https://github.com/jianghaojun/CondenseNetV2

太长不看版

本文提出了一种基于密集连接的高效轻量级神经网络。针对 DenseNet 的特征复用冗余,CondenseNet 提出利用可学习分组卷积来裁剪掉冗余连接。然而,DenseNet 的和 CondenseNet 中特征一旦产生将不再发生任何更改,这就导致了部分特征的潜在价值被严重忽略。本文提出:与其直接删掉冗余,不妨给冗余特征一个“翻身”机会。因此我们提出一种可学习的稀疏特征重激活的方法,来有选择地更新冗余特征,从而增强特征的复用效率。CondenseNetV2 在 CondenseNet 的基础上引入了稀疏特征重激活,对冗余特征同时进行了裁剪和更新,有效提升了密集连接网络的特征复用效率,在图像分类和检测任务上取得的出色表现。


01

Introduction (研究动机和简介)

通过在深度神经网路中使用密集连接来实现特征复用(DenseNet)已被证实是实现高计算效率的有效途径。然而,近期的研究工作(CondenseNet)表明,DenseNet 中网络的连接密度过高,存在着较多的冗余连接。由于在 DenseNet 中,某一层的特征一旦产生后将不会再发生任何变化,其将会以产生的形式参与后续的所有计算。因此对于网络的深层而言,直接让浅层特征参与本层的新特征计算可能会引入计算冗余。为了解决这样的问题,CondenseNet 提出利用可学习分组卷积(Learned Group Convolution, LGC)来裁剪掉这些冗余连接,从而得到高效的轻量化密集连接网络。

然而我们认为,直接对冗余特征裁剪,倒不如给一些冗余特征一个“翻身”的机会。由于在密集连接结构中,特征产生之后就不会发生任何变化,这就导致了尽管一些浅层的特征可能在深层有着很大的潜力,经过微调之后就可以发挥很大的作用,然而他们仍然在网络深层被视为了冗余,因此经常被裁剪掉。我们的出发点是,我们可以让网络学习去选择一些有潜力的冗余特征,对这些冗余特征进行重激活,让他们更好地适应深层网络的特征学习,从而最大程度发挥网络的特征复用效率。由于我们仅对一部分特征实现了重激活,因此所提出方法被命名为稀疏特征重激活(Sparse Feature Reactivation, SFR)。

图1 特征复用(Feature reusing)和改进方法

图1进一步对 DenseNet,CondenseNet 和我们提出的方法在特征复用方面的操作进行了说明。注意到,尽管 CondenseNet 中提出的可学习分组卷积和我们提出的稀疏特征重激活方法从两个截然不同的角度去处理密集连接中的冗余(LGC 避免去使用冗余特征,而 SFR 更新冗余特征去增强他们的利用率),但是他们相互是没有冲突的。因此,我们在 CondenseNet 的基础上,引入 SFR 模块,来构建最终的 CondenseNetV2。CondenseNet 和 CondenseNetV2 的特征学习过程如下图所示。

图2 CondenseNet 和 CondenseNetV2
在所提出 CondenseNetV2 中,密集连接网络的每层可以同时 1)有选择地从前层连接中挑选出最重要的特征实现特征复用;2)对前层的特征进行稀疏重激活以增加它们在深层网络的利用率。实验表明所提出方法有效提升了 CondenseNet 的整体性能。

02

稀疏特征重激活
DenseNet 中的特征复用机制:我们将使用 层之前的所有特征,  ,输入到第  层的特征学习层  ,来生成该层的新特征  。由于在每一层的特征生成过程中,前面所有的特征都是参与计算的,因此网络呈现密集连接的状态。然而,这样过度的密集连接容易引入计算冗余,尤其是网络中的长距离连接。
CondenseNet 中的特征复用机制:可学习分组卷积,LGC,被引入每一层的  中,从而来有选择性地挑选出一些重要的特征来参与新特征的生成。这样有效地减少了网络的计算开销。然而,网络中的特征一旦产生则没有被更新的机会,这就导致浅层特征可能不适合参与深层的特征学习。这也就解释了为何 CondenseNet 会经常裁剪掉那些长距离的连接。
重激活过时的特征:我们引入一个重激活模块,  ,来实现特征重激活。该模块以  为输入,对之前的每一个特征产生一个更新量  。随后我们使用该更新量,利用更新操作  实现对之前特征的更新(在本文我们使用加的操作实现更新)。综上,引入特征重激活后,第  层的特征学习过程如下:

特征重激活的过程可以进一步用图3左表示。而,直接对之前所有的特征进行重激活的操作是非常消耗计算开销的,而我们的目的是建立高效的轻量级神经网络。一方面,更新量事实上仅仅利用一部分连接就可以得到,而不需要用标准卷积来进行学习;另一方面,有些特征在该层本身就可以被有效利用,因此不需要任何更新(如图3中,稀疏特征重激活产生的白色的更新量)。因此,我们提出用对重激活操作进行稀疏化,从而保证该操作的高效性。

图3 特征重激活和对其稀疏化

稀疏特征重激活:受 LGC 的启发,我们利用 LGC 的逆过程来学习哪些特征需要进行重激活,如图3所示。不失一般性,我们假设重激活模块  (SFR 模块)由常规的1x1卷积构成。因此,其权重矩阵可以表示为  ,维度为 O x I,其中 O 表示输出通道数,I 表示输入通道数。给定输入  ,我们首先将权重划分为 G 个组,  ,其中每个权重的维度为 O x I/G。在此基础上,我们引入一个稀疏因子 S(注意 S 和 G 可以不同),使得每组的特征只与 O/S 的输出通道相连接。
在训练过程中, 我们使用G个二值 mask,  ,来控制 中的连接。我们利用这些 mask 的取值来对相应的权重实现置零操作,换句话来说,最终的权重为  ,其中  表示逐个元素相乘。
接下来我们介绍如何以端到端的方式训练 SFR 模块:训练过程被分为 S-1 个稀疏化过程和1个优化过程。假设 E 表示训练总 epoch 数,则每个稀疏化过程包含 E/(2(S-1))个 epoch,优化过程包含 E/2 个 epoch。我们将所有的二值 mask 初始化为全一矩阵。在稀疏化过程中,我们通过权重的 L1范数,  ,来表示第g个分组中的第i个输出的重要程度。在每个稀疏化过程的最后,我们将以L1范数为衡量标准,选取 O/S 个最不重要输出通道,将相应mask 中的元素置零。如果第i个输出的所有连接都被置零,则表示该特征不需要任何更新,  的相应位置为0。经过训练后,只有 1/S 的特征被选择出来进行了重激活。该学习过程可以进一步用如下算法流程图表示。
转化为标准组卷积:在推理阶段,我们可以利用学习到的 mask,将 SFR 模块转化为标准的组卷积。经过转换的组卷积的分组数为 G,输入和输出通道数分别为 I 和 OG/S。在得到中间特征后,我们根据 mask 对中间特征进行重排列,就可以得到最终的更新量。图4展示了一个 S=3, G=3的 SFR 模块的转化过程。

图4 将SFR转化为标准组卷积


03

网络结构设计
CondenseNetv2: 将所提出 SFR 模块应用于 CondenseNet,我们就建立起了 CondenseNetV2。两种轻量化网络的结构示意图如图5所示。在所提出网络的每一层中,LGC 首先被用来挑选出重要的特征来进行特征学习,在得到新特征之后,SFR 模块被用来对之前的特征进行重激活。另外,我们在每层都使用了Shuffle操作,来增强不同分组之间的信息交流。

图 5 CondenseNet(左)和 CondenseNetV2(右)

详细的网络结构设计如下所示。为了进一步提升网络的性能,我们引入了 SE 模块和 HS 激活函数。同时,与 CondenseNet 一样,网络使用了全网络密集连接和指数增长的增长率。每个block 的层数和增长率表示为d和k。
SFR-ShuffleNetV2:事实上,所提出 SFR 模块可以作为一种即插即用的模块,适用于任何包含特征复用的深度学习模型中。因此我们同样可以将 SFR 模块应用于 ShuffleNetV2,所得到的结构我们命名为 SFR-ShuffleNetV2,结构如下图所示。

图 6 ShuffleNetV2(左)和 SFR-ShuffleNetV2(右)


04

分析性实验(稀疏特征重激活是否有用)
在本小节我们主要验证了稀疏特征重激活的方法是否真正产生了作用。我们首先在 CIFAR-10数据集上进行了实验:我们训练得到一个 CondenseNet 和 一个 CondenseNetV2,并对网络的 LGC 的权重进行了可视化,结果如图7所示。图中的颜色表示每层中每个 group 和group 之间的连接强度,白色表示该连接由于不重要在学习过程中被裁剪掉。相比CondenseNet,可以看到 CondenseNetV2 右上角的连接更加密集,这表示更多的浅层特征在经过重激活之后得到了复用,证明了经过稀疏特征重激活可以有效提升浅层特征在深层网络中的利用率。
图7 LGC 权重可视化(Group级)
进一步,我们以层为单位,对 LGC 的权重进行了可视化,结果如图8所示。在图8中,可以看到 CondenseNet 连接热力图的右上角部分颜色较深,这说明在 CondenseNet 中,深层的特征会将与浅层的连接看作是冗余特征。由于进行了去除操作,因此连接强度较低,颜色较深。然而,CondenseNetV2 中,由于我们进行了特征重激活,因此热力图的右上角部分明显变亮,说明更多的前层特征在网络深层的时候被挖掘,因此,特征的复用效率被进一步提升。另外我们发现,相比 CIFAR-10 上的模型,在 ImageNet 上 CondenseNetV2 使用浅层特征更加的频繁,这说明在一些复杂视觉任务中,浅层特征可能对性能提升拥有很大的潜力。
图8 CondenseNet 和 CondenseNetV2 在 CIFAR-10(a,b)和 ImageNet(c,d)上的各层之间的连接强度


05

实验结果
与 baseline 相比,加入 SFR 后网络性能得到有效提升:
消融实验表明,SFR 在性能提升中起主要作用:

与其他非 NAS 搜索得到的网络结构相比,CondenseNetV2 性能更优(见图9(a))。

图9 实验结果

在 IoT 设备上的测速结果表明,CondenseNetV2 拥有更好的性能(见图9(b))。
我们在 MS COCO 测试了所提出网络在目标检测任务上的性能。实验中,两种常用的检测器:Faster R-CNN 和 RetinaNet ,被用来验证所提出网络的性能。实验中的 backbone FLOPs 使用了 224x224 的输入特征图进行计算得到。从实验中,我们可以看出,在同等 backbone 计算力下,CondenseNetV2 和 SFR-ShuffleNetV2 相比 MobileNetV2 和 ShuffleNetV2 可以取得更高的 mAP。


06

Conclusion(结语)
之前的工作针对冗余信息,大部分处理的方法都是删除裁剪,而我们所提出的方法从另一个角度出发,选择去更新那些冗余的特征,从而使得这些冗余内容变得不再冗余。另一方面,裁剪和更新冗余信息是可以同时进行的,基于此我们提出了 CondenseNetV2,一种基于密集连接的轻量化神经网络。另一方面,所提出的SFR模块可以即插即用于任何包含特征复用的神经网络中。
欢迎大家follow我们的工作
@inproceedings{yang2021condensenetv2, title={CondenseNet V2: Sparse Feature Reactivation for Deep Networks}, author={Yang, Le and Jiang, Haojun and Cai, Ruojin and Wang, Yulin and Song, Shiji and Huang, Gao and Tian, Qi}, booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition}, year={2021}}
附上我的主页链接:http://www.yangle.cc

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存