多通道和单通道3D卷积及其运算过程详解

前言

大家对1D卷积的介绍以及2D卷积中单通道和多通道的介绍已经十分完备了,我在这就不对这两方面做过多的介绍了,不了解的可以自行查看以下文章:形象理解深度学习中八大类型卷积
本人直接对网上介绍资料较少的3D卷积特别是多通道的3D卷积进行较为详细的介绍。

3D卷积作用

对于2DCNN,我们知道可以很好的处理单张图片中的信息,但是其对于视频这种由多帧图像组成的图片流,以及CT等一些医学上的3维图像就会显得束手无策。因为2D卷积没有考虑到图像之间时间维度上的物体运动信息的变化(3维CT图像也可以近似看为是二维图像在时间上的变化)。因此,为了能够对视频(包括3维医学图像)信息进行特征提取,以便用来分类及分割任务,提出了3D卷积,在卷积核中加入时间维度。

Pytorch中对应函数参数详解

class torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
说明
bigotimes: 表示二维的相关系数计算 stride: 控制相关系数的计算步长
dilation: 用于控制内核点之间的距离,详细描述在这里
groups: 控制输入和输出之间的连接: group=1,输出是所有的输入的卷积;group=2,此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来。
参数kernel_size,stride,padding,dilation可以是一个int的数据 - 卷积height和width值相同,也可以是一个有三个int数据的tuple数组,tuple的第一维度表示depth的数值,tuple的第二维度表示height的数值,tuple的第三维度表示width的数值
Parameters:
in_channels(int) – 输入信号的通道
out_channels(int) – 卷积产生的通道
kernel_size(int or tuple) - 卷积核的尺寸
stride(int or tuple, optional) - 卷积步长
padding(int or tuple, optional) - 输入的每一条边补充0的层数
dilation(int or tuple, optional) – 卷积核元素之间的间距
groups(int, optional) – 从输入通道到输出通道的阻塞连接数
bias(bool, optional) - 如果bias=True,添加偏置
Example:

>>> # With square kernels and equal stride
>>> m = nn.Conv3d(16, 33, 3, stride=2)
>>> # non-square kernels and unequal stride and with padding
>>> m = nn.Conv3d(16, 33, (3, 5, 2), stride=(2, 1, 1), padding=(4, 2, 0))
>>> input = autograd.Variable(torch.randn(20, 16, 10, 50, 100))
>>> output = m(input)

单通道3D卷积详解

针对单通道,与2D卷积不同之处在于,输入的图像多了一个 depth 维度,即输入为(1, depth, height, width),卷积核也多了一个k_d维度,因此卷积核在输入3D图像的空间维度(height和width维)和depth维度上均进行滑窗操作,每次滑窗与 (k_d, k_h, k_w) 窗口内的values进行相关操作,得到输出3D图像中的一个value。
针对多通道,输入大小为(3, depth, height, width),则与2D卷积的操作一样,每次滑窗与3个channels上的 (k_d, k_h, k_w) 窗口内的所有values进行相关操作,得到输出3D图像中的一个value。

在这里插入图片描述
这就是3D卷积的详细过程,从图中可以看出每次卷积需要考虑多个帧数的图片信息,最终卷积后的结果也是一个三维图像。其实单通道的3D卷积和多通道的2D卷积过程相差不多。下图详细表述两者的区别
在这里插入图片描述
这是多通道的2D卷积过程,可以看出特征图具有多个通道,将多通道的2维特征图放到一起和单通道的3维特征图一样。卷积核的大小中通道数与特征图的通道数必须保持一致,如上图所示进行一次卷积操作时得到一个值,当卷积核在长和宽方向上移动完毕时就得到了一个2维特征图。由于卷积核和输入特征图在通道方向上大小一致因此在通道方向上卷积核无法移动,这就是为何一个卷积核产生的结果是2维的。
单通道的卷积过程
以上是单通道的3D卷积过程,由图可见,其与多通道2D卷积的区别在于在第三个维度(可以是时间维度)卷积核的维度大小不是必须和输入图像的维度相等。因此在这个方向上卷积核也是可以移动的,最终一个3D卷积核卷积操作之后的特征图也是3维的。这就是多通道2D卷积与单通道3D卷积的区别与联系。

多通道3D卷积

对于单通道卷积的介绍网上资料很多,借助常见的多通道2D卷积也是很好理解的。但是在实际使用中在模型的中间层部分,就不再是单通道的3D卷积了,3维特征图将变成多通道的特征图。如何进行多通道的3D卷积网上资料所谈甚少,最终通过查看相关资料以及自己理解发现下图可以很形象的表述多通道3D卷积的过程。
在这里插入图片描述
借用多通道2D卷积过程可知,3D卷积核的通道数和特征图的通道数是一致的,则在单个3维特征图上的卷积过程可参见单通道3D卷积的过程,多通道3D卷积的每一次卷积操作将多个通道卷积核的结果相加作为卷积结果的一个值。则最终多通道3D卷积过程既可以考虑到多通道信息的融合问题,1个卷积核卷积后的结果也是3维特征图。如果输出需要是多通道的,则需要多个多通道3D卷积核。

<think>好的,我现在需要帮助用户查找卷积神经网络卷积运算过程图解,并进行详细解释。首先,我需要回顾之前的对话历史,确保回答符合用户的需求。 用户之前要求详细介绍卷积神经网络,我已经给出了包括核心组件、数学原理、经典架构等内容。现在用户的问题集中在卷积运算过程图解上,所以需要具体解释这一部分,并尽量提供图示或文字描述。 首先,用户提到了站内引用[1][2],其中引用[1]提到了卷积神经网络算法运算公式,引用[2]讨论了参数调整流程。虽然这些引用提到了一些相关概念,但用户明确指出这些仅供参考,真正的需求是卷积运算过程图解。因此,我需要专注于解释卷积运算的步骤,可能的话用文字描述代替图表,并确保符合之前的格式要求,比如使用$...$$$...$$的数学表达式。 接下来,我需要分解卷积运算的具体步骤。根据之前的知识,卷积层通过滤波器在输入数据上滑动,进行局部区域的乘积累加操作。这个过程涉及到输入矩阵卷积核、步长、填充等概念。为了详细说明,可能需要分步骤解释,例如输入数据、卷积核移动、计算每个位置的输出值、处理边缘的方式(填充),以及最终生成特征图的过程。 同时,用户可能需要一个具体的例子来帮助理解。例如,使用一个3x3输入矩阵一个2x2的卷积核,演示每一步的计算。此外,需要解释步长填充对输出尺寸的影响,可能给出数学公式,比如输出尺寸的计算公式:$$H_{out} = \left\lfloor \frac{H_{in} + 2P - K}{S} \right\rfloor + 1$$,其中H_in是输入高度,P是填充,K是卷积核大小,S是步长。 另外,用户可能需要了解不同填充方式(如ValidSame)的区别,以及多通道输入时的卷积运算如何处理,比如每个通道使用不同的卷积核,然后将结果相加再加上偏置项。这部分需要结合之前的回答中的内容,确保一致性。 最后,用户可能需要一个简单的代码示例,比如使用PyTorch或TensorFlow实现卷积层,并注释说明参数设置。这可以帮助用户将理论应用于实践,并理解实际代码中的参数如何影响卷积过程。 在整理这些内容时,需要保持结构清晰,分步骤解释,使用列表公式,并确保语言简洁易懂。同时,要检查是否符合之前的格式要求,如正确使用数学表达式的格式,避免使用Markdown,用中文回答,并在适当的位置添加引用标识,例如关于卷积运算的数学公式引用之前的说明[^2]。</think>### 卷积神经网络(CNN)卷积运算过程详解 #### 1. 卷积运算核心流程(附文字图解) **输入数据示例**:假设输入为 $3\times3$ 矩阵单通道) $$ I = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix} $$ **卷积核示例**:使用 $2\times2$ 滤波器 $$ K = \begin{bmatrix} -1 & 0 \\ 0.5 & 1 \end{bmatrix} $$ **运算过程**(步长=1,无填充): 1. **初始位置**:卷积核覆盖输入左上角 $2\times2$ 区域 $$ \begin{bmatrix} 1 & 2 \\ 4 & 5 \end{bmatrix} $$ **计算**:$(1\times-1)+(2\times0)+(4\times0.5)+(5\times1) = -1 + 0 + 2 + 5 = 6$ 2. **右移一步**:覆盖右上角区域 $$ \begin{bmatrix} 2 & 3 \\ 5 & 6 \end{bmatrix} $$ **计算**:$(2\times-1)+(3\times0)+(5\times0.5)+(6\times1) = -2 + 0 + 2.5 + 6 = 6.5$ 3. **下移一行**:覆盖左下角区域 $$ \begin{bmatrix} 4 & 5 \\ 7 & 8 \end{bmatrix} $$ **计算**:$(4\times-1)+(5\times0)+(7\times0.5)+(8\times1) = -4 + 0 + 3.5 + 8 = 7.5$ 4. **右移到底**:覆盖右下角区域 $$ \begin{bmatrix} 5 & 6 \\ 8 & 9 \end{bmatrix} $$ **计算**:$(5\times-1)+(6\times0)+(8\times0.5)+(9\times1) = -5 + 0 + 4 + 9 = 8$ **最终特征图**: $$ \begin{bmatrix} 6 & 6.5 \\ 7.5 & 8 \end{bmatrix} $$ #### 2. 关键参数可视化说明 | 参数类型 | 图示描述 | 数学影响 | |---------|---------|----------| | **步长(Stride)** | 卷积核每次移动的像素数 | 输出尺寸公式:<br>$$H_{out} = \left\lfloor \frac{H_{in} + 2P - K}{S} \right\rfloor + 1$$ | | **填充(Padding)** | 在输入边缘添加零值的层数 | - Valid模式:$P=0$(无填充)<br>- Same模式:$P=(K-1)/2$(保持输出尺寸) | | **深度(Depth)** | 卷积核数量决定输出通道数 | 每个核学习不同特征模式 | #### 3. 多通道卷积过程输入为RGB图像3通道)时: 1. 每个卷积核包含3个对应通道的权重矩阵 2. 各通道分别进行卷积运算 3. 结果相加后加上偏置项: $$ Output = \sum_{c=1}^{C}(I_c * K_c) + b $$ 其中$C$为输入通道数,$b$为偏置参数 #### 4. 动态过程辅助理解 (由于无法展示动画,描述关键帧) 1. **卷积核扫描**:以滑动窗口方式遍历整个输入区域 2. **感受野变化**:浅层关注局部细节(如边缘),深层组合局部特征形成语义概念 3. **参数更新**:通过反向传播自动优化卷积核权重[^2] ```python # PyTorch卷积过程示例 import torch import torch.nn as nn # 输入数据:1个样本,3通道,5x5尺寸 input = torch.randn(1, 3, 5, 5) # 定义卷积层:3输入通道,2输出通道,3x3核,步长2,填充1 conv = nn.Conv2d(3, 2, kernel_size=3, stride=2, padding=1) output = conv(input) print(output.shape) # 输出尺寸:torch.Size([1, 2, 3, 3]) ``` #### 5. 实际应用中的特征可视化 通过可视化中间层特征图可观察到: - 第一层:检测边缘、颜色突变 - 第三层:识别纹理、基本形状 - 第五层:组合出物体部件(如车轮、动物头部) --- **
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值