一、普通卷积
普通卷积(Regular Convolution 或 Standard Convolution)是卷积神经网络(CNN)中最基本的卷积操作之一。在图像处理和计算机视觉任务中,普通卷积用于从输入特征图中提取有用的特征。以下是普通卷积的详细解释:
1. 卷积核(Kernel)
-
定义:卷积核是一个小的矩阵(或张量),其大小通常是奇数(如3x3、5x5等),用于在输入特征图上进行滑动窗口操作。
-
权重:卷积核中的每个元素都是一个可学习的权重,这些权重在训练过程中通过反向传播算法进行更新。
2. 卷积操作
-
滑动窗口:卷积核在输入特征图上以一定的步长(stride)进行滑动,每次滑动都会覆盖输入特征图上的一个局部区域(称为感受野)。
-
元素相乘与求和:在卷积核覆盖的每个局部区域内,将卷积核中的权重与输入特征图上的对应元素相乘,然后将所有乘积相加(有时还包括一个偏置项),得到输出特征图上的一个元素。
-
多通道处理:如果输入特征图是多通道的(如RGB图像有三个通道),则卷积核也会是三维的,每个通道对应一个二维的卷积核。这些二维卷积核分别与输入特征图的对应通道进行卷积,然后将结果相加(或进行其他形式的融合),以生成输出特征图的一个通道。这个过程会重复进行,直到生成所有输出通道。
3. 参数共享
-
在普通卷积中,同一个卷积核的权重会在输入特征图的所有位置共享。这意味着无论卷积核在输入特征图上滑动到哪里,它都会使用相同的权重进行卷积操作。这种参数共享机制有助于减少模型的参数量,并使得模型更加容易训练。
4. 填充(Padding)
-
为了控制输出特征图的尺寸,有时会在输入特征图的边界周围添加额外的零值(称为填充)。填充可以增加感受野的大小,并允许输出特征图的尺寸与输入特征图相同或更大。
5. 步长(Stride)
-
步长是卷积核在输入特征图上滑动时每次移动的距离。步长越大,输出特征图的尺寸就越小;步长越小,输出特征图的尺寸就越大。
6. 优缺点
-
优点:普通卷积具有较强的表达能力和精度,能够提取出输入特征图中的复杂特征。
-
缺点:与普通卷积相比,深度可分离卷积等轻量化卷积方式在参数量和计算量上更加高效,但普通卷积的参数量和计算量较大,可能导致模型过拟合和计算资源消耗过多。
7. 应用场景
-
普通卷积广泛应用于各种图像处理和计算机视觉任务中,如图像分类、目标检测、语义分割等。在这些任务中,普通卷积通常作为CNN中的基本构建块之一,用于提取图像中的有用特征。
如下图所示,假设输入层为一个大小为64×64像素、3通道彩色图片。经过一个包含4个Filter的卷积层,最终输出4个Feature Map,且尺寸与输入层相同。此时,卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。因此,卷积层的参数量为: 4 × 3 × 3 × 3 = 108
二、逐点卷积
逐点卷积(Pointwise Convolution),又称为1x1卷积,是卷积神经网络(CNN)中一种特殊类型的卷积操作。它主要具有以下几个特点和应用:
定义与特点
-
定义:逐点卷积使用1x1的卷积核对输入特征图进行卷积操作。这种卷积核的尺寸在宽和高上都是1,因此它可以在输入特征图的每个位置上独立地应用,而不会影响特征图的空间维度(即宽度和高度)。
-
通道变换:逐点卷积的主要作用是改变特征图的通道数。通过调整输出通道的数量,可以在不改变特征图空间维度的情况下,实现特征的升维或降维。
-
计算效率:由于卷积核的大小为1x1,逐点卷积的计算量相对较小,有助于提高模型的计算效率。
作用与应用
-
通道混合与整合:
-
逐点卷积通过在所有通道间应用卷积核,将不同通道的信息进行线性组合,从而实现通道间的混合与整合。这有助于网络学习到更丰富的特征表示。
-
在通道数较多的卷积层中,逐点卷积特别有用,因为它能够在不增加计算复杂度的同时,增强特征间的相互作用。
-
-
维度变换:
-
逐点卷积可以在不改变特征图空间维度的情况下,灵活地调整通道数。这使得它在网络设计中非常灵活,可以用于控制模型的参数数量和计算复杂度。
-
例如,在减少或增加通道数时,逐点卷积可以作为过渡层,帮助网络适应不同的特征表示需求。
-
-
与其他卷积操作结合:
-
逐点卷积通常与其他卷积操作(如深度卷积、普通卷积等)结合使用,以构建更强大的网络架构。
-
在深度可分离卷积(Depthwise Separable Convolution)中,逐点卷积是关键的组成部分之一。它首先通过深度卷积在每个通道上独立地提取特征,然后通过逐点卷积将不同通道的特征进行融合和整合。
-
简单理解,逐点卷积就是W/H维度不变,改变channel。
根据深度卷积可知,输入特征图通道数=卷积核个数=输出特征图个数,这样会导致输出的特征图个数过少(或者说输出特征图的通道数过少,可看成是输出特征图个数为1,通道数为3),从而可能影响信息的有效性。此时,就需要进行逐点卷积。
逐点卷积(Pointwise Convolution,PWConv)实质上是用1x1的卷积核进行升维。在GoogleNet中大量使用1x1的卷积核,那里主要是用来降维。1x1的卷积核主要作用是对特征图进行升维和降维。
如下图所示,从深度卷积得到的3个单通道特征图,经过4个大小为1x1x3卷积核的卷积计算,输出4个特征图,而输出特征图的个数取决于Filter的个数。因此,卷积层的参数量为:1 × 1 × 3 × 4 = 12
再比如,经过逐深度卷积得到 8x8x3 的特征图,256个1x1x3的卷积核,经过逐点卷积输出8x8x256的特征图。因此,卷积层的参数量为:1 × 1 × 3 × 256 = 768
示例
在PyTorch中,可以通过torch.nn.Conv2d
类并设置kernel_size=1
来定义一个逐点卷积层。例如:
import torch
import torch.nn as nn
# 定义一个逐点卷积层
pointwise_conv = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=1)
# 假设有一个输入特征图
input_tensor = torch.randn(1, 16, 32, 32) # 1个样本, 16个通道, 32x32的特征图
# 进行逐点卷积
output_tensor = pointwise_conv(input_tensor)
print(output_tensor.shape) # 输出: torch.Size([1, 32, 32, 32])
在这个例子中,输入特征图有16个通道,通过逐点卷积后,输出特征图的通道数变为了32个,而空间维度(宽度和高度)保持不变。
结论
逐点卷积是卷积神经网络中一种非常重要的卷积操作,它通过简单的1x1卷积核实现了特征图的通道变换和通道间的信息整合。在网络设计中,逐点卷积可以灵活地与其他卷积操作结合使用,以构建出更加高效和强大的网络架构。
三、深度卷积
深度卷积(Depthwise Convolution)是卷积神经网络(CNN)中一种特殊的卷积操作,它主要用于在输入特征图的每个通道上独立地进行卷积操作。以下是深度卷积的详细解释:
定义与特点
-
定义:深度卷积使用与输入特征图通道数相同数量的卷积核,每个卷积核仅对输入特征图的一个通道进行卷积操作。这意味着,如果输入特征图有N个通道,那么就会有N个卷积核,每个卷积核负责一个通道。
-
独立性:深度卷积的最大特点是每个通道独立进行卷积,这与其他类型的卷积操作(如普通卷积)不同,后者通常会在所有通道上同时进行卷积,并将结果相加或融合。
-
参数数量:由于每个通道仅使用一个卷积核,因此深度卷积的参数量相对较少。这有助于减少模型的复杂性和计算量。
工作原理
-
在深度卷积中,每个卷积核的大小通常是固定的(如3x3、5x5等),但深度(即通道数)与输入特征图的通道数相同。
-
卷积核在输入特征图的对应通道上进行滑动窗口操作,每次滑动都会覆盖一个局部区域(称为感受野)。
-
在每个感受野内,卷积核的元素与输入特征图对应位置的元素相乘并求和(有时还包括一个偏置项),得到输出特征图上的一个元素。
-
这个过程会在所有通道上独立进行,因此输出特征图的通道数与输入特征图的通道数相同。
优点与应用
-
减少参数量:深度卷积通过减少卷积核的数量(即每个通道使用一个卷积核)来显著降低模型的参数量。这有助于减少模型的复杂性和过拟合的风险。
-
提高计算效率:由于参数量减少,深度卷积在计算上也更加高效。这使得它特别适合于在资源受限的设备(如移动设备)上运行。
-
与其他卷积操作结合:深度卷积通常与逐点卷积(Pointwise Convolution)结合使用,形成深度可分离卷积(Depthwise Separable Convolution)。这种组合可以在不牺牲模型性能的前提下显著提高计算效率。
-
应用场景:深度卷积在图像分类、目标检测、语义分割等计算机视觉任务中都有广泛的应用。特别是在构建轻量级和高效的CNN模型时,深度卷积是一个非常重要的组件。
简单理解,深度卷积就是深度(channel)维度不变,改变H/W。
深度卷积(Depthwise convolution,DWConv)与标准卷积的区别在于,深度卷积的卷积核为单通道模式,需要对输入的每一个通道进行卷积,这样就会得到和输入特征图通道数一致的输出特征图。即有输入特征图通道数=卷积核个数=输出特征图个数。
假设,一个大小为64×64像素、3通道彩色图片,3个单通道卷积核分别进行卷积计算,输出3个单通道的特征图。所以,一个3通道的图像经过运算后生成了3个Feature map,如下图所示。其中一个Filter只包含一个大小为3×3的Kernel,卷积部分的参数量为:3 × 3 × 3 = 27
再比如,输入12x12x3 的特征图,3个5x5x1的卷积核,经过逐深度卷积输出8x8x3的特征图。因此,卷积层的参数量为:5 × 5 × 3 = 45
综上所述,深度卷积是CNN中一种特殊的卷积操作,它通过在每个通道上独立进行卷积来减少模型的参数量和计算量。这种操作在构建高效、轻量级的CNN模型时特别有用。
四、深度可分离卷积
深度可分离卷积(Depthwise Separable Convolution)是一种高效的卷积操作,主要用于卷积神经网络(CNN)中,特别是在图像处理和计算机视觉任务中。这种卷积方式通过将传统的卷积操作拆分为两个独立的步骤来提高模型的效率和准确性。以下是对深度可分离卷积的详细解析:
一、基本原理
深度可分离卷积将标准卷积分解为两个主要步骤:
-
深度卷积(Depthwise Convolution):
-
在这一步中,卷积操作是逐通道(depthwise)进行的,即每个输入通道都会独立地应用一个卷积核。这意味着如果有M个输入通道,那么就会使用M个卷积核,每个卷积核仅负责一个通道的卷积操作。这样做的好处是可以显著减少参数数量和计算量。
-
深度卷积通常使用较小的卷积核(如3x3),以有效提取局部特征。
-
-
逐点卷积(Pointwise Convolution):
-
在深度卷积之后,使用1x1的卷积核对所有通道的输出进行卷积,也称为逐点卷积或点卷积。这一步的目的是将不同通道的特征进行混合和组合,以生成新的特征图。
-
逐点卷积通过1x1的卷积核,在保持特征图尺寸不变的同时,将深度卷积的输出在通道维度上进行线性组合,从而增强模型的表达能力。
-
二、优势
-
参数效率:
-
深度可分离卷积通过减少参数数量,使得模型更加轻量化。与标准卷积相比,深度可分离卷积的权重数约为标准卷积的10%至25%,这有助于在计算资源有限的设备上部署模型。
-
-
计算效率:
-
由于参数数量的减少,深度可分离卷积也显著降低了计算量,提高了模型的计算效率。这对于实时图像处理和移动设备上的应用尤为重要。
-
-
表达能力:
-
尽管深度可分离卷积在参数数量和计算量上有所减少,但通过逐点卷积层将不同通道的特征进行融合,它仍然能够保持良好的特征表示能力,有助于提高模型的准确性和泛化能力。
-
深度可分离卷积(Depthwise separable convolution, DSC)由逐深度卷积和逐点卷积组成,深度卷积用于提取空间特征,逐点卷积用于提取通道特征。深度可分离卷积在特征维度上分组卷积,对每个channel进行独立的逐深度卷积(depthwise convolution),并在输出前使用一个1x1卷积(pointwise convolution)将所有通道进行聚合。
深度可分离卷积,先对每个channel进行DWConv,然后再通过 PWConv合并所有channels为输出特征图,从而达到减小计算量、提升计算效率的目的。
深度可分离卷积的每个块构成:首先是一个3x3的深度卷积,其次是BN、Relu层,接下来是1x1的逐点卷积,最后又是BN和Relu层。
三、计算复杂度
深度可分离卷积显著减少了标准卷积的计算量。假设输入特征图的尺寸为 (H x W),输入通道为 (C_in),输出通道为 (C_out),卷积核大小为 (k x k),那么:
标准卷积的计算量:
深度可分离卷积的计算量:
深度卷积的计算量:
逐点卷积的计算量:
总计算量:
与标准卷积相比,深度可分离卷积的计算复杂度显著降低,尤其是在 (C_out) 较大时,这种节省尤为明显。
四、应用
深度可分离卷积在计算机视觉任务中有着广泛的应用,包括但不限于:
-
图像分类:如MobileNet系列网络使用深度可分离卷积实现了轻量化的图像分类模型,并在移动设备上展现出优秀的性能。
-
目标检测:一些轻量化的目标检测算法(如SSD MobileNet)采用深度可分离卷积结构,在保持准确性的同时显著提高了计算效率。
-
语义分割:通过将深度可分离卷积与空洞卷积(Dilated Convolution)相结合,可以实现更精细的像素级别的分割效果。
五、结论
综上所述,深度可分离卷积通过分解传统卷积操作,在提高模型效率的同时保持了良好的表达能力。它在图像分类、目标检测和语义分割等计算机视觉任务中得到了广泛应用,并推动了相关领域的发展。随着深度学习技术的不断进步,深度可分离卷积有望在更多领域展现出其独特的优势。
五、深度可分离卷积和普通卷积有什么区别
深度可分离卷积和普通卷积在卷积神经网络(CNN)中都是重要的卷积操作,但它们之间存在显著的区别,主要体现在卷积核的结构、计算方式、参数量、计算量以及应用场景等方面。
一、卷积核结构和计算方式
-
普通卷积:
-
使用一个固定大小的卷积核(通常是多维的,如3x3、5x5等),在输入特征图的每个位置进行卷积计算。
-
卷积核的每个通道分别与输入特征图的对应通道进行卷积,然后将所有通道的结果相加(或进行其他形式的融合),以生成输出特征图的一个通道。这个过程会重复进行,直到生成所有输出通道。
-
每个卷积核都需要学习多个权重值,且不同的卷积核之间没有共享权重。
-
-
深度可分离卷积:
-
将卷积操作分为深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)两部分。
-
深度卷积:每个输入通道独立地应用一个卷积核,即卷积核的个数与输入通道数相同。这样,每个通道的特征都会被单独提取,而不会与其他通道混合。
-
逐点卷积:使用1x1的卷积核对深度卷积的输出进行卷积,以将不同通道的特征进行组合,生成新的特征图。这个步骤类似于标准的卷积操作,但卷积核的大小为1x1。
-
二、参数量和计算量
-
普通卷积:
-
参数量较大,因为每个卷积核都需要学习多个权重值,并且这些权重值在不同的卷积核之间不共享。
-
计算复杂度较高,因为每个卷积核都需要与输入特征图的每个位置进行卷积计算。
-
-
深度可分离卷积:
-
参数量较小,因为深度卷积中每个通道都共享一个卷积核,且逐点卷积的卷积核大小为1x1。
-
计算量也较小,因为深度卷积是逐通道进行的,减少了计算复杂度;逐点卷积虽然涉及所有通道,但卷积核大小为1x1,计算量也相对较低。
-
三、优缺点和应用场景
-
普通卷积:
-
优点:具有较强的表达能力和精度,适用于精度要求较高的场景。
-
缺点:参数量大,计算复杂度高,容易导致过拟合。
-
应用场景:图像分类、目标检测、语义分割等需要高精度模型的领域。
-
-
深度可分离卷积:
-
优点:参数量小,计算速度快,模型轻量化,适合在移动端和嵌入式设备等计算资源有限的场景中使用。
-
缺点:表达能力和精度相对普通卷积较弱。
-
应用场景:移动端应用、实时图像处理、轻量化模型设计等。
-
综上所述,深度可分离卷积和普通卷积在卷积神经网络中各有优缺点和适用场景。在实际应用中,可以根据具体需求和资源限制选择合适的卷积方式。
参考: