©PaperWeekly 原创 · 作者 | 小马
单位 | FightingCV公众号运营者
研究方向 | 计算机视觉
写在前面
动态神经网络(Dynamic Network)是目前非常热门也非常具有落地价值的一个研究方向,因为相比于固定结构和参数的静态神经网络,动态神经网络能够根据根据不同的输入样本,自适应的为样本分配最合适的路径,因此动态网络往往比静态网络具有更高的精度、计算效率 ,受到了广大学术研究者和算法工程师的欢迎。
下面,在这篇文章中,我们将会详细介绍,在不同领域近几年动态网络的发展历程!
动态网络工作
2.1 CondConv
论文标题:
CondConv: Conditionally Parameterized Convolutions for Efficient Inference
收录会议:
NeurIPS 2019
论文地址:
https://arxiv.org/abs/1904.04971
PyTorch代码:
https://github.com/xmu-xiaoma666/External-Attention-pytorch#5-CondConv-Usage
2.1.1 论文动机
这篇文文章的动机非常简单,目前增加模型容量的成本非常高,通常是增加网络的深度和宽度。通过增加了网络的深度和宽度,模型的参数量和计算量也会成倍的增长,这对于一些边缘设备的部署是非常不友好的。
作者发现,在卷积神经网络中,不论输入的样本是什么,相同的卷积核都作用于这些样本,这可能是次优的,因此,作者在本文中希望能够根据输入的样本,动态选择卷积核,从而提高模型的容量 。
具体来说,作者在设计的时候并行的设置了多个卷积核,然后设计了一个聚合函数,这些聚合函数能够根据输入的样本来动态聚合这些卷积核。由于只进行一次卷积,因此多出来的计算量其实只有计算量不同卷积核权重和聚合卷积核过程中产生的计算量,而这部分计算量相比于卷积的计算量其实是非常小的。
2.1.2 实现方法
如上图所示 ,在 ConvCond 中,每一个卷积层中有多个卷积核,作者为每一个卷积核分配了不同的权重,然后根据权重,将这些卷积核进行求和,得到最终的“动态卷积核”。对于“权重生成函数”,作者选用了一个非常简单的操作,即先将输入样本的空间维度进行 pooling,然后用全连接层降维到卷积核的数量,最后用 Sigmoid 函数求权重,如下所示:
2.2 Dynamic Convolution
论文标题:
Dynamic Convolution: Attention over Convolution Kernels
收录会议:
CVPR 2020 (Oral)
论文地址:
https://arxiv.org/abs/1912.03458
复现代码:
https://github.com/xmu-xiaoma666/External-Attention-pytorch#4-DynamicConv-Usage
2.2.1 论文动机
上图为目前动态卷积的示意图,能够将多个卷积核根据不同的输入样本以不同的权重进行聚合。但是作者发现,目前的