【图像分类】移动端网络中最常用的几种卷积操作

随着AlexNet 在2012年ImageNet 竞赛中赢得冠军之后,卷积神经网络在计算机视觉领域已开始变得无处不在。一个大的研究趋势是研究更深、更复杂的网络,从而实现更高的准确率。但这些提升准确率的改进并不一定会使网络在大小和速度上更加高效。

然而在许多现实世界的应用中,比如智能手机、机器人、无人机、自动驾驶、增强现实等,图像识别任务需要在计算资源受限的平台上高效的执行。

为此,出现了很多研究针对移动端与嵌入式设备上应用的小型高效的网络,比如MobileNetV1、MobileNetV2、ShuffleNetV1、ShuffleNetV2等。

为了后续更加深入的理解这些高效而准确的网络,本文先做一个铺垫,介绍这些网络中最常使用的卷积操作。当我们将这些不同类型的卷积操作以及它们之间的关系、它们的计算量的对比了解清楚,我们在读这些论文时才更容易真正明白为什么这些网络是小型且高效的。

我们从卷积的一般到特例,下文分别逐一介绍

  • 普通的convolution
  • group convolution
  • depthwise convolution
  • pointwise convolution
  • pointwise group convolution

1. 普通convolution

假设输入的特征图大小为 D F ∗ D F ∗ M D_F * D_F *M DFDFM,其中 D F D_F DF表示输入特征图的空间宽度和高度, M M M表示输入特征图的通道数(深度);

假设卷积核大小为 D K ∗ D K ∗ M ∗ N D_K * D_K * M * N DKDKMN,其中 D K D_K DK表示卷积核的空间宽度和高度, M M M表示输入特征图的通道数,N表示卷积核的个数; 且卷积核的步距stride=1,采用same padding的填充方式。

那么得到的输出特征图大小为为 D F ∗ D F ∗ N D_F * D_F * N DFDFN。整个过程如下图所示。

根据以上的卷积过程,我们知道普通的convolution操作有两个特点:

  • 每一个卷积核的通道数量,与输入特征图的通道数一致;
  • 输出特征图的通道数量,与卷积核的个数一致。

我们计算得到一个普通的convolution的计算量是 D K ∗ D K ∗ M ∗ N ∗ D F ∗ D F D_K * D_K * M * N * D_F * D_F DKDKMNDFDF。其中$D_K * D_K * M $ 是计算得到输出特征图中的一个点的计算量,且输出特征图中一共有 N ∗ D F ∗ D F N * D_F * D_F NDFDF个点。

在这里插入图片描述

2. group convolution

假设输入的特征图大小为 D F ∗ D F ∗ M D_F * D_F *M DFDFM,其中 D F D_F DF表示输入特征图的空间宽度和高度, M M M表示输入特征图的通道数(深度);

假设我们要分的组 g r o u p = g group=g group=g, 且我们仍然使输出特征图的通道数为 N N N

那么我们就对输入特征图的通道分为 g g g组。对于每一组来说,

  • 输入的特征图大小为 D F ∗ D F ∗ ( M / g ) D_F * D_F * (M/g) DFDF(M/g)
  • 卷积核大小为 D k ∗ D k ∗ ( M / g ) ∗ ( N / g ) D_k * D_k * (M/g) * (N/g) DkDk(M/g)(N/g)

我们计算一下group convolution 的计算量。

首先我们先计算一个组的计算量,然后将得到的计算量乘以 g g g即得到总共的计算量。

那么一个组的计算量为 D K ∗ D K ∗ ( M / g ) ∗ ( N / g ) ∗ D F ∗ D F D_K * D_K * (M/g) * (N/g) * D_F * D_F DKDK(M/g)(N/g)DFDF

那么group convolution的计算量为 D K ∗ D K ∗ ( M / g ) ∗ ( N / g ) ∗ D F ∗ D F ∗ g = D K ∗ D K ∗ M ∗ N ∗ D F ∗ D F g D_K * D_K * (M/g) * (N/g) * D_F * D_F * g = \frac{D_K * D_K * M * N * D_F * D_F}{g} DKDK(M/g)(N/g)DFDFg=gDKDKMNDFDF

可见,group convolution 的计算量是普通的convolution的 1 g \frac{1}{g} g1倍。

