卷积总结篇(普通卷积、转置卷积、膨胀卷积、分组卷积和深度可分离卷积)

目录

一、普通卷积:(“卷积”就是“加权求和”)

1.以2D卷积为例,2D卷积是一个相当简单的操作

2.卷积后的尺寸大小转换公式

3.功能

4.各个指标比较(参数量、计算量、感受野)

5.代码实现

二、转置卷积(Convolution Transposed,又叫反卷积、解卷积)

1.概念或背景

2.卷积后的尺寸大小转换公式

3.功能

4.各个指标比较(参数量、计算量、感受野)

5.转置卷积用途

6.代码实现

三、膨胀卷积( Dilated Convolution,又叫空洞卷积、扩张卷积)

1.概念或背景

2.卷积后的尺寸大小转换公式

3.功能

4.各个指标比较(参数量、计算量、感受野)

5.膨胀卷积用途

6.代码实现

四、分组卷积(Group Convolution)

1.概念或背景

2.卷积后的尺寸大小转换公式

3.功能

4.各个指标比较(参数量、计算量、感受野)

5.分组卷积用途

6.代码实现​​​​​​

 五、深度可分离卷积

1.逐通道卷积(Depthwise Convolution即DW卷积)

 2.逐点卷积(Pointwise Convolution即PW卷积)

3.深度可分离卷积的功能

4.各个指标比较(参数量、计算量、感受野)

5.深度可分离卷积用途

6.代码实现

六、总结 


什么是卷积?

         卷积是指在滑动中提取特征的过程,可以形象地理解为用放大镜把每步都放大并且拍下来,再把拍下来的图片拼接成一个新的大图片的过程。


一、普通卷积“卷积”就是“加权求和”)

更详细请看笔者的博文:矩阵乘法实现卷积运算_caip12999203000的博客-优快云博客_矩阵乘法实现卷积

1.以2D卷积为例,2D卷积是一个相当简单的操作

在这里插入图片描述


        我们先从一个小小的权重矩阵,也就是 卷积核(kernel 开始,让它逐步在二维输入数据上“扫描”。卷积核“滑动”的同时,计算权重矩阵和扫描所得的数据矩阵的乘积,然后把结果汇总成一个输出像素。

         这里原理上使用的滑动窗口,但也可以有更多高效的方法,例如:笔者的另外一篇文章,使用的是矩阵乘法实现的卷积运算。

2.卷积后的尺寸大小转换公式

 (其中W1为输入矩阵大小,K为卷积核大小,P为向外填充的参数,S为步长,W2为输出的矩阵大小

3.功能

        特征图大小不变或缩小。根据公式通过调整PS参数可实现特征图大小不变以及缩小。

4.各个指标比较(参数量、计算量、感受野)

输入的通道数为M,尺寸为DF x DF ,输出通道数为N,卷积核大小为Dx DK ,忽略偏执b

5.代码实现

Pytorch参考

import torch.nn as nn
import torch
# 输入值
im = torch.randn(1, 1, 5, 5)
# 普通卷积使用
c = nn.Conv2d(1, 1, kernel_size=2, stride=2, padding=1)
output = c(im)
# 输出
print("输入:\n",im.shape)
print("输出:\n",output.shape)
print("卷积核参数:\n",list(c.parameters()))

结果展示:


二、转置卷积(Convolution Transposed,又叫反卷积、解卷积

更详细请看笔者的博文:转置卷积(Convolution Transposed又叫反卷积、解卷积)_caip12999203000的博客-优快云博客

1.概念或背景

在这里插入图片描述

        通常,对图像进行多次卷积运算后,特征图的尺寸会不断缩小。而对于某些特定任务 (如图像分割和图像生成等),需将图像恢复到原尺寸再操作。这个将图像由小分辨率映射到大分辨率的尺寸恢复操作,叫做 上采样 (Upsample)

2.卷积后的尺寸大小转换公式

 (其中W1为输入矩阵大小,K为卷积核大小,P为向外填充的参数,S为步长,W2为输出的矩阵大小)

3.功能

        特征图变大(上采样)将低分辨率的特征图样上采样到原始图像的分辨率大小,以给出原始图片的分割结果。

4.各个指标比较(参数量、计算量、感受野)

(输入的通道数为M,尺寸为DF x DF ,输出通道数为N,卷积核大小为Dx DK ,忽略偏执b。)

5.转置卷积用途

1) DCGAN,生成器将随机值转变为一个全尺寸图片,此时需用到转置卷积。

2)在语义分割中,会在编码器中用卷积层提取特征,然后在解码器中恢复原先尺寸,从而对原图中的每个像素分类。该过程同样需用转置卷积。经典方法有 FCN U-net

3)CNN 可视化:通过转置卷积将 CNN 的特征图还原到像素空间,以观察特定特征图对哪些模式的图像敏感。

6.代码实现

Pytorch参考

import torch.nn as nn
import torch
# 输入值
im = torch.randn(1, 1, 5, 5)
# 转置卷积使用
c = nn.ConvTranspose2d(1, 1, kernel_size=2, bias=False)
output = c(im)
# 输出
print("输入:\n",im.shape)
print("输出:\n",output.shape)
print("卷积核参数:\n",list(c.parameters()))

结果展示


三、膨胀卷积( Dilated Convolution,又叫空洞卷积、扩张卷积

更详细请看笔者的博文:

膨胀卷积(Dilated convolutions)(又成空洞卷积、扩张卷积)_caip12999203000的博客-优快云博客

1.概念或背景

在这里插入图片描述

        膨胀卷积是在标准卷积的Convolution map的基础上注入空洞,以此来增加感受野(reception field)。因此,膨胀卷积在标准卷积的基础上又多了一个超参数(hyper-parameter)称之为膨胀率(dilation rate),该超参数指的是kernel的间隔数量。膨胀卷积是为解决语义分割任务而提出的。

2.卷积后的尺寸大小转换公式

(其中W1为输入矩阵大小,K为卷积核大小,P为向外填充的参数,S为步长,a为膨胀率,W2为输出的矩阵大小)

3.功能

        增大感受野,卷积核中间填充0。在于普通卷积相同的计算条件下的情况下,该卷积可以增大特征图的感受野。另外,通过修改padding的大小,可以保证输入输出特征图的shape不变。

4.各个指标比较(参数量、计算量、感受野)

(输入的通道数为M,尺寸为DF x DF ,输出通道数为N a为膨胀率,卷积核大小为Dx DK ,忽略偏执b。)

5.膨胀卷积用途

1)膨胀卷积(Dilated Convolution),广泛应用于语义分割与目标检测等任务中,语义分割中经典的deeplab系列与DUC对空洞卷积进行了深入的思考。目标检测中SSDRFBNet,同样使用了空洞卷积。

2)ESPNet ESP模块模块包含point-wise卷积空洞卷积金字塔,每层具有不同的dilation rate,在参数量不增加的情况下,能够融合多尺度特征,相比于深度可分离卷积,深度可分离空洞卷积金字塔性价比更高。(参考

6.代码实现

Pytorch参考

膨胀卷积中,paddingdilation所使用的因子需要是相同的,否则,可能会导致图像的尺寸会发生变化,就不是膨胀卷积了

import torch.nn as nn
import torch
# 输入值
im = torch.randn(1, 1, 5, 5)
# 膨胀卷积使用
dilation=2 # 膨胀率
c=nn.Conv2d(1, 1, kernel_size=2, stride=2,
                    padding=dilation, bias=False, dilation=dilation)
output = c(im)
# 输出
print("输入:\n",im.shape)
print("输出:\n",output.shape)
print("卷积核参数:\n",list(c.parameters()))

结果展示:


四、分组卷积(Group Convolution)

更详细请看笔者的博文:

组卷积和深度可分离卷积_caip12999203000的博客-优快云博客

1.概念或背景

        分组卷积(Group Convolution)顾名思义,在对特征图进行卷积的时候,首先对特征图分组再卷积。

2.卷积后的尺寸大小转换公式

(其中W1为输入矩阵大小,K为卷积核大小,P为向外填充的参数,S为步长,W2为输出的矩阵大小)

3.功能

1)减少参数量,分成G组,则该层的参数量减为原来的1/G
2)分组卷积可以看做是对原来的特征图进行了一个dropout,有正则的效果

4.各个指标比较(参数量、计算量、感受野)

(输入的通道数为M,尺寸为DF x DF ,输出通道数为N,卷积核大小为Dx DK g为组数,忽略偏执b。)

5.分组卷积用途

1)分组卷积,最早在AlexNet中出现,由于当时的硬件资源有限,训练AlexNet时卷积操作不能全部放在同一个GPU处理,因此作者把feature maps分给多个GPU分别进行处理,最有把多个GPU的结果进行融合。

2) IGCV1   简单通道的分组,都是只有一个分组,而以IGCVInterleaved Group Convolutions交替组卷积)系列为代表的模型采用了多个分组卷积结构级联的形式。(参考

6.代码实现

Pytorch参考

import torch.nn as nn
import torch
import numpy as np
# 输入值
im = torch.randn(1, 4, 5, 5)
# 分组卷积使用
groups = 2 # 组数
c=nn.Conv2d(4, 2, kernel_size=2, stride=2,
                     padding=2, groups=groups, bias=False)
output = c(im)
# 输出
print("输入:\n",im.shape)
print("输出:\n",output.shape)
print("卷积核参数:\n",list(c.parameters()))

结果展示: 

​​​​​​


 五、深度可分离卷积

 更详细请看笔者的博文:

组卷积和深度可分离卷积_caip12999203000的博客-优快云博客

        在计算资源受限制的移动端设备上,常规的卷积操作由于计算量大,经常难以满足实际运行速度的要求,这时深度可分离卷积(Depthwise Separable Convolution)就派上了用场。深度可分离卷积是由Depthwise(DW)卷积与Pointwise(PW)卷积组成。该结构和常规卷积类似,可用来提取特征,但相比常规卷积,其参数量和运算成本较低,所以在一些轻量级网络中经常用到此结构,如MobileNetShuffleNet

1.逐通道卷积Depthwise ConvolutionDW卷积

          Depthwise Convolution一个卷积核负责一个通道一个通道只被一个卷积核卷积,这个过程产生的Feature Map通道数和输入的通道数一样。

 2.逐点卷积Pointwise ConvolutionPW卷积

        Pointwise Convolution的运算与常规卷积非常相似,它的卷积核大小1x1xMM为上一层的通道数,所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个卷积核就有几个Feature map,卷积核的shape即为:1 x 1 x 输入通道数 x 输出通道数

3.深度可分离卷积的功能

        可以看出运用深度可分离卷积比普通卷积减少了所需要的参数。重要的是深度可分离卷积将以往普通卷积操作同时考虑通道和区域改变成,卷积先只考虑区域,然后再考虑通道。实现了通道和区域的分离。

4.各个指标比较(参数量、计算量、感受野)

(输入的通道数为M,尺寸为DF x DF ,输出通道数为N a为膨胀率,卷积核大小为Dx DK n为卷积核的个数,忽略偏执b。)

5.深度可分离卷积用途

1)一些轻量级网络中经常用到此结构,如MobileNetShuffleNetSqueezeNet

2) Xception  基 于Inception系列网络结构的基础上,结合depthwise separable convolution, 就是Xception。(参考 

6.代码实现

Pytorch

import torch.nn as nn
import torch
import numpy as np
# 输入值
im = torch.randn(1, 4, 5, 5)
# 深度可分卷积使用
hidden_channel = 4 # 组数
out_channel = 1
# DW卷积
c1 = nn.Conv2d(hidden_channel, hidden_channel, kernel_size=2, stride=2, padding=2, groups=hidden_channel, bias=False)
# PW卷积
c2 = nn.Conv2d(hidden_channel, out_channel, kernel_size=1, bias=False)
output1 = c1(im)
output2 = c2(output1)
# 输出
print("输入:\n",im.shape)
print("输出:\n",output2.shape)
print("卷积核参数:\n",list(c2.parameters()))

结果展示: 


六、总结 

        上面是笔者对于前面几个博客关于卷积的总结,分别从概念、背景、原理、参数量、计算量、感受野、各种卷积的优点以及在网络的应用展开讲解。如果您感觉有用的话,请点个👍,谢谢。

<think>好的,我现在需要回答用户关于卷积神经网络中不同类型卷积操作及其应用的问题。首先,我得回顾一下自己了解的卷积类型,确保没有遗漏重要的种类。常见的卷积操作包括标准卷积、空洞卷积转置卷积深度可分离卷积分组卷积等。可能还有其他的,比如1x1卷积、可变形卷积等等,这些都需要检查一下。 接下来,我需要确定每种卷积的定义、结构特点以及应用场景。例如,标准卷积是最基础的,用于提取局部特征;空洞卷积可以扩大感受野而不增加参数;转置卷积常用于图像分割中的上采样。深度可分离卷积在移动端模型中应用广泛,因为它减少了计算量。分组卷积如ResNeXt中的结构,可以提升效率。 然后,我需要考虑用户提供的参考内容。引用[1]提到卷积池化层,说明用户可能对基础结构有了解,但需要更详细的卷积类型。引用[2]讨论了三维数据的处理,提到了VAE,但用户的问题是关于卷积类型,所以可能需要提到3D卷积,尤其是在处理视频或体积数据时的应用。 需要注意用户提到的是图像处理或深度学习中的卷积,所以可能不需要涉及信号处理中的卷积,但如果有相关的变体在深度学习中使用,比如扩张卷积(即空洞卷积),则需要包括。同时,要确保每个卷积类型都有明确的应用举例,比如在哪些经典网络中出现过,如Xception使用深度可分离卷积,U-Net使用转置卷积等。 另外,要检查是否有最新的卷积类型,比如可变形卷积(Deformable Convolution),这些是否应该包含进去。可能用户希望得到全面的回答,所以尽量覆盖主要的类型。 在组织内容时,应该分点列出每种卷积,先给出名称,然后解释结构特点,再说明应用场景,并尽量结合实例,比如提到某个网络架构使用了该卷积类型。同时,使用用户提供的引用内容中的信息,比如引用[2]提到的三维数据处理,可以引出3D卷积的应用,并说明其与2D卷积的区别。 还需要确保LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,并且正确分段。例如,空洞卷积膨胀率可以用公式表示,转置卷积的运算可以用矩阵转置来解释。 最后,生成相关问题时要围绕卷积类型展开,可能涉及比较不同卷积的优缺点、适用场景、计算复杂度等,确保问题有助于用户进一步学习。 现在,把这些内容整理成结构清晰的回答,确保每个部分都准确无误,同时引用提供的参考文献中的相关内容,比如在讨论三维卷积时引用[2],在基础结构部分引用[1]。</think>卷积神经网络(CNN)中不同类型的卷积操作在特征提取数据维度处理中具有关键作用。以下是常见卷积类型及其应用场景的详细说明: --- ### 1. **标准卷积(Standard Convolution)** - **结构特点**:通过滑动窗口在输入特征图上进行局部区域的加权求,生成输出特征图。 数学表示为: $$(f * g)(i, j) = \sum_{m} \sum_{n} f(i+m, j+n) \cdot g(m, n)$$ 其中$f$为输入,$g$为卷积核。 - **应用**:用于提取图像的边缘、纹理等基础特征,是CNN的核心操作[^1]。例如,LeNet-5AlexNet均使用标准卷积。 --- ### 2. **空洞卷积(Dilated Convolution)** - **结构特点**:在卷积核内部插入“空洞”(间隔),扩大感受野而不增加参数。膨胀率$r$控制间隔大小,如$3 \times 3$核膨胀后等效于$(2r+1) \times (2r+1)$的感受野。 - **应用**:适用于需要捕捉长距离依赖的任务,如语义分割(DeepLab系列)时序数据分析。 --- ### 3. **转置卷积(Transposed Convolution)** - **结构特点**:通过反向传播的卷积运算实现上采样。数学上可视为标准卷积的逆过程,常用于恢复特征图尺寸。 例如,将低分辨率特征图扩展为高分辨率输出。 - **应用**:图像分割(如U-Net)、生成对抗网络(GAN)中的生成器。 --- ### 4. **深度可分离卷积(Depthwise Separable Convolution)** - **结构特点**:分为两步: 1. **深度卷积(Depthwise Convolution)**:每个输入通道独立卷积,不融合信息。 2. **逐点卷积(Pointwise Convolution)**:使用$1 \times 1$卷积跨通道融合特征。 计算量减少为$1/N + 1/k^2$($N$为输出通道数,$k$为卷积核大小)。 - **应用**:移动端轻量化模型(如MobileNet、EfficientNet)。 --- ### 5. **分组卷积(Grouped Convolution)** - **结构特点**:将输入通道分为多组,每组独立卷积后再拼接结果。例如,ResNeXt中将通道分组并行处理。 - **应用**:提升模型效率并减少参数量,适合大规模数据集(如ImageNet)的分类任务。 --- ### 6. **3D卷积(3D Convolution)** - **结构特点**:卷积核在三维空间(长、宽、深度)滑动,适用于视频或医学体数据(如CT扫描)。 数学表示为: $$(f * g)(i, j, k) = \sum_{x} \sum_{y} \sum_{z} f(i+x, j+y, k+z) \cdot g(x, y, z)$$ - **应用**:视频动作识别(C3D网络)、三维医学图像分割[^2]。 --- ### 7. **可变形卷积(Deformable Convolution)** - **结构特点**:通过学习卷积核的偏移量,使采样位置动态适应物体形状。 例如,卷积核的每个点可偏移$(\Delta x, \Delta y)$。 - **应用**:目标检测(如DCN网络)中处理形变或遮挡问题。 --- ### 8. **1×1卷积(Pointwise Convolution)** - **结构特点**:仅融合通道信息而不改变空间尺寸,常用于调整通道数或引入非线性。 - **应用**:Inception网络中的通道降维、ResNet中的特征融合[^1]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值