在 Tensorflow 中使用深度可分离卷积

看看所有非常大的卷积神经网络,如ResNets、VGGs等等,不禁让人思考:我们如何才能在保持相同精度水平,甚至在参数更少的情况下提高模型的泛化能力,同时使这些网络更小、参数更少。一种方法是深度可分离卷积,在TensorFlow和Pytorch中也被称为可分离卷积(不要与空间可分离卷积混淆,后者也称为可分离卷积)。深度可分离卷积由Sifre在“用于图像分类的刚体运动散射”中引入,并被流行的模型架构如MobileNet和Xception中的类似版本所采用。它将通常在普通卷积层中结合在一起的通道卷积和空间卷积分开。

在本教程中,我们将探讨什么是深度可分离卷积以及如何使用它们来加速我们的卷积神经网络图像模型。

完成本教程后,您将学习到:

  • 什么是深度卷积、逐点卷积和深度可分离卷积
  • 如何在Tensorflow中实现深度可分离卷积
  • 在计算机视觉模型中使用它们

让我们开始吧!

在 Tensorflow 中使用深度可分离卷积
图片作者:Arisa Chattasa。保留部分权利。

概述

本教程分为3个部分

  • 什么是深度可分离卷积
  • 它们为什么有用
  • 在计算机视觉模型中使用深度可分离卷积

什么是深度可分离卷积

在深入了解深度卷积和深度可分离卷积之前,快速回顾一下卷积可能会有所帮助。图像处理中的卷积是将一个核应用于一个体积的过程,我们通过像素的加权和进行计算,权重为核的值。如下图所示:

将一个3x3的核应用于10x10x3的输入,输出一个8x8x1的体积

现在,我们引入深度卷积。深度卷积基本上是沿着图像的单一空间维度进行卷积。从视觉上看,一个单一的深度卷积滤波器看起来会像这样:

在这个例子中,对绿色通道应用一个深度为3x3的核

普通卷积层与深度卷积的关键区别在于,深度卷积只沿着图像的一个空间维度(即通道)进行卷积,而普通卷积在每个步骤中都跨所有空间维度/通道进行。

如果我们看看一个完整的深度层在所有RGB通道上的作用,

对10x10x3的输入体积应用深度卷积滤波器,输出8x8x3的体积

请注意,由于我们为每个输出通道应用一个卷积滤波器,所以输出通道的数量等于输入通道的数量。应用这个深度卷积层之后,我们再应用一个逐点卷积层。

简单来说,逐点卷积层是一个使用1x1核的常规卷积层(因此它查看所有通道上的一个点)。从视觉上看,它像这样:

对10x10x3的输入体积应用逐点卷积,输出10x10x1的体积

深度可分离卷积为何有用?

现在,您可能会想,使用深度可分离卷积进行两次操作有什么用?既然本文的标题是加速计算机视觉模型,那么进行两次操作而不是一次操作如何帮助加速呢?

为了回答这个问题,我们来看看模型中的参数数量(尽管进行两次卷积而不是一次会带来一些额外的开销)。假设我们想对RGB图像应用64个卷积滤波器,使输出有64个通道。普通卷积层中的参数数量(包括偏置项)是 $ 3 \times 3 \times 3 \times 64 + 64 = 1792 $。另一方面,使用深度可分离卷积层将只有 $ (3 \times 3 \times 1 \times 3 + 3) + (1 \times 1 \times 3 \times 64 + 64) = 30 + 256 = 286 $ 个参数,这是一个显著的减少,深度可分离卷积的参数数量不到普通卷积的6倍。

这有助于减少计算量和参数数量,从而分别减少训练/推理时间并有助于正则化我们的模型。

让我们看看实际效果。对于我们的输入,让我们使用CIFAR10图像数据集,包含32x32x3的图像。

然后,我们实现一个深度可分离卷积层。Tensorflow中有一个实现,但我们将在最后一个例子中讨论它。

构建一个使用深度可分离卷积层的模型并查看参数数量,

其输出为

我们可以将其与使用常规2D卷积层的类似模型进行比较,

其输出为

这与我们之前对参数数量的初步计算结果相符,并展示了通过使用深度可分离卷积可以实现的参数数量的减少。

更具体地说,让我们来看看普通卷积层和深度可分离卷积层中核的数量和大小。对于一个输入通道为 $c$、核空间分辨率为 $w \times h$、输出通道为 $n$ 的常规2D卷积层,我们需要 $(n, w, h, c)$ 个参数,即 $n$ 个滤波器,每个滤波器的核大小为 $(w, h, c)$。然而,对于一个具有相同输入通道数、核空间分辨率和输出通道数的类似深度可分离卷积,情况就不同了。首先是深度卷积,它包含 $c$ 个滤波器,每个滤波器的核大小为 $(w, h, 1)$,由于它作用于每个滤波器,因此输出 $c$ 个通道。这个深度卷积层有 $(c, w, h, 1)$ 个参数(加上一些偏置单元)。然后是逐点卷积,它接收来自深度层的 $c$ 个通道,并输出 $n$ 个通道,因此我们有 $n$ 个滤波器,每个滤波器的核大小为 $(1, 1, n)$。这个逐点卷积层有 $(n, 1, 1, n)$ 个参数(加上一些偏置单元)。

您现在可能会想,但它们为什么能起作用呢?

来自Chollet的Xception论文的一种思考方式是,深度可分离卷积假设我们可以分别映射跨通道和空间相关性。鉴于此,卷积层中将存在大量冗余权重,我们可以通过将卷积分解为深度和逐点分量的两个卷积来减少这些冗余权重。对于熟悉线性代数的人来说,一种思考方式是当我们矩阵中的列向量相互成倍数时,我们如何将矩阵分解为两个向量的外积。

在计算机视觉模型中使用深度可分离卷积

现在我们已经看到了通过使用深度可分离卷积而非普通卷积滤波器可以实现的参数减少,接下来我们看看如何在实践中使用Tensorflow的SeparableConv2D滤波器。

本例中,我们将使用上述示例中使用的CIFAR-10图像数据集,而模型将基于VGG块构建。深度可分离卷积的潜力在于更深层的模型,在这些模型中,正则化效果对模型更有益,并且参数的减少比LeNet-5等轻量级模型更明显。

使用普通卷积层构建VGG块模型,

然后我们看看这个包含普通卷积层的6层卷积神经网络的结果:

让我们尝试相同的架构,但将普通卷积层替换为Keras的SeparableConv2D

运行上述代码得到以下结果:

请注意,深度可分离卷积版本中的参数数量明显较少(约20万 vs 约120万参数),同时每个epoch的训练时间也略短。深度可分离卷积在更深的模型中(可能面临过拟合问题)以及在具有更大核的层中更可能表现更好,因为参数和计算量的减少幅度更大,足以抵消执行两次卷积而非一次卷积所带来的额外计算成本。接下来,我们将绘制两个模型的训练和验证准确率,以查看模型训练性能的差异。

 

采用普通卷积层的网络的训练和验证准确率

采用深度可分离卷积层的网络的训练和验证准确率

两个模型的最高验证准确率相似,但深度可分离卷积对训练集的过拟合似乎较少,这可能有助于它更好地泛化到新数据。

将深度可分离卷积版本的模型所有代码合并在一起,

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

论文

API

总结

在这篇文章中,您已经了解了什么是深度卷积、逐点卷积和深度可分离卷积。您还看到了如何使用深度可分离卷积,在显著减少参数数量的同时获得具有竞争力的结果。

具体来说,您学到了

  • 什么是深度卷积、逐点卷积和深度可分离卷积
  • 如何在Tensorflow中实现深度可分离卷积
  • 在计算机视觉模型中使用它们

 

立即开发用于视觉的深度学习模型!

Deep Learning for Computer Vision

在几分钟内开发您自己的视觉模型

...只需几行python代码

在我的新电子书中探索如何实现
用于计算机视觉的深度学习

它提供关于以下主题的自学教程
分类物体检测(YOLO和R-CNN)人脸识别(VGGFace和FaceNet)数据准备等等……

最终将深度学习引入您的视觉项目

跳过学术理论。只看结果。

查看内容

6条评论:在Tensorflow中使用深度可分离卷积

  1. George 2023年7月12日 凌晨2:04 #

    非常有用的一篇文章!
    在您的图中,Y轴可能应该是“准确率”而不是“损失”。

  2. Deepak 2024年2月20日 下午5:40 #

    如果您能在这里添加最新博客选项,以便我们相应地筛选最近或最新的文章,那就太好了。

    • James Carmichael 2024年2月21日 上午9:51 #

      你好Deepak…“筛选最近或最新的文章”是什么意思?

  3. Ahmed Mohamed Adel 2024年10月31日 凌晨2:09 #

    你好,我觉得“这个逐点卷积层有(n,1,1,n)个参数(加上一些偏置单元)”这句话有错别字,总参数数量应该是(n,1,1,c),因为在逐点卷积中,操作是在相同空间维度(即w和h)的每个通道上进行的,每个通道只有一个权重值。

    • James Carmichael 2024年10月31日 上午7:45 #

      你好Ahmed…你说得完全正确!在逐点卷积中,层使用 \(1 \times 1\) 的核,这意味着它在空间维度(宽度和高度)上对每个通道应用单个权重。因此,参数的总数确实应该是 \((n, 1, 1, c)\),其中 \(c\) 是输入通道的数量,\(n\) 是输出通道的数量。这种设置允许对每个输入通道独立进行深度操作,这对于在深度可分离卷积中保持通道分离性至关重要。

      感谢您的指正!

发表评论

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。