本文分享论文『Dynamic Convolution: Attention over Convolution Kernels』,静态的结构依旧不能满足性能需求了?微软提出了Dynamic Convolution(动态卷积),让MobileNetV3提高2.9%Top-1准确率!(附复现代码)。
详细信息如下:
- 论文链接:https://arxiv.org/abs/1912.03458
- 复现代码:https://github.com/xmu-xiaoma666/External-Attention-pytorch#4-DynamicConv-Usage
导言:
轻量级卷积神经网络(CNN)由于其较低的计算预算限制了CNN的深度(卷积层数)和宽度(通道数),导致其表现能力有限,因此性能下降。为了解决这个问题,作者提出了动态卷积(Dynamic Convolution),这是一种在不增加网络深度或宽度的情况下增加模型复杂性的新设计。
动态卷积不是每层只使用一个卷积核,而是根据注意力来动态聚合多个与输入相关的并行卷积核。通过对MobileNetV3-Small使用动态卷积,ImageNet分类的Top-1精度提高了2.9%,仅增加4%的FLOPs,COCO关键点检测实现了2.9 AP的性能提升。
01 Motivation
最近,轻量级网络的设计逐渐兴起,它不仅可以在移动设备上提供新的体验,还可以保护用户的隐私,防止将个人信息发送到云端。最近的工作(如MobileNet和Shuffenet)表明,有效的算子设计(如深度卷积、通道shuffle、squeeze-and-excitation、不对称卷积)和网络结构搜索对于设计有效的卷积神经网络是非常重要的。
然而,当计算约束变得极低时,即使是SOTA的高效CNN(如MobileNetV3)也会出现显著的性能下降。例如,当MobileNetV3的计算成本从219M减少到66M时,ImageNet分类的Top-1准确率从75.2%下降到67.4%。这是因为极低的计算资源会限制网络的深度(卷积层数)和宽度(通道数),从而限制其表现能力。
在本文中,作者提出了一种新的算子设计,称为动态卷积,能在不增加额外FLOPs的情况下提高模型的表示能力。如上图所示,动态卷积使用一组并行卷积核,而不是每层只使用一个卷积核。
对于每个单独的输入x,这些卷积核是通过基于输入的注意力权重动态聚合的,即。bias是使用相同的注意聚合的,即。
动态卷积是一种非线性函数,比静态卷积具有更大的表示能力,同时,动态卷积具有较高的计算效率。它不会增加网络的深度或宽度,因为并行卷积核共享了输出通道。它只在计算和聚合卷积核时引入额外的计算开销,而这些计算量与卷积相比可以忽略不计。动态卷积的关键insight是,在合 的模型大小范围内,动态卷积核聚合提供了一种提高表示能力的有效方法。
动态卷积神经网络(DY-CNNs)训练起来比较困难,因为它们需要对所有卷积核进行联合优化,并需要跨多个层的注意力。作者发现了有效联合优化的两个关键点:(a)约束注意输出以促进注意模型的学习,(b)在早期训练阶段,采用比较均匀的注意以促进卷积核的学习。在实验中,作者采用了训练早期temperature参数较大的Softmax来实现这两点。
通过实验,作者证明了动态卷积在图像分类(ImageNet)和关键点检测(COCO)上的有效性。如上图所示,在MobileNet V2和V3中,简单地将静态卷积替换为动态卷积,只需稍微增加(4%)计算成本,即可实现稳定的性能改进。
02 方法
2.1. Preliminary: Dynamic Perceptron
Definition
设静态感知机为,其中为权重矩阵和偏差向量,为激活函数。动态感知机聚合了多个线性函数,如下所示:
其中,π是第k个线性函数的权重。
Attention
注意力权重不是固定的,对于每个输入都是不同的,它们表示给定输入的线性模型的最佳聚合。聚合模型是一个非线性函数,因此,动态感知机比静态感知机具有更强的表示能力。
Computational Constraint
与静态感知机相比,动态感知机的输出通道数相同,但模型尺寸较大。它还引入了两个额外的计算:计算注意力权重;基于注意权重聚合权重和偏差,即。额外的计算成本应大大低于计算的成本。如下所示:
其中代表了计算复杂度。
2.2. Dynamic Convolution
在本文中,作者提出了动态卷积(如上图所示),通过使用注意权重π进行聚合K个相同输入/输出维度的卷积核。
Attention
作者采用squeeze-and-excitation操作来计算卷积核的注意力。首先通过全局平均池化对全局空间信息进行压缩。然后,使用两个全连接层(它们之间有一个ReLU)和Softmax来生成卷积核。第一个全连接层将维度缩小四倍,第二个全连接层的输出通道数为卷积核的数量。
对于大小为的输入,计算Attention操作需要的计算量为。这部分的计算量远小于卷积的计算量,其中为卷积核大小,为输出通道数。
Kernel Aggregation
聚合卷积核由于核尺寸小,所以计算效率高。将K个大小为的卷积核聚合,需要的计算量为,其中卷积核输入通道为,输出通道为。与卷积的计算量相比,聚合的计算量也是可以忽略的,因为。上表展示了MobileNetV2和加入动态卷积的计算量比较。
2.3. Two Insights of Training Deep DY-CNNs
训练深层DY-CNN是比较困难的,因为它需要跨多层联合优化所有卷积核和注意模型。在本节中,作者介绍了两种更有效的联合优化方法,这对于深度DY-CNN尤其重要。
Insight 1: Sum the Attention to One
约束注意输出可以促进注意模型 的学习 。具体来说,作者将所有卷积核的注意力权重之和限制为1,即。上图展示了三个卷积核的情况,约束仅将聚合卷积核核保留在两个金字塔中。“和为一”约束进一步将卷积核核空间压缩为三角形。当与深度网络中的联合优化时,这种归一化显著简化了的学习。因此,作者选用Softmax使得。
Insight 2: Near-uniform Attention in EarlyTraining Epochs
在早期训练阶段,近似平均的注意力可以促进所有卷积核 的学习 。Softmax在这方面工作不太好,因为它的输出近乎one-hot形式,只允许跨层优化一小部分卷积核。上图展示了仅用Softmax进行优化时,收敛速度慢。
为了验证这一点,作者还将卷积核数量减少三个,进行了实验。结果如上图所示,可以看出,当卷积核数量减少时,收敛速度确实加快了。
因此,在实验中,作者采用了Temperature annealing的策略,在最开始的10个epoch,将Temperature 参数从30降到1,作者发现这能够进一步提升性能。
03 实验
3.1. Inspecting DY-CNN
上表展示了不同卷积聚合方式的实验结果,可以看出基于输入数据自适应的计算Attention权重,来进行卷积核聚合的结果是最好的。
作者还根据层的输入分辨率对层进行分组,并打开/关闭这些组的注意力。可以看出,在所有组都是用动态卷积的实验结果是最好的。
3.2. Ablation Studies
The number of convolution kernels
上表展示了不同卷积核数量的结果,可以当K>4之后,精度的提升明显减慢,因此K=4是一个比较好的超参数。
Dynamic convolution at different layers
上表展示了在不同层使用动态卷积的结果,可以看出,对所有层都使用动态卷积的效果比较好。
Softmax Temperature
上表展示了不同Temperature的实验结果,可以看出采用逐渐降低的Temperature参数,实验结果最佳。
Dynamic Convolution vs Squeeze-and-Excitation (SE)
如果不使用SE,MobileNetV3的top1精度会下降2%。然而,DY-MobileNetV3在不使用SE时的实验结果下降的更少一些,使用0.7%。
3.3. Main Results
上表展示了不同网络加入动态卷积之后的结果,可以看出,动态卷积对于不同网络结构都是有效的。
3.4. DY-CNNs for Human Pose Estimation
上表展示了动态网络和Baseline在COCO人体关键点检测上的实验结果,可以看出,本文方法在关键点检测的任务上也是有效的。
04 总结
在本文中,作者提出了动态卷积,它能根据每个输入的注意权重动态聚合多个卷积核。与静态卷积相比,它显著地提高了模型的表示能力,而额外的计算成本可以忽略不计。此外,本文提出的动态卷积可以很容易地集成到现有的CNN结构中。通过简单地用动态卷积替换MobileNet(V2和V3)中的每个卷积核,可以在图像分类和人体姿势估计方面都取得了实质性的性能改进。
除了动态卷积的设计思想之外,个人觉得,这篇文章的两个训练trick也是值得我们学习。第一点是将注意力的权重之和限制为1有利于模型的学习和收敛,因此,作者没有采用Sigmoid函数,而是用了Softmax函数;第二点是,模型最开始训练的时候,让注意力权重能够尽可能平均,让所有的卷积核都能训练到,所以,训练最开始,作者采用了较大的温度参数。