2D卷积和3D卷积

2D卷积和3D卷积

Note:在讨论卷积核的维度的时候,是不把channel维加进去的(或者说,卷积核的维度指的的进行滑窗操作的维度,而滑窗操作是不在channel维度上进行的,因为每个channel共享同一个滑窗位置, 但每个channel上的卷积核权重是独立的)。所以2D conv的卷积核其实是(c, k_h, k_w),3D conv的卷积核就是(c, k_d, k_h, k_w),其中k_d就是多出来的第三维,根据具体应用,在视频中就是时间维,在CT图像中就是层数维。

  1. 2D 卷积
    2D卷积操作如图1所示,为了解释的更清楚,分别展示了单通道和多通道的操作。且为了画图方便,假定只有1个filter,即输出图像只有一个chanel。其中,针对单通道,输入图像的channel为1,即输入大小为(1, height, weight),卷积核尺寸为 (1, k_h, k_w),卷积核在输入图像上的的空间维度(即(height, width)两维)上进行进行滑窗操作,每次滑窗和 (k_h, k_w) 窗口内的values进行卷积操作(现在都用相关操作取代),得到输出图像中的一个value。
    针对多通道,假定输入图像的channel为3,即输入大小为(3, height, weight),卷积核尺寸为 (3, k_h, k_w), 卷积核在输入图像上的的空间维度(即(height, width)两维)上进行进行滑窗操作,每次滑窗与3个channels上的 (k_h, k_w) 窗口内的所有的values进行相关操作,得到输出图像中的一个value。
    在这里插入图片描述
  2. 3D 卷积
    3D卷积操作如图2所示,同样分为单通道和多通道,且只使用一个filter,输出一个channel。其中,针对单通道,与2D卷积不同之处在于,输入图像多了一个 depth 维度,故输入大小为(1, depth, height, width),卷积核也多了一个k_d维度,因
### 2D 卷积3D 卷积的区别 在深度学习中,卷积操作是一种用于提取特征的核心技术。2D 卷积 3D 卷积是两种常见的卷积类型,分别适用于不同的数据结构任务。以下是两者的主要区别: #### 数据度 - **2D 卷积**主要用于处理二数据,例如图像的像素矩阵。输入通常是一个三张量(高度 × 宽度 × 通道数),其中通道数表示颜色通道(如 RGB 图像有三个通道)[^1]。 - **3D 卷积**则扩展到三数据,例如视频帧序列或三医学影像。输入通常是一个四张量(深度 × 高度 × 宽度 × 通道数),其中深度表示时间度或空间的第三个轴[^1]。 #### 卷积核 - **2D 卷积**的卷积核是一个二矩阵(高度 × 宽度),它在输入的每个通道上滑动,并计算加权以生成特征图[^1]。 - **3D 卷积**的卷积核是一个三立方体(深度 × 高度 × 宽度),它不仅在空间度上滑动,还在时间或深度度上滑动,从而捕获更丰富的时空信息。 #### 参数数量 - **2D 卷积**的参数数量由卷积核大小(高度 × 宽度)输入/输出通道数决定。例如,对于一个 3×3 的卷积核,输入通道为 3,输出通道为 64,则参数数量为 \(3 \times 3 \times 3 \times 64 + 64\)(偏置项)[^4]。 - **3D 卷积**的参数数量由卷积核大小(深度 × 高度 × 宽度)输入/输出通道数决定。例如,对于一个 3×3×3 的卷积核,输入通道为 3,输出通道为 64,则参数数量为 \(3 \times 3 \times 3 \times 3 \times 64 + 64\)(偏置项)。 #### 应用场景 - **2D 卷积**广泛应用于图像分类、目标检测、语义分割等任务,这些任务主要涉及二空间中的特征提取。 - **3D 卷积**常用于视频分析、动作识别、三医学影像分割等任务,这些任务需要同时考虑空间时间度的特征[^1]。 #### 示例代码 以下是一个使用 PyTorch 实现 2D 3D 卷积的示例: ```python import torch import torch.nn as nn # 2D Convolution conv2d = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1) input_2d = torch.randn(1, 3, 32, 32) # Batch x Channels x Height x Width output_2d = conv2d(input_2d) print("2D Conv Output Shape:", output_2d.shape) # 3D Convolution conv3d = nn.Conv3d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1) input_3d = torch.randn(1, 3, 8, 32, 32) # Batch x Channels x Depth x Height x Width output_3d = conv3d(input_3d) print("3D Conv Output Shape:", output_3d.shape) ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值