快捷搜索:  汽车  科技

初始化启动大数据环境的代码(MixConv来自GoogleBrain的混合Depthwise卷积核)

初始化启动大数据环境的代码(MixConv来自GoogleBrain的混合Depthwise卷积核)图2. 深度可分离卷积操作图1. 原始卷积操作谷歌发布的论文Xception: Deep Learning with Depthwise Separation Convolutional kernel 中首先引入了Depthwise Separation Convolutional kernel 的概念,有助于提高卷积运算的速度。它被证明是获得高效率的现代ConvNets和部署到实时边缘计算设备的关键因素之一。最近,谷歌在文章MixConv: Mixed Depthwise Convolutional Kernels中发布了一个新的Depthwise Convolutional Kernels的范式。在本文中,我们将详细概述这种新的卷积操作,并介绍文中提到的新的移动ConvNet系列MixNets。

作者:Shreejal Trivedi

编译:ronghuaiyang

导读

带你理解Google开发的一种depthwise卷积的新范式。

初始化启动大数据环境的代码(MixConv来自GoogleBrain的混合Depthwise卷积核)(1)

卷积神经网络是一种复杂的计算模型。模型越深,复杂性就越高。由于这种不太好的特点,如何将这些模型用于实时场景就变得非常重要。

谷歌发布的论文Xception: Deep Learning with Depthwise Separation Convolutional kernel 中首先引入了Depthwise Separation Convolutional kernel 的概念,有助于提高卷积运算的速度。它被证明是获得高效率的现代ConvNets和部署到实时边缘计算设备的关键因素之一。

最近,谷歌在文章MixConv: Mixed Depthwise Convolutional Kernels中发布了一个新的Depthwise Convolutional Kernels的范式。

在本文中,我们将详细概述这种新的卷积操作,并介绍文中提到的新的移动ConvNet系列MixNets

深度可分离卷积核的简单回顾
  • 我们先快速的回顾一下深度可分离卷积核。

初始化启动大数据环境的代码(MixConv来自GoogleBrain的混合Depthwise卷积核)(2)

图1. 原始卷积操作

  • 如图所示,在5x10x10的feature map(青蓝色)和3x3 kernel(红色)之间进行简单的卷积操作。考虑paddingstride = 1,输出通道的数量= 64
  • 在标准卷积中,将一个3D 5x3x3 kernel与整个feature map进行卷积,得到1x10x10输出(蓝色片)。每次3D卷积相乘的次数为4500(3*3*5*10*10)。经过64次这样的三维卷积运算,将每个输出进行堆叠,得到一个64x10x10的输出feature map。经过一个完整的卷积运算后,总的复杂度是4500 * 64 = 288000 FP32次乘法

初始化启动大数据环境的代码(MixConv来自GoogleBrain的混合Depthwise卷积核)(3)

图2. 深度可分离卷积操作

  • 现在考虑上面的场景。深度可分离卷积运算将标准卷积分为两个部分:深度卷积点卷积
Depthwise Convolution
  • 将每个2D 3x3滤波器分别应用于输入feature map的不同通道上,生成单独的空间2D特征图,并将其相互叠加,形成中间转换输出(图2中黄色部分)。

如你所见,不同于标准卷积,Depthwise卷积层不会增加输出feature map中的通道数量。用于操作的内核数等于feature map的输入通道数。在我们的例子中,内核的数量= 5

  • Depthwise卷积运算完成后相乘次数为4500(5*3*3*10*10)
  • 在深度卷积中有一个深度乘子m的概念。在每个Depthwise卷积操作中,输出C*m个通道。

例如,如果我们保持深度乘子= 2,在我们的例子中,最终的中间输出大小(黄色)将变成(10 10 10),因为每个depthwise卷积将给我们的输出为(2 10 10),而不是仅仅2D空间图。

Pointwise Convolution
  • Pointwise卷积增加了中间生成的feature map的通道数(黄色为5x10x10→64x10x10)。
  • 它使用3D 的10x1x1核,这个核与feature map的每个点进行卷积得到结果输出。
  • 使用的kernel数量等于输出通道的数量。在我们的例子中,它是64
  • 最后的pointwise卷积运算的乘法总数是32000(64*1*1*5*10*10)

深度可分卷积运算的复杂度为32000 4500 = 36500 FP32,远小于FP32 288000。该操作的这种特性有助于以非常低的计算能力实现相同的输出,因此,它是你会在今天的移动架构(如MobileNets ShuffleNets)中发现的最著名的卷积操作之一。

在设计具有depthwise卷积核的卷积网络时,一个重要但经常被忽略的因素是kernel的大小。虽然传统的做法是简单地使用3x3核,但最近的研究结果表明,更大的内核尺寸,如5x5内核和7x7内核可以潜在地提高模型的准确性和效率。

MixConv:一种新的深度可分离卷积的范式
  • MixConv方法与深度可分离卷积非常相似。但是,他们没有将固定大小的kxk核应用到feature map的单个空间通道上,而是将通道划分为组,并通过改变每组的kernel大小来使用卷积操作 —— 下面给出了的可视化表示。

初始化启动大数据环境的代码(MixConv来自GoogleBrain的混合Depthwise卷积核)(4)

图3. 原始(左)深度卷积运算与MixConv(右)的区别

通过使用不同大小的kernel,往往增加了网络的感受域,进一步提高了模型在分类/检测任务上的性能。

  • 步骤1:将输入feature map (C H W)划分为g组不同通道C1 C2,…,Cg等,对这些小的feature map进行不同形状的kernel的Depthwise卷积(表示为*),如图3所示。
  • 步骤2:生成的feature map拼接后,最后使用的Pointwise 卷积(表示为X)增加feature map中的通道数(Co H W)

初始化启动大数据环境的代码(MixConv来自GoogleBrain的混合Depthwise卷积核)(5)

图4. MixConv操作流程

在某些平台上,MixConv可以实现为单个op,并通过分组卷积进行优化。然而,正如图中所示,MixConv可以被看作是对普通深度卷积的简单替代。

初始化启动大数据环境的代码(MixConv来自GoogleBrain的混合Depthwise卷积核)(6)

Snippet: 在TensorFlow中实现的MixConv

  • 一个简单而直接的结构对MixConv进行了实现

分组的大小g:

  • 分组大小用于确定需要考虑的不同kernel的数量。每一组与不同大小的kernel进行深度卷积,如图4所示。
  • 如果我们选择g = 1,MixConv就相当于普通的深度卷积运算。
  • 如本文所述,为了获得最佳性能,作者对每一层使用不同的分组大小,通常分组大小的样本空间为g∈[1 5]

每个分组的kernel大小

  • 不同大小的kernels被用于每组中。作者提出了一种简单的方法来给每个组分配内核大小。对于每个下标为i的组,分配的kernel大小为2 *i 1(注意:i从1开始)。

例如,一个4组的MixConv使用的内核大小为{3x3 5x5 7x7 9x9}。有了这个限制,对于任意大小的分组数量g,内核大小都被预定义好了,从而简化了我们的设计过程。

每组的通道的数量

  • 文章考虑了两种方法来进行通道划分

等尺寸划分:每一组包含相同数量的通道数。比如,组的数量为g==4,对于64通道的输入,每组的通道数量是 (32 16 8 4)。

指数划分:第i组具有总的通道数的1 / 2^i,比如,组的数量为g==4,对于64通道的输入,每组的通道数量是 (16 16 16 16)。

你可能想知道MixConv操作的可用性和参数的数量。

通过对MobileNet族架构的一系列研究,他们证明了在目前的设计中使用MixConv设计在COCO检测上优于基线移动架构。

初始化启动大数据环境的代码(MixConv来自GoogleBrain的混合Depthwise卷积核)(7)

表1. MixConv和基线架构MobileNets的对比

MixNet — 在用MixConv实现的MobileNet架构组上进行NAS
  • 神经结构搜索(NAS)已经在帮助获得卷积神经网络的最佳结构设计之一。
  • 作者将MixConv集成到了MobileNet架构中,并运行NAS,开发了一个新的SOTA的移动架构族MixNets
  • 这些网络有不同的组大小选择,每个组的内核大小,和通道分配的数量。

样本空间从g=1 k=3x3开始,到g=5 k=3x3 5x5 7x7 9x9 11x11结束。使用等分通道制度来分配每个组的通道

  • 他们从NAS获得了三个架构,其性能超过了所有现有的移动架构设计。分别叫它们MixNet-S,MixNet-M和MixNet-L
  • MixNet-L可以由MixNet-M得到,使用深度乘子为m=1.3

初始化启动大数据环境的代码(MixConv来自GoogleBrain的混合Depthwise卷积核)(8)

图5. MixNet-S(Top) 和MixNet-M(Bottom)

这两种架构在整个网络中使用各种不同内核大小的MixConv:小内核在前期更常见,以节省计算成本,而大内核在后期更常见,以获得更好的精度。我们还观察到,更大的MixNet-M倾向于使用更多的大内核和更多的层,以追求更高的精度,但是使用了更多的参数和FLOPS。

初始化启动大数据环境的代码(MixConv来自GoogleBrain的混合Depthwise卷积核)(9)

图6. MixNet在ImageNet数据集上不同架构的比较。

总结

对于不同内核大小的深度卷积的研究被应用到普通的移动架构中,如mobilenet shufflenet等。文章提出了MixConv,即在单个操作中混合多个内核,以利用不同的内核大小。

文章中还提出了新的移动架构设计 —— 使用神经结构搜索技术的MixNets。这些新模型在迁移学习和分类数据集ImageNet上取得了显著的提升。

MixNets的TensorFlow官方实现:https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet/mixnet

MixNets的PyTorch实现:https://github.com/rwightman/pytorch-image-models/blob/d1b5dddad1dd173b1c720c5bc0688e870c2bddf7/timm/models/efficientnet.py

英文原文:https://medium.com/visionwizard/mixconv-mixed-depthwise-convolutional-kernels-from-google-brain-628cf5802264

猜您喜欢: