深度卷积、点卷积和深度可分离卷积到底有什么关系?

注:本文为原创文章,未经允许,请勿转载。

我们在设计轻量网络时常用的深度卷积、深度可分离卷积,相较于标准卷积,其在大幅度降低参数量的同时可以将性能损失维持在较小的范围内。但这几个模块为何具有这样神奇的效果?本文将带你一探究竟。

标准卷积

操作示意

假设输入特征图的大小为$H\times W \times M$,输出特征图的大小为$H\times W \times N$。对于标准卷积而言,其卷积核大小为$K\times K\times M$,卷积核个数为$N$。其卷积操作如下图所示:

对于每一次卷积操作,都会将输入特征图的$M$个输入通道的信息进行融合,得到输出特征图的单个通道上的一个点。单个卷积核在输入特征图上滑动,得到输出特征图的一个维度。

计算量

这里的计算量指的是乘法操作。计算卷积操作计算量的思路如下:

  • 对于输出特征图上的单个通道上一个点,其计算量为$K\times K\times M$;
  • 进而,对于输出特征图的单个通道,其计算量为$H\times W \times K\times K\times M$;
  • 最终,输出特征图的$N$个通道的计算量为$N\times H\times W \times K\times K\times M$。

深度卷积

操作示意

在标准卷积中,每一次卷积操作都会融合输入特征图的$M$个输入通道的信息。而在深度卷积中,每一次卷积操作之后处理与其对应的单个输入通道的信息。深度卷积常被用于对输入特征图的空间信息进行融合。

假设输入特征图的大小为$H\times W \times M$,则输出特征图的大小为$H\times W \times M$,卷积核大小为$H\times W$,卷积核个数为$M$。其卷积操作如下图所示:

计算量

计算量的计算方式与标准卷积的计算方式相同。

  • 对于输出特征图上的单个通道上的一个点,其计算量为$K\times K$;
  • 进而,对于输出特征图的单个通道,其计算量为$H\times W\times K\times K$;
  • 最终,输出特征图的$M$个通道的计算量为$M\times H\times W\times K\times K$。

点卷积

操作示意

所谓点卷积,即在标准卷积的基础上将卷积核的大小减少为$1\times 1$。点卷积常被用于对输入特征图的通道信息进行融合,来降低特征图的通道数。

假设输入特征图的大小为$H\times W \times M$,则输出特征图的大小为$H\times W \times N$,卷积核大小为$1\times 1\times M$,卷积核个数为$N$。其卷积操作如下图所示:

计算量

  • 对于输出特征图上的单个通道上的一个点,其计算量为$1\times 1\times M$;
  • 进而,对于输出特征图的单个通道,其计算量为$H\times W\times 1\times 1\times M$;
  • 最终,输出特征图的$N$个通道的计算量为$N\times H\times W\times 1\times 1\times M$

深度可分离卷积

所谓深度可分离卷积,即首先使用深度卷积对输入特征图的空间信息进行融合,接着使用点卷积对特征图的通道信息进行融合。

假设输入特征图的大小为$H\times W \times M$,输出特征图的大小为$H\times W \times N$。深度可分离卷积的卷积核大小为$k\times K$。其卷积操作如下图所示:

计算量

深度可分离卷积的计算量实际上就是深度卷积的计算量加上点卷积的计算量:

那么,相较于标准卷积,深度可分离卷积的计算量减少的比例就是: