您的位置:首页 > 国际新闻

[深度学习] 深度可分离卷积_网络_曾先森 --- 学习不止于抵达,而在于远航-CSDN博客

时间:2020-03-11

深度可分卷积之所以如此命名,是因为它不仅处理空间维度,还处理深度维度通道数。通常,输入图像可以具有3个通道:RGB。经过几次卷积后,图像可能有多个通道。你可以想象每一个频道都是对那个画面的特殊诠释。例如,“红色”通道解释每个像素的“红色”,而“蓝色”通道解释每个像素的“蓝色”,而“绿色”通道解释每个像素的“绿色”。一个有64个通道的图像有64种不同的解释。

深度可分离卷积将一个核心分成两个独立的核心,并分别执行两个卷积:深度卷积和点卷积。

标准卷积过程可以查看图表。当卷积5×5卷积核时,相应图像区域中的所有通道被同时考虑。问题是,为什么必须同时考虑图像区域和通道?为什么我们不能分开考虑通道和空间?

深度可分卷积提出了一个新思路:不同的卷积核用于不同的输入通道进行卷积,它将普通的卷积运算分解成两个过程。

?假设有卷积过程?的输入具有k 3x3卷积。如果填充=1和步幅=1被设置,那么正常的卷积输出是?

Depthwise process

Depthwise指的是转移的过程?的输入被分成C组,然后每组被3×3卷积。这相当于收集每个通道的空间特征,即深度特征。输出

Pointwise process

Pointwise指的是右边?输入(以上输出)做k普通1x1卷积。这相当于收集每个点的特征,即逐点特征。深度点态的最终输出是什么?

两个实际示例

示例1

传统卷积运算

对于一个5x5像素和三个通道(形状为5x5× 3),它通过3× 3卷积核的卷积层(假设输出通道数为4,卷积核形状为3× 3× 4,最后输出4个特征映射,如果有相同的填充,大小与输入层(5x5)相同。如果不是,大小改为3×3

卷积层,共有4个滤波器,每个滤波器包含3个核,每个核的大小为3×3。因此,卷积层参数的数量可以通过以下公式计算:

示例1

其中一个过滤器只包含一个大小为3×3的内核。卷积部分的参数数量计算如下:

n _ depth wise=3×3×3=27

depth wise卷积。完成后要素地图的数量与输入图层中的通道数量相同。无法扩展要素地图。此外,该操作对于输入层的每个通道独立地执行卷积操作,并且不有效地利用相同空间位置中的不同通道的特征信息。因此,需要逐点卷积来组合这些特征映射,以生成新的特征映射

part 2逐点卷积

逐点卷积。其卷积核大小为1×1×M,M是前一层的通道数。因此,这里的卷积运算将在深度方向上组合前一步骤的地图,以生成新的要素地图。有几个卷积核和几个输出特征映射

由于卷积方法是1×1,卷积中涉及的参数数可以计算为:

评论的输出维度相同。常规卷积的参数数为:n _ std=4× 3× 3× 3=108

通过逐点卷积后。还输出了四个特征图,这与常规卷积

参数比较

评论的输出维度相同。常规卷积的参数数为:n _ std=4× 3× 3× 3=108

可分

逐点卷积。其卷积核大小为1×1×M,M是前一层的通道数。因此,这里的卷积运算将在深度方向上组合前一步骤的地图,以生成新的要素地图。有几个卷积核和几个输出特征映射

评论的输出维度相同。常规卷积的参数数为:n _ std=4× 3× 3× 3=108

在输入相同的情况下,还获得了四个特征映射,可分离卷积的参数约为常规卷积的1/3。因此,在参数相同的前提下,使用可分离卷积的神经网络层数可以做得更深。

例2

常规普通卷积

典型图像不是二维的;它也有深度、宽度和高度。假设我们有一个12×12×3像素的输入图像和一个12×12的RGB图像。

我们对图像进行5×5卷积,没有填充,步长为1。如果只考虑图像的宽度和高度,卷积过程为×12(5×5)c8×8。5x5内核每25个像素执行一次标量乘法,每次输出一个数字。由于没有填充(12-5 1=8),我们最终得到一个8×8像素的图像。

但是,由于图像有3个通道,卷积核也需要3个通道。这意味着,每次内核移动时,5x5x3=75次乘法运算,而不是5x5=25次乘法运算。

就像二维解释一样,我们对每25个像素进行标量矩阵乘法,并输出一个数字。通过5x5x3内核后,12x12x3映像将变成8x8x1映像。

可分离卷积基本介绍

如果我们想增加输出图像中的通道数量,该怎么办?如果我们想要8x8x256的输出大小呢?

我们可以创建256个内核来创建256个8x8x1映像,然后将它们堆叠在一起来创建8x8x256映像输出。

可分离卷积基本介绍

这就是正常卷积的工作原理。

我喜欢把它看作一个函数:12x12x3-(5x5x3x256)-8x8x256(其中5x5x3x256代表内核的高度、宽度、输入通道数和输出通道数)。不是说这不是矩阵乘法;我们不是将整个图像乘以内核,而是将内核移动到图像的每个部分,并将其乘以图像的一小部分。

深度可分离卷积将过程分为两部分:深度卷积和点卷积。

第1部分-深度卷积:

无填充,同样

在第1部分深度卷积中,我们以相反的方向卷积输入图像,而不改变深度。我们使用三个5x5x1形状的核心。

请参考视频:

可分离卷积基本介绍

迭代每个5x5x1内核图像的1个通道(注意:1个通道,不是所有通道),以获得每25个像素组的标量积,并获得8x8x1图像。将这些图像相加,创建一个8x8x3图像。

第2部分-点对点卷积:

记住,原始卷积将12×12×3图像转换为8×8×256图像。目前,深度卷积已经将12×12×3图像转换为8×8×3图像。现在,我们需要增加每个图像的通道数。

点对点卷积之所以这样命名,是因为它使用1x1内核,或者说是一个遍历每个点的内核。内核有深度,不管输入图像有多少通道;在我们的例子中,它是3。因此,我们用8x8x3图像遍历1x1x3内核以获得8x8x1图像。

可分离卷积基本介绍

我们可以创建256个1×1×3内核,每个内核输出一个8×8×1映像,以获得一个形状为8×8×256的最终映像。

可分离卷积基本介绍

就是这样!我们把体积积分分解成两部分:深度卷积和点卷积。

更抽象地说,如果原始卷积函数是12x12x3 C (5x5x3x256)→8x8x256。

我们可以将这个新卷积表示为12 x 12 x 3°c(5 x 5 x 1 x 3)→8 x 8 x 3°c(1 x 1 x 3 x 256)c8 x 8 x 256。

三深度可分离卷积的优点和创新

让我们计算一下计算机在原始卷积中将进行的乘法运算的数量。有256个5x5x3内核可以移动8 x 8次。这是256x5x5x3x8x8=次乘法。

可分离卷积怎么样?在深度卷积中,我们有3个5x5x1的内核,它们移动了8 x 8次。也就是说,3x 5x 1x 8 x8=4800。在点对点卷积中,我们有256个1×1×3的内核,移动了8×8次。这是256x1x1x3x8x8=。将它们累加到次乘法。

52,952比1,228,800小得多。计算越少,网络可以在更短的时间内处理的数据就越多。

然而,这是怎么发生的?当我第一次遇到这个解释时,我的直觉并没有真正理解它。这两个螺旋不是在做同样的事情吗?在这两种情况下,我们将图像通过一个5×5的内核,将其缩减到一个通道,然后扩展到256个通道。为什么一个的速度是另一个的两倍多?

经过一段时间的思考,我意识到主要的区别是:在普通卷积中,我们对图像进行了256次变换。每次转换需要5x5x3x8x8=4800次乘法。在可分离卷积中,我们只对图像进行一次深度卷积。然后,我们简单地将转换后的图像扩展到256个通道。我们不需要反复变换图像,我们可以节省计算能力。

值得注意的是,在Keras和Tensorflow中有一个称为“深度乘数”的参数。默认设置是1。通过改变该参数,我们可以改变深度卷积中输出通道的数量。例如,如果我们将深度乘数设置为2,每个5x5x1内核将输出一个8x8x2图像,使深度卷积的总输出(堆栈)为8x8x6,而不是8x8x3。一些人可能选择手动设置深度乘数来增加神经网络中的参数数量,以便更好地学习更多特征。

深度可分卷积伟大吗?当然!因为它减少了卷积中的参数数量,如果你的网络已经很小,你可能得到很少的参数,并且你的网络在训练中可能不能正常工作。然而,如果使用得当,它可以在适当的情况下提高效率,这使得它成为一个非常受欢迎的选择。

1×1内核:

最后,因为点对点卷积使用这个概念,我想讨论一下1×1内核的用法。

一个1x1内核-或者更准确地说,N个1x 1毫米内核,其中N是输出通道的数量,M是输入通道的数量-可以在可分离卷积之外使用。1x1内核的一个明显目的是增加或减少图像的深度。如果您发现卷积通道太多或太少,1x1内核可以帮助平衡它。

然而,对我来说,1x1内核的主要目的是应用非线性。在神经网络的每一层之后,我们可以应用一个激活层。无论是ReLU、PReLU、Softmax还是其他,与卷积层不同,活动层是非线性的。直线的线性组合仍然是直线。非线性层扩展了模型的可能性,这就是为什么“深”网络通常比“宽”网络更好。为了在不显着增加参数和计算的情况下增加非线性层的数量,我们可以应用1x1内核,并在它后面添加一个活动层。这有助于增加网络的深度。

参考:

  • 友情链接:
  • 交口农业网 版权所有© www.imms2015.com 技术支持:交口农业网| 网站地图