深度分离卷积神经网络

2025年6月25日 | 阅读 4 分钟

在人工神经网络(ANNs)中,卷积是一个至关重要的数学过程。卷积神经网络(CNNs)可以利用图像帧对数据进行分类并学习特征。CNNs有许多不同的类型。深度可分离卷积神经网络就是其中一种CNN。

这些CNNs通常用于以下两个原因:

  • 与标准CNNs相比,它们具有更少的参数需要调整,这减少了过拟合。
  • 由于它们计算量更少,因此在计算上更经济,适合移动视觉应用。

卷积神经网络(CNN)中最常用的卷积层是2D卷积。一种新型的卷积层,称为深度可分离卷积,被用于一个显著更快、更小的CNN架构,称为Mobile Net。由于其紧凑的尺寸,这些模型被认为对于在嵌入式和移动设备上实施非常有用。因此得名 Mobile Net。

深度卷积

差异

深度卷积和2D卷积的主要区别在于,深度卷积保持每个输入通道独立,而2D卷积则对所有或多个输入通道进行卷积。

方法

  • 三维输入张量被分割成不同的通道。
  • 使用每个通道的滤波器(2D)对输入进行卷积。
  • 每个通道的输出被组合起来,为整个3D张量提供输出。

可深度分离的卷积

通常,深度卷积与可深度分离的卷积结合使用。这包含两个部分:1. 过滤(所有先前的过程)和 2. 组合(将三个颜色通道组合起来以创建所需数量的通道;在下面的示例中,我们可以看到三个通道如何组合成单个输出通道)。

为什么深度可分离卷积如此高效?

  • 对所有通道执行-1x1的深度卷积。
  • 假设我们有一个维度为 8x8x3 的输入张量。
  • 所需的输出张量大小为 8x8x256。

2D 卷积

  • 对于一个总共 1,228,800 的计算,所需的乘法次数为 (8x8) x (5x5x3) x (256)。

可深度分离的卷积

  • 所需的乘法次数为:

过滤:由于被分割成单个通道,需要一个 5x5x1 的滤波器而不是一个 5x5x3 的滤波器,并且由于有三个通道,总共需要三个 5x5x1 的滤波器。

(8x8) x (5x5x1) x (3) = 3,800

组合:需要总共 256 个通道,因此:

(8x8) x (1x1x3) x (256) = 49,152

3,800 + 49,152 相乘得到总共 53,952。

因此,深度可分离卷积只需要 53,952 次乘法就可以获得与 2D 卷积(需要 1,228,800 次乘法)相同的输出。

最后,

1,228,800 / 53,952 = 23 倍的乘法次数减少。

因此,深度可分离卷积具有非常高的效率。这些是 Mobile Net 架构中包含的层,以减少计算量并降低功耗,使其可以在缺乏强大图形处理单元的移动和嵌入式设备上使用。

普通卷积如何工作

考虑以下输入数据维度:Df x Df x M,其中 M 是通道数,Df x Df 是图像的大小(RGB 图像为 3)。假设有 N 个滤波器或核,维度为 Dk x Dk x M。一次普通卷积操作的输出大小为 Dp x Dp x N。

Depth-wise Separable Convolutional Neural Networks

对于单次卷积操作的乘法次数,滤波器大小等于 Dk x Dk x M。

N 个滤波器中的每一个在垂直和水平方向上都滑动 Dp 次。

执行卷积所需的总乘法次数(每次卷积的乘法次数)为 N x Dp x Dp x。

总乘法次数为 N x Dp² x Dk² x M。

深度可分离卷积

现在来看深度可分离卷积。此过程包含两个操作:

  • 深度卷积。
  • 逐点卷积。

1. 深度卷积。

Depth-wise Separable Convolutional Neural Networks

与普通CNN不同,普通CNN同时应用于所有M个通道,而深度操作一次只应用于一个通道。因此,这里使用的滤波器/核将是 Dk x Dk x 1。考虑到输入数据有 M 个通道,需要 M 个这样的滤波器。输出大小将是 Dp x Dp x M。

过程成本

单次卷积操作需要 Dk x Dk 次乘法。

由于所有 M 个通道都滑动了 Dp x Dp 次滤波器,因此执行深度卷积的总乘法次数为 M x Dp x Dp x Dk x Dk,

总乘法次数 = M x Dk² x Dp²

2. 逐点卷积。

Depth-wise Separable Convolutional Neural Networks

在 M 个通道上使用 1 x 1 的卷积过程。因此,此操作的滤波器大小为 1 x 1 x M。如果使用 N 个这样的滤波器,则输出大小为 Dp x Dp x N。

过程成本

每次卷积操作需要 1 x M 次乘法。

考虑到滤波器在 Dp x Dp 的方向上滑动,

M x Dp x Dp x(滤波器数量)是总乘法次数。

执行逐点卷积,

M x Dp² x N 是总乘法次数。

因此,为了达到最佳操作,

总乘法次数等于深度卷积和逐点卷积的总和。

总乘法次数的计算公式为:M*Dk²*Dp² + M*Dp²*N = M*Dp²*(Dk² + N)

执行深度可分离卷积,

总乘法次数等于 M x (Dk² + N) x Dp²。