在这里插入图片描述

3. depthwise convolution

在上一节中,我们已经知道:

当我们对输入特征图的通道分为 g g g组,对于每一组来说,

  • 输入的特征图大小为 D F ∗ D F ∗ ( M / g ) D_F * D_F * (M/g) DFDF(M/g)
  • 卷积核大小为 D k ∗ D k ∗ ( M / g ) ∗ ( N / g ) D_k * D_k * (M/g) * (N/g) DkDk(M/g)(N/g)

当分组个数 g = M g = M g=M,且 M = N M= N M=N时,对于每一组来说,

  • 输入的特征图大小为 D F ∗ D F ∗ 1 D_F * D_F * 1 DFDF1
  • 卷积核大小为 D k ∗ D k ∗ 1 ∗ 1 D_k * D_k *1* 1 DkDk11

也即是说,一共有N=M个卷积核,每个卷积核只有一个通道,且与输入特征图的一个通道相对应。如下图所示。

在这里插入图片描述

可见,depthwise convolution 只是group convolution 的一种特殊形式。

那么我们可以套用group convolution的方式来计算depthwise convolution 的计算量。

可以算出depthwise convolution 的计算量是 D K ∗ D K ∗ M ∗ N ∗ D F ∗ D F g = D K ∗ D K ∗ M ∗ D F ∗ D F \frac{D_K * D_K * M * N * D_F * D_F}{g} = D_K * D_K * M * D_F * D_F gDKDKMNDFDF=DKDKMDFDF

4. pointwise convolution

pointwise convolution 只是普通 convolution的一种特例。

它是一种卷积核大小是 1 ∗ 1 1*1 11 convolution,其他和普通卷积没有区别。如图所示。

1 ∗ 1 1*1 11 convolution是实现对输入特征图在通道方向上的加权组合,来生成新的特征图。并根据卷积核的个数的多少,决定输出特征图的通道数。

可见, 1 ∗ 1 1*1 11 convolution的作用主要有两点:

  • 对输入特征图进行升维或者降维。
  • 对输入特征图的通道方向进行信息融合。

1 ∗ 1 1*1 11 convolution在很多经典网络中都有使用,比如GoogLeNet、ResNet、ResNext、MobileNet等等。它还有一个名称,叫bottleneck layer(瓶颈层)。

在第一节中我们介绍了普通 convolution的计算量是 D K ∗ D K ∗ M ∗ N ∗ D F ∗ D F D_K * D_K * M * N * D_F * D_F DKDKMNDFDF。且在pointwide convolution 中的 D K = 1 D_K=1 DK=1,那么pointwide convolution的计算量是 M ∗ N ∗ D F ∗ D F M * N * D_F * D_F MNDFDF

在这里插入图片描述

5. pointwide group convolution

pointwide group convolution 是group convolution的特殊形式。

它是一种卷积核大小是 1 ∗ 1 1*1 11的group convolution,其他和group convolution没有区别。如图所示。

为什么要使用pointwide group convolution呢?我们可以在ShuffleNet 论文中找到答案。文中提到在ResNext论文中,一个residual unit 中 pointwide convolution所占的计算量是整个单元计算量的93.4%。 当我们密集使用 pointwide convolution时整个网络的计算量开销是不适合小型网络的,也就没办法在移动端以及嵌入式设备上使用。

在第二节中我们计算出了group convolution的计算量为 D K ∗ D K ∗ ( M / g ) ∗ ( N / g ) ∗ D F ∗ D F ∗ g = D K ∗ D K ∗ M ∗ N ∗ D F ∗ D F g D_K * D_K * (M/g) * (N/g) * D_F * D_F * g = \frac{D_K * D_K * M * N * D_F * D_F}{g} DKDK(M/g)(N/g)DFDFg=gDKDKMNDFDF

那么pointwide group convolution的计算量为 M ∗ N ∗ D F ∗ D F g \frac{M * N * D_F * D_F}{g} gMNDFDF

**在这里插入图片描述**

小结

本文介绍了移动端网络中常用的卷积操作。后续我们在阅读论文中会发现MobileNet 是使用了 depthwise convolution + pointwise convolution;ShuffleNet 是使用了pointwise group convolution + channel shuffle + depthwise convolution。

下篇文章再见。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值