MixConv:混合深度卷积核
文章目录
- 摘要
- 1 简介
- 2 相关工作
- 3 MixConv
-
- 3.2 MixConv 设计选择
- 3.3 MobileNets 上的 MixConv 性能
- 3.4 消融研究
- 4 MixNet
-
- 4.1 架构搜索
- 4.2 ImageNet 上的 MixNet 性能
- 4.3 MixNet 架构
- 4.4 迁移学习表现
- 5 结论
摘要
论文链接:https://arxiv.org/abs/1907.09595
官方代码:https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet/mixnet
pytorch代码:https://github.com/romulus0914/MixNet-Pytorch
深度卷积在现代高效 ConvNets 中变得越来越流行,但它的内核大小经常被忽视。在本文中,我们系统地研究了不同内核大小的影响,并观察到结合多种内核大小的好处可以带来更好的准确性和效率。基于这一观察,我们提出了一种新的混合深度卷积(MixConv),它自然地将多个内核大小混合在一个卷积中。作为普通深度卷积的简单替代品,我们的 MixConv 提高了现有 MobileNets 在 ImageNet 分类和 COCO 对象检测上的准确性和效率。为了证明 MixConv 的有效性,我们将其集成到 AutoML 搜索空间中,并开发了一个名为 MixNets 的新模型系列,其性能优于以前的移动模型,包括 MobileNetV2 [23](ImageNet top-1 准确率 +4.2%)、ShuffleNetV2 [18 ] (+3.5%)、MnasNet [29] (+1.3%)、ProxylessNAS [2] (+2.2%) 和 FBNet [30] (+2.0%)。特别是,我们的 MixNet-L 在典型的移动设置(<600M FLOPS)下实现了最新的 78.9% ImageNet top-1 准确度。代码在 https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet/mixnet.
1 简介
卷积神经网络 (ConvNets) 已广泛应用于图像分类、检测、分割和许多其他应用。 ConvNets 设计的最新趋势是提高准确性和效率。随着这一趋势,深度卷积在现代 ConvNets 中变得越来越流行,例如 MobileNets [7, 23]、ShuffleNets [18, 33]、NASNet [35]、AmoebaNet [21]、MnasNet [29] 和 EfficientNet [28] ]。与常规卷积不同,深度卷积核分别应用于每个单独的通道,从而将计算成本降低了 C 倍,其中 C 是通道数。在使用深度卷积核设计 ConvNet 时,一个重要但经常被忽视的因素是核大小。虽然传统的做法是简单地使用 3x3 内核 [3, 7, 18, 23, 33, 35],但最近的研究结果表明,更大的内核大小,例如 5x5 内核 [29] 和 7x7 内核 [2] 可以潜在地提高模型的准确性和效率。
在本文中,我们重新审视了一个基本问题:更大的内核是否总是能获得更高的精度?自从在 AlexNet [14] 中首次观察到,众所周知,每个卷积核负责捕获局部图像模式,该模式在早期阶段可能是边缘,在后期阶段可能是对象。大内核倾向于以更多参数和计算为代价来捕获具有更多细节的高分辨率模式,但它们是否总能提高准确性?为了回答这个问题,我们系统地研究了基于 MobileNets [7, 23] 的内核大小的影响。图 1 显示了结果。正如预期的那样,较大的内核大小会显着增加模型大小,并提供更多参数;然而,模型精度首先从 3x3 上升到 7x7,然后在内核大小大于 9x9 时迅速下降,这表明非常大的内核大小可能会损害精度和效率。事实上,这一观察符合 ConvNet 的第一直觉:在内核大小等于输入分辨率的极端情况下,ConvNet 简单地变成了一个完全连接的网络,这是众所周知的劣势 [7]。这项研究表明了单核大小的局限性:我们既需要大核来捕获高分辨率模式,又需要小核来捕获低分辨率模式,以提高模型的准确性和效率。
基于这一观察,我们提出了一种混合深度卷积(MixConv),它在单个卷积操作中混合不同的内核大小,以便它可以轻松地捕获具有各种分辨率的不同模式。 图 2 显示了 MixConv 的结构,它将通道划分为多个组,并对每组通道应用不同的内核大小。 我们表明,我们的 MixConv 是 vanilla depthwise 卷积的简单替代品,但它可以显着提高 MobileNets 在 ImageNet 分类和 COCO 对象检测上的准确性和效率。
为了进一步证明我们的 MixConv 的有效性,我们利用神经架构搜索 [29] 开发了一个名为 MixNets 的新模型系列。 实验结果表明,我们的 MixNet 模型明显优于所有以前的移动 ConvNet,例如 ShuffleNets [18, 33]、MnasNet [29]、FBNet [30] 和 ProxylessNAS [2]。 特别是,我们的大尺寸 MixNet-L 在典型模型尺寸和 FLOPS 设置下实现了最新的 78.9% ImageNet top-1 准确度。
2 相关工作
Efficient ConvNets:近年来,从更高效的卷积操作 [3, 7, 11]、瓶颈层 [23, 31] 到更高效的架构 [2, 29, 30],在提高 ConvNet 效率方面付出了巨大努力。 特别是,深度卷积在所有移动设备大小的 ConvNet 中越来越流行,例如 MobileNets [7, 23]、ShuffleNets [18, 33]、MnasNet [29] 和 [3, 21, 35]。 最近,EfficientNet [28] 甚至通过广泛使用深度卷积和逐点卷积实现了最先进的 ImageNet 精度和十倍的效率。 与常规卷积不同,depthwise convolution 对每个通道分别执行卷积核,从而减少参数大小和计算成本。 我们提出的 MixConv 概括了深度卷积的概念,可以被认为是普通深度卷积的替代品。
多尺度网络和特征:我们的想法与之前的多分支卷积网络有很多相似之处,例如 Inceptions [25, 27]、Inception-ResNet [26]、ResNeXt [31] 和 NASNet [35]。 通过在每一层使用多个分支,这些卷积网络能够利用 单个层中的不同操作(例如卷积和池化)。 同样,之前也有很多关于组合来自不同层的多尺度特征图的工作,例如 DenseNet [9, 10] 和特征金字塔网络 [15]。 然而,与这些先前的工作主要集中在改变神经网络的宏观架构以利用不同的卷积操作不同,我们的工作旨在设计一个替代单个深度卷积的直接替换,目标是轻松利用不同的内核 大小而不改变网络结构。
神经架构搜索:最近,神经架构搜索 [16、17、29、34、35] 通过自动化设计过程和学习更好的设计选择,取得了比手工模型更好的性能。 由于我们的 MixConv 是一种具有许多可能设计选择的灵活操作,我们采用类似于 [2, 29, 30] 的现有架构搜索方法,通过将 MixConv 添加到搜索空间中来开发新的 MixNet 系列。
3 MixConv
MixConv 的主要思想是在单个深度卷积操作中混合多个不同大小的内核,以便它可以轻松地从输入图像中捕获不同类型的模式。 在本节中,我们将讨论 MixConv 的特征图和设计选择。
3.1 MixConv 特征图
我们从普通的深度卷积开始。 令 X(h,w,c) X^{(h,w,c)} X(h,w,c) 表示形状为 (h;w;c) 的输入张量,其中 c 是空间高度,w 是空间宽度,c 是通道大小。 令 W(k,k,c,m) W^{(k,k,c,m)} W(k,k,c,m)表示深度卷积核,其中 k × k 是核大小,c 是输入通道大小,m 是通道乘数。 为简单起见,这里我们假设内核宽度和高度是相同的 k,但可以直接推广到内核宽度和高度不同的情况。 s 输出张量 Yh,w,c,m Y^{h,w,c,m} Yh,w,c,m 将具有相同的空间 形状 (h,w) 并乘以输出通道大小 m · c,每个输出特征图值计算为:
Y x , y , z = ∑ − k 2 ≤ i ≤ k 2 , − k 2 ≤ j ≤ k 2 X x + i , y + j , z / m ⋅ W i , j , z , ∀ z = 1 , … , m ⋅ c (1) Y_{x, y, z}=\sum_{-\frac{k}{2} \leq i \leq \frac{k}{2},-\frac{k}{2} \leq j \leq \frac{k}{2}} X_{x+i, y+j, z / m} \cdot W_{i, j, z}, \quad \forall z=1, \ldots, m \cdot c \tag{1} Yx,y,z=−2k≤i≤2k,−2k≤j≤2k∑Xx+i,y+j,z/m⋅Wi,j,z,∀z=1,…,m⋅c(1)
与普通深度卷积不同,MixConv 将通道划分为组并将不同的内核大小应用于每个组,如图 2 所示。更具体地说,输入张量被划分为 g 组虚拟张量 <X^(h,w,c1),…,X^(h,w,cg)>,其中所有虚拟张量 X^ 具有相同的空间高度 h 和宽度 w,并且它们的总通道大小等于原始输入张量: c 1 + c 2 + … + c g = c c1 + c2 +\ldots +cg = c c1+c2+…+cg=c。 类似地,我们也将卷积核划分为 g 组虚拟核 <W^(k1,k1,c1,m),…,W^(kg,kg,cg,m)>。 对于第 t 组虚拟输入张量和核,对应的虚拟输出计算如下:
Y ^ x , y , z t = ∑ − k l 2 ≤ i ≤ k t 2 , − k t 2 ≤ j ≤ k t 2 X ^ x + i , y + j , z / m t ⋅ W ^ i , j , z t , ∀ z = 1 , … , m ⋅ c t (2) \hat{Y}_{x, y, z}^{t}=\sum_{-\frac{k_{l}}{2} \leq i \leq \frac{k_{t}}{2},-\frac{k_{t}}{2} \leq j \leq \frac{k_{t}}{2}} \hat{X}_{x+i, y+j, z / m}^{t} \cdot \hat{W}_{i, j, z}^{t}, \quad \forall z=1, \ldots, m \cdot c_{t} \tag{2} Y^x,y,zt=−2kl≤i≤2kt,−2kt≤j≤2kt∑X^x+i,y+j,z/mt⋅W^i,j,zt,∀z=1,…,m⋅ct(2)
最终的输出张量是所有虚拟输出张量的串联 <Y^x,y,z11,…,Y^x,y,zgg>:
Y x , y , z o = Concat ( Y ^ x , y , z 1 1 , … , Y ^ x , y , z g g ) (3) Y_{x, y, z_{o}}=\operatorname{Concat}\left(\hat{Y}_{x, y, z_{1}}^{1}, \ldots, \hat{Y}_{x, y, z_{g}}^{g}\right)\tag{3} Yx,y,zo=Concat(Y^x,y,z11,…,Y^x,y,zgg)(3)
其中 z o = z 1 + … + z g = m ⋅ c z_{o}=z_{1}+\ldots+z_{g}=m \cdot c zo=z1+…+zg=m⋅c是最终输出通道大小。
图 3 显示了 MixConv 的 TensorFlow python 实现的简单演示。 在某些平台上,MixConv 可以实现为单个操作并通过组卷积进行优化。 尽管如此,如图所示,MixConv 可以被认为是 普通深度卷积的简单替代品。
3.2 MixConv 设计选择
MixConv 是一种灵活的卷积运算,具有多种设计选择:
组大小 g:它决定了单个输入张量使用多少不同类型的内核。 在 g = 1 的极端情况下,MixConv 等效于 vanilla depthwise 卷积。 在我们的实验中,我们发现 g = 4 通常是 MobileNets 的安全选择,但在神经架构搜索的帮助下,我们发现它可以进一步提高从 1 到 5 的各种组大小的模型效率和准确性。
每个组的内核大小:理论上,每个组可以有任意内核大小。但是,如果两个组具有相同的内核大小,则相当于将这两个组合并为一个组,因此我们限制每个组具有不同的内核大小。此外,由于小 内核大小通常具有较少的参数和 FLOPS,我们限制内核大小始终从 3x3 开始,并且每组单调增加 2。换句话说,组 i 的内核大小始终为 2i+1。例如,一个 4 组 MixConv 总是使用内核大小 {3x3, 5x5, 7x7, 9x9}。有了这个限制,每个组的内核大小是为任何组大小 g 预定义的,从而简化了我们的设计过程。
Channel Size Per Group:在本文中,我们主要考虑两种通道划分方法:(1)等分:每个组将有相同数量的过滤器; (2) 指数分区:第 i 组将有大约 2-i 部分的总通道。例如,给定一个总滤波器大小为 32 的 4 组 MixConv,等分区会将通道划分为 (8, 8, 8, 8),而指数划分会将通道划分为 (16, 8, 4, 4 )。
扩张卷积:由于大内核需要更多的参数和计算,一种替代方法是使用扩张卷积[32],它可以在没有额外参数和计算的情况下增加感受野。然而,正如我们在第 3.4 节中的消融研究中所示,空洞卷积的准确度通常低于大内核尺寸。
3.3 MobileNets 上的 MixConv 性能
由于 MixConv 是 vanilla depthwise 卷积的简单替代品,我们使用现有的 MobileNets [7, 23] 评估其在分类和检测任务上的性能。
ImageNet 分类性能:图 4 显示了 MixConv 在 ImageNet 分类 [22] 上的性能。 基于 MobileNet V1 和 V2,我们将所有原始的 3x3 深度卷积核替换为更大的核或 MixConv 核。 值得注意的是,MixConv 总是从 3x3 内核大小开始,然后每组单调增加 2,因此图中 MixConv 最右边的点有六组内核大小为 {3x3,5x5,7x7,9x9,11x11,13x13} 的滤波器。 在该图中,我们观察到:(1)MixConv 通常使用更少的参数和 FLOPS,但其准确度与 vanilla depthwise 卷积相似或更好,这表明混合不同的内核可以提高效率和准确度;(2)与 vanilla depthwise 相比 如图 1 所示,MixConv 对非常大的内核的敏感性要低得多,这表明混合不同的内核对于大内核大小可以实现更稳定的精度。
COCO 检测性能:我们还在基于 MobileNets 的 COCO 对象检测上评估了 MixConv。 表 1 显示了性能比较,我们的 MixConv 始终获得比普通深度卷积更好的效率和准确性。 特别是,与 vanilla depthwise7x7 相比,我们的 MixConv357(具有 3 组内核 {3x3、5x5、7x7})使用更少的参数和 FLOPS 在 MobileNetV1 上实现了高 0.6% 的 mAP 和在 MobileNetV2 上高 1.1% 的 mAP。
3.4 消融研究
为了更好地理解 MixConv,我们提供了一些消融研究:
MixConv for Single Layer:除了将 MixConv 应用到整个网络之外,图 5 显示了 MobileNetV2 上的每层性能。 我们将 15 层中的一个替换为 (1) 内核大小为 9x9 的香草 DepthwiseConv9x9; 或 (2) MixConv3579 有 4 组内核:{3x3, 5x5, 7x7, 9x9}。 如图所示,大内核大小对不同层的影响不同:对于大多数层,准确率变化不大,但对于步幅为 2 的某些层,较大的内核可以显着提高准确率。 值得注意的是,尽管 MixConv3579 只使用了比普通的 DepthwiseConv9x9 一半的参数和 FLOPS,但我们的 MixConv 在大多数层上实现了相似或稍好一点的性能。
通道分区方法:图 6 比较了两种通道分区方法:等分区 (MixConv) 和指数分区 (MixConv+exp)。 正如预期的那样,通过将更多的通道分配给更小的内核,指数分区对于相同的内核大小需要更少的参数和 FLOPS。 我们的实证研究表明,指数通道分区在 MobileNetV1 上的性能仅略好于等分区,但如果同时考虑 MobileNet V1 和 V2,则没有明显的赢家。 指数分区的一个可能限制是大内核没有足够的通道来捕获高分辨率模式。
Dilated Convolution:图 6 还比较了 dilated convolution(表示为 MixConv+dilated)的性能。 对于内核大小 KxK,它使用扩张率 (K −1)/2 的 3x3 内核:例如,9x9 内核将被扩张率 4 的 3x3 内核替换。值得注意的是,由于 Tensorflow 扩张卷积与步幅不兼容 2,我们只对stride为1的层使用空洞卷积。如图所示,空洞卷积对小核有合理的性能,但对大核准确率下降很快。 我们的假设是,当大内核的扩张率很大时,扩张卷积会跳过很多局部信息,这会损害准确性。
4 MixNet
为了进一步证明 MixConv 的有效性,我们利用神经架构搜索的最新进展来开发一个新的基于 MixConv 的模型系列,称为 MixNets。
4.1 架构搜索
我们的神经架构搜索设置类似于最近的 MnasNet [29] 和 FBNet [30],它们使用 MobileNetV2 [23] 作为基线网络结构,并搜索最佳内核大小、扩展比、通道大小和其他设计选择。 我们的搜索空间还包括 swish 激活 [4, 20]、挤压和激发模块 [8](类似于 [29])以及用于 1x1 卷积的组大小为 1 或 2 的分组卷积(类似于 [30])。 然而,与这些使用普通深度卷积作为基本卷积运算的先前工作不同,我们采用我们提出的 MixConv 作为搜索选项。 具体来说,我们有五个 MixConv 候选者,组大小为 g = 1,……,5。
- 3x3:MixConv 与一组滤波器 (g = 1),内核大小为 3x3。
- …
- 3x3、5x5、7x7、9x9、11x11:具有五组过滤器 (g = 5) 的 MixConv,内核大小为{3x3、5x5、7x7、9x9、11x11}。 每个组的通道数大致相同。
为了简化搜索过程,我们在搜索空间中不包括指数通道分区或扩张卷积,但在未来的工作中集成它们是微不足道的。
与最近的神经架构搜索方法 [2, 29, 30] 类似,我们直接在 ImageNet 训练集上进行搜索,然后从搜索中挑选一些表现最好的模型来验证它们在 ImageNet 验证集和迁移学习数据集上的准确性。
4.2 ImageNet 上的 MixNet 性能
表 2 显示了 MixNets 的 ImageNet 性能。 在这里,我们从神经架构搜索中获得 MixNet-S 和 M,并使用深度乘数 1.3 放大 MixNet-M 以获得 MixNet-L。 所有模型都使用与 MnasNet [29] 相同的设置进行训练。
总的来说,我们的 MixNets 优于所有最新的移动 ConvNets:与手工模型相比,在相同的 FLOPS 约束下,我们的 MixNets 比 MobileNetV2 [23] 提高了 4.2% 的 top-1 准确率,比 ShuffleNetV2 [18] 提高了 3.5%; 与最新的自动化模型相比,我们的 MixNets 在类似的 FLOPS 约束下实现了比 MnasNet (+1.3%)、FBNets (+2.0%)、ProxylessNAS (+2.2%) 更好的精度。 我们的模型也实现了与最新的 MobileNetV3 [6] 相似的性能,它是与我们的工作同时开发的,除了架构搜索之外还进行了一些手动优化。 特别是,我们的 MixNet-L 在典型的移动 FLOPS (<600M) 约束下实现了最新的 78.9% top-1 准确率。
图 7 可视化了 ImageNet 的性能比较。 我们观察到,与以前手工制作的移动 ConvNets [18, 23] 相比,神经架构搜索的最新进展显着提高了模型性能 [2, 29, 30]。 但是,通过引入一种新型高效的 MixConv,我们可以在相同的神经架构搜索技术的基础上进一步提高模型的准确性和效率。
4.3 MixNet 架构
为了理解为什么我们的 MixNet 能够实现更好的准确性和效率,图 8 说明了表 2 中 MixNet-S 和 MixNet-M 的网络架构。一般来说,它们都在整个网络中使用了具有不同内核大小的各种 MixConv:小内核是 在早期阶段更常见以节省计算成本,而大内核在后期更常见以提高准确性。 我们还观察到,更大的 MixNet-M 倾向于使用更大的内核和更多的层来追求更高的准确度,但代价是更多的参数和 FLOPS。 与因大内核尺寸而遭受严重精度下降的普通深度卷积不同(图 1),我们的 MixNets 能够利用非常大的内核(例如 9x9 和 11x11)从输入图像中捕获高分辨率模式,而不会损害模型的精度和效率。
4.4 迁移学习表现
我们还在四个广泛使用的迁移学习数据集上评估了我们的 MixNet,包括 CIFAR-10/100 [13]、Oxford-IIIT Pets [19] 和 Food-101 [1]。表 3 显示了他们的训练集大小、测试集大小和类数的统计数据。
图 9 将我们的 MixNet-S/M 与之前关于迁移学习精度和 FLOPS 的模型列表进行了比较。对于每个模型,我们首先在 ImageNet 上从头开始对其进行训练,然后使用与 [12] 类似的设置微调目标数据集上的所有权重。 MobileNets [7, 23]、Inception [24]、ResNet [5]、DenseNet [10] 的准确率和 FLOPS 数据来自 [12]。一般来说,我们的 MixNets 在所有这些数据集上都显着优于以前的模型,尤其是在最广泛使用的 CIFAR-10 和 CIFAR-100 上,这表明我们的 MixNets 也可以很好地推广到迁移学习。特别是,我们的 MixNet-M 以 3.49M 的参数和 352M FLOPS 实现了 97.92% 的准确率,比 ResNet-50 [5] 的效率提高了 11.4 倍,准确率提高了 1%。
5 结论
在本文中,我们重新审视了内核大小对深度卷积的影响,并发现传统的深度卷积受到单内核大小的限制。 为了解决这个问题,我们提出了 MixConv,它在单个操作中混合多个内核以利用不同的内核大小。 我们表明,我们的 MixConv 是 vanilla depthwise 卷积的简单替代品,并提高了 MobileNets 在图像分类和对象检测任务上的准确性和效率。 基于我们提出的 MixConv,我们使用神经架构搜索技术进一步开发了一个新的 MixNet 系列。 实验结果表明,在 ImageNet 分类和四个广泛使用的迁移学习数据集上,我们的 MixNets 比所有最新的移动 ConvNets 实现了显着更好的准确性和效率。