一二三维卷积

二维卷积

图中的输入的数据维度为 14 × 14 ,过滤器大小为 5 × 5,二者做卷积,输出的数据维度为 10 × 10( 14 − 5 + 1 = 10 )。
• 上述内容没有引入channel的概念,也可以说channel的数量为1。如果将二维卷积中输入的channel的数量变为3,即输入的数据维度变为(14 × 14 × 3)。由于卷积操作中过滤器的 channel 数量必须与输入数据的channel数量相同,过滤器大小也变为 5 × 5 × 3 。在卷积的过程中,过滤器与数据在 channel 方向分别卷积,之后将卷积后的数值相加,即执行 10 × 10 次3个数值相加的操作,最终输出的数据维度为 10 × 10 。
• 以上都是在过滤器数量为1的情况下所进行的讨论。如果将过滤器的数量增加至16,即16个大小为10 × 10 × 3 的过滤器,最终输出的数据维度就变为10 × 10 × 16 。可以理解为分别执行每个过滤器的卷积操作,最后将每个卷积的输出在第三个维度(channel 维度)上进行拼接。
• 二维卷积常用于计算机视觉、图像处理领域。
一维卷积
在这里插入图片描述
图中的输入的数据维度为8,过滤器的维度为5。与二维卷积类似,卷积后输出的数据维度为8−5+1=4。•如果过滤器数量仍为1,输入数据的channel数量变为16,即输入数据维度为 8 × 16 。这里channel的概念相当于自然语言处理中的embedding,而该输入数据代表8个单词,其中每个单词的词向量维度大小为16。在这种情况下,过滤器的维度由5变为 5 × 16 ,最终输出的数据维度仍为 4 。•如果过滤器数量为 n,那么输出的数据维度就变为 4 × n。• 一维卷积常用于序列模型,自然语言处理领域。
三维卷积
在这里插入图片描述
假设输入数据的大小为 a1 × a2 × a3,channel数为 c,过滤器大小为f,即过滤器维度为 f × f × f × c(一般不写 channel 的维度),过滤器数量为 n。• 基于上述情况,三维卷积最终的输出为 ( a1 − f + 1 ) × ( a2 − f + 1 ) × ( a3 − f + 1 ) × n 。该公式对于一维卷积、二维卷积仍然有效,只有去掉不相干的输入数据维度就行。• 三维卷积常用于医学领域(CT影响),视频处理领域(检测动作及人物行为)。
可以将滤波器与输入图像进行卷积来产生输出图像,那么什么是卷积操作呢?具体的步骤如下:
在图像的某个位置上覆盖滤波器;将滤波器中的值与图像中的对应像素的值相乘;把上面的乘积加起来,得到的和是输出图像中目标像素的值;对图像的所有位置重复此操作。
卷积的作用
求卷积的滤波器通常称为索伯滤波器,也是边缘检测器。
卷积操作的用处在于用输出图像中更亮的像素表示原始图像中存在的边缘。卷积有助于帮助找到特定的局部图像特征(比如边缘),用到后面的网络中。
填充,如果希望输出图像和输入图像大小相同,需要在图像周围添加零,可以在更多的位置叠加过滤器。
池化
图像中相邻像素倾向于具有相似的值,因此卷积层相邻的输出像素也具有相似的值。所以卷积层输出中也包含了冗余信息。
如果使用边缘检测器并在某个位置找到强边缘,那么也可能会在距离这个像素1个偏移的位置找到相对较强的边缘,但是他们都一样是边缘,没有找到新东西。
池化层就是通过减小输入的大小降低输出值的数量。一般通过最大最小值或者平均操作来完成。

### 3D 卷积操作简介 在深度学习框架中,如 TensorFlow 或 PyTorch,三维卷积(3D Convolution)是一种重要的工具,广泛应用于处理体积数据(volumetric data),例如医学影像、视频帧序列以及 3D 点云重建等任务。它通过扩展二维卷积的概念,在空间度的基础上增加了时间或深度度。 #### 3D 卷积的核心概念 三维卷积核不仅作用于图像的空间度(高度和宽度),还作用于第三个度(通常称为通道数或深度)。这种设计使得模型能够捕捉到更丰富的时空特征[^1]。对于像 ScanNet 这样的 3D 数据集,3D 卷积可以有效地提取局部几何结构并将其映射为高表示。 以下是基于 TensorFlow 和 PyTorch 的具体实现方法: --- ### 使用 TensorFlow 实现 3D 卷积 TensorFlow 提供了一个名为 `tf.keras.layers.Conv3D` 的接口来执行 3D 卷积操作。下面是一个简单的代码示例展示如何定义一个带有 He 权重初始化的 3D 卷积层: ```python import tensorflow as tf # 定义输入张量形状 (batch_size, depth, height, width, channels) input_tensor = tf.keras.Input(shape=(64, 64, 64, 1)) # 创建一个 3D 卷积层 conv_layer = tf.keras.layers.Conv3D( filters=32, # 输出通道数量 kernel_size=(5, 5, 5), # 卷积核大小 strides=(1, 1, 1), # 步幅 padding='same', # 填充方式 activation='relu', kernel_initializer=tf.keras.initializers.HeNormal() # 使用 He 初始化器 )(input_tensor) model = tf.keras.Model(inputs=input_tensor, outputs=conv_layer) print(model.summary()) ``` 上述代码片段展示了如何构建一个基本的 3D 卷积神经网络架构,并利用 He 初始化器设置权重参数[^3]。 --- ### 使用 PyTorch 实现 3D 卷积 PyTorch 中对应的类是 `torch.nn.Conv3d`,它可以轻松集成到任何自定义模块中。以下是一段完整的 Python 脚本演示其用法: ```python import torch import torch.nn as nn class Simple3DCNN(nn.Module): def __init__(self): super(Simple3DCNN, self).__init__() # 定义第一个 3D 卷积层 self.conv1 = nn.Conv3d( in_channels=1, # 输入通道数 out_channels=32, # 输出通道数 kernel_size=5, # 卷积核尺寸 stride=1, # 移动步长 padding=2 # 边缘填充 ) def forward(self, x): x = self.conv1(x) return torch.relu(x) # 应用 ReLU 激活函数 # 测试模型 if __name__ == "__main__": model = Simple3DCNN() input_data = torch.randn(1, 1, 64, 64, 64) # 随机生成一批测试数据 output = model(input_data) print(output.shape) # 打印输出张量的形状 ``` 此脚本说明了如何创建一个基础的 3D CNN 并对其进行前向传播计算。值得注意的是,默认情况下 PyTorch 不会自动应用激活函数;因此需要显式调用它们。 --- ### 结合实际应用场景 当涉及到复杂的数据流估计问题时,比如光流场预测,则可能需要用到更加高级的技术方案——类似于 FlowNet 2.0 架构的设计思路[^2]。这类算法往往依赖多个连续帧之间的差异来进行精确建模,而这些过程恰好可以通过堆叠多层 3D Convolutions 来完成。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